Czy istnieje sposób na ustawienie uprawnień, aby proces mógł korzystać z określonego urządzenia?


12

Jak możesz przeczytać, na przykład tutaj , logind, który jest częścią systemd, może ustawiać uprawnienia do niektórych urządzeń na sesje użytkownika. Jest też film pokazujący, jak tego rodzaju zachowanie działa w praktyce. Krótko mówiąc, jeśli zaczniesz, powiedzmy, amarok i odtworzysz jakiś utwór, usłyszysz dźwięk, dopóki nie przełączysz się na innego użytkownika lub TTY, gdzie masz tylko monit o zalogowanie. Jest tak, ponieważ aktywna sesja stała się nieaktywna.

Wiem, że możesz po prostu dodać użytkownika (lub użytkowników) do określonej grupy, w tym przypadku „audio”, i to „naprawi” ten problem, ale zastanawiam się, czy istnieje inne rozwiązanie. To, czego naprawdę chcę, to ustawić uprawnienia dla tego procesu, aby mógł on używać karty dźwiękowej przez cały czas, nawet gdy wszyscy użytkownicy mają zablokowane sesje.

Czy to jest możliwe? Pytam, ponieważ często słucham muzyki i tak naprawdę nie potrzebuję, aby monitor był włączony przez większość czasu, więc po prostu blokuję ekran. Ale kiedy blokuję ekran, aktywna sesja staje się nieaktywna i amarok przestaje grać. I tak, ekran powinien być zablokowany, a nie tylko wyłączony.

EDYTOWAĆ:

Nie sądzę, żeby miało znaczenie, z której dystrybucji korzystam, ponieważ jeśli na pokładzie jest system, byłby to dokładnie ten sam problem. W każdym razie używam sid Debiana, ale niektóre pakiety, takie jak systemd, udev (i niektóre zależności) pochodzą z gałęzi eksperymentalnej, a teraz jest to wersja 219-9.


1
Być może bieganie nohup program_x & ; disownmoże pomóc. Lub za pomocą ekranu
JustMe

Ale proces działa dobrze. Kiedy blokuję ekran, nie może on już korzystać z karty dźwiękowej, przynajmniej do momentu odblokowania ekranu.
Michaił Morfikow

Czy próbowałeś użyć loginctl enable-lingerkonta?
spuk

Według arch wiki: The systemd user instance is started after the first login of a user and killed after the last session of the user is closed. Sometimes it may be useful to start it right after boot, and keep the systemd user instance running after the last session closes, for instance to have some user process running without any open session. Lingering is used to that effect.Nie dotyczy to nieaktywnej sesji użytkownika, ponieważ systemd --userjest obecna przez cały czas.
Michaił Morfikow

Rutynowo zostawiam muzykę na laptopie Fedory 21 podczas snu po jej zamknięciu. Więc nie sądzę, aby zablokowanie ekranu komputera oznaczało sesję jako nieaktywną tylko z powodu systemd.
Bratchley,

Odpowiedzi:


1

Nie jestem pewien, jakiej wersji / smaku Linux używasz, ale wygląda na to, że listy ACL dla urządzeń dźwiękowych są kontrolowane przez ConsoleKit za pomocą reguł udev. Na moim hoście Debian widzę coś takiego jak poniżej w /lib/udev/rules.d/70-udev-acl.rules

# sound devices
SUBSYSTEM=="sound", TAG+="udev-acl"

Bawiłbym się odznaczeniem tego, aby konsolekit nie dodawał urządzeń dźwiękowych do swojej bazy danych i nie zarządzał listą ACL na urządzeniach dźwiękowych


Sprawdziłem na pulpicie z komentarzem powyżej linii i po ponownym uruchomieniu. Koniec z zarządzaniem ACL dla urządzeń dźwiękowych i mogę odtwarzać utwory z zablokowanym ekranem
VenkatC

Zaktualizowałem pytanie. Teraz Consolekit jest przestarzały - możesz przeczytać o nim więcej tutaj freedesktop.org/wiki/Software/ConsoleKit , a mój system go nie używa. Logind jest jego zamiennikiem i zasadniczo robi to samo. Próbowałem skomentować linię, którą mi podałeś, a po ponownym uruchomieniu system nie widzi żadnych kart dźwiękowych. Nawet jeśli to zadziałało i działało dobrze, nie sądzę, że skorzystałbym z tego rozwiązania - to dlatego, że byłoby to tak samo, jak dodanie użytkownika do grupy audio, przynajmniej widzę to w ten sposób.
Michaił Morfikow

Dzięki, spojrzałem na logind szczegóły i tak, robi podobne rzeczy. To szuka udev TAG 'uaccess' do identyfikacji urządzeń do zarządzania i znajduje się w /lib/udev/rules.d/70-uaccess.rules. Wszystko sprowadza się do podstawowych uprawnień uniksowych, moim zdaniem masz te opcje 1) usuń tag karty dźwiękowej za pomocą udev, aby logind nie zarządzał urządzeniem audio i blokowaniem ekranu, zmieniając użytkowników - nie zmienia uprawnień urządzeń dźwiękowych. możesz ustawić perms jak chcesz 2) możesz po prostu znaleźć plik binarny amaroka i ustawić jego grupę jako audio i ustawić go, więc jego efektywna grupa staje się audio
VenkatC

Sprawdziłem drugie rozwiązanie, ale niestety nie działa. Ustawić audio groupdo Amarok binarny i uprawnienia są następujące: -rwxr-sr-x, ale gdy próbuję uruchomić Amaroka jako zwykły użytkownik, otrzymuję ten błąd:QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave. unnamed app(24333): KUniqueApplication: Cannot find the D-Bus session server: "Unable to autolaunch when setuid"
Michaił Morfikov

hmm, wygląda na to, że uruchamianie programów setuid w GUI wydaje się skomplikowane i zablokowane ze względów bezpieczeństwa np . gtk.org/setuid.html . Zbadam więcej i dam wam znać, to dobra rzecz - uczenie się nowych rzeczy!
VenkatC

0

Daj mi powiedzieć, że niewiele wiem o dźwięku na komputerze z systemem Linux. Mea Culpa, jeśli to nie pomoże.

Ustawiłbym uprawnienia grupowe urządzenia audio:

chgrp audio <dev-path>
chmod g+rw <dev-path>

do grupy, w której działa amarok. Użyj systemd, aby zmusić amaroka do uruchomienia w tej grupie. Najpierw skopiuj plik systemowy amaroka do / etc / systemd / user / i zmodyfikuj go:

[Service]
Group=audio

(to modyfikacja, a nie cały plik).

Ale może być bardziej „wyrafinowana” odpowiedź z powodu wielu warstw, które są dzisiejszym systemem audio Linux.


1
Jeśli chodzi o chgrp audio- wszystkie urządzenia w katalogu / dev / snd / mają już audiogrupę, ale nie powinno to mieć znaczenia, gdy używasz pulseaudio, i tak jest w tym przypadku. Jeśli chodzi o usługę systemd, próbowałem, ale dostałem następujący błąd: Failed at step GROUP spawning /usr/bin/amarok: Operation not permitted. amarok.service: main process exited, code=exited, status=216/GROUPi nie sądzę, że mogę zmienić te grupy jako zwykły użytkownik. Mam inną usługę, która wymaga zmiany grupy, ale jest to normalny demon systemowy i działa dobrze. `
Michaił Morfikow

Usługa Amarok nie jest uruchamiana przez root? Możliwe, że Amarok potrzebuje innych uprawnień grupowych dla innych szczeniąt. Szkoda, że ​​to nie takie proste.
Otheus

To tylko odtwarzacz muzyki. :)
Michaił Morfikow

0

Co powiesz na uruchomienie odtwarzacza w buforze ramki VNC? W mennicy 17 ...

# apt search vfb
p   xvfb                            - Virtual Framebuffer 'fake' X server
p   xvfb:i386                       - Virtual Framebuffer 'fake' X server

Używałbyś VNC do przeglądania pulpitu, jak opisano w https://en.wikipedia.org/wiki/Xvfb


Przeczytałem Usage scenarioslink do wiki i nie sądzę, żeby któryś z nich miał zastosowanie. Proces (amarok) potrzebuje tylko niektórych uprawnień i nie mam pojęcia, jak je ustawić, jeśli to w ogóle możliwe.
Michaił Morfikow

Jakich uprawnień potrzebujesz? Wątpię, czy systemd zmienia uprawnienia na urządzeniach tylko dlatego, że zmieniasz tty, a jeśli to zrobię, zrobię co w mojej mocy, aby odtąd unikać tego jak zarazy. Nie wiem, czy ci to pomoże, nie przetestowałem tego, ale to jedyny pomysł, który mam, ma szansę na pracę. Ponadto użytkownicy mają uprawnienia, a nie procesy.
pali 2345

Po prostu przeczytaj pierwszy link w pytaniu.
Michaił Morfikow

0

Pulseaudio jest uruchamiane przez autostart xdg, który można znaleźć pod ~/.config/autostart/. Jest plik o nazwie pulseaudio.desktop, aw tym pliku zmieniłem domyślną execlinię na tę:

Exec=/usr/bin/sg audio -c "pulseaudio -D"

Kiedy loguję się do systemu, proces pulseaudio wygląda następująco:

$ ps -eo user,group,args | grep pulse
morfik   audio    pulseaudio -D
morfik   audio    /usr/lib/pulseaudio/pulse/gconf-helper

A teraz jestem w stanie słuchać muzyki przez cały czas. Myślę, że to było rozwiązanie, którego szukałem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.