Gibt es eine Möglichkeit, Berechtigungen festzulegen, damit ein Prozess ein bestimmtes Gerät verwenden kann?

11

Wie Sie beispielsweise hier lesen können, kann logind, das Teil von systemd ist, Berechtigungen für einige Geräte für Benutzersitzungen festlegen. Es gibt auch ein Video, das zeigt, wie diese Art von Verhalten in der Praxis funktioniert. Kurz gesagt, wenn Sie anfangen, sagen wir Amarok, und ein Lied spielen, hören Sie den Ton, bis Sie zu einem anderen Benutzer oder TTY wechseln, wo Sie nur die Anmeldeaufforderung haben. Dies liegt daran, dass die aktive Sitzung inaktiv wurde.

Ich weiß, dass Sie einfach einen Benutzer (oder Benutzer) zu einer bestimmten Gruppe hinzufügen können, in diesem Fall "Audio", und das wird dieses Problem "beheben", aber ich frage mich, ob es eine andere Lösung gibt. Was ich wirklich möchte, ist, einige Berechtigungen für den Prozess festzulegen, damit die Soundkarte jederzeit verwendet werden kann, selbst wenn alle Benutzer ihre Sitzungen gesperrt haben.

Ist das möglich? Ich frage, weil ich oft Musik höre und mein Monitor die meiste Zeit nicht eingeschaltet sein muss, also sperre ich einfach den Bildschirm. Wenn ich den Bildschirm sperre, wird die aktive Sitzung inaktiv und amarok hört auf zu spielen. Und ja, der Bildschirm sollte gesperrt und nicht nur ausgeschaltet sein.

BEARBEITEN:

Ich denke nicht, dass es wichtig ist, welche Distribution ich benutze, denn wenn systemd an Bord ist, wäre es genau das gleiche Problem. Wie auch immer, ich verwende debian sid, aber einige Pakete wie systemd, udev (und einige Abhängigkeiten) stammen aus dem experimentellen Zweig, und jetzt ist es die 219-9-Version.

Mikhail Morfikov
quelle
1
Möglicherweise nohup program_x & ; disownkönnte Laufen helfen. Oder mit Bildschirm
JustMe
Aber der Prozess funktioniert gut. Wenn ich den Bildschirm sperre, kann die Soundkarte nicht mehr verwendet werden, zumindest bis ich den Bildschirm entsperre.
Mikhail Morfikov
Haben Sie versucht, loginctl enable-lingerfür das Konto zu verwenden?
Spuk
Laut dem 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.Das betrifft keine inaktive Benutzersitzung, da systemd --usersie ständig vorhanden ist.
Mikhail Morfikov
Ich lasse meine Musik routinemäßig auf meinem Fedora 21-Laptop spielen, während ich schlafe, nachdem ich sie gesperrt habe. Ich denke also nicht, dass das Sperren Ihres Computerbildschirms eine Sitzung nur aufgrund von systemd als inaktiv markieren sollte.
Bratchley

Antworten:

1

Ich bin nicht sicher, welche Version / Variante von Linux Sie verwenden, aber es sieht so aus, als würden ACLs für Soundgeräte von ConsoleKit über udev-Regeln gesteuert. Auf meinem Debian-Host sehe ich etwas wie das Folgende in /lib/udev/rules.d/70-udev-acl.rules

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

Ich würde damit spielen, dies zu deaktivieren, damit consolekit keine Audiogeräte in seine Datenbank einfügt und keine ACL auf Audiogeräten verwaltet

VenkatC
quelle
Ich habe auf meinem Desktop mit Kommentaren über der Zeile und nach dem Neustart überprüft. Keine ACL-Verwaltung mehr für
Soundgeräte
Ich habe die Frage aktualisiert. Jetzt ist Consolekit veraltet - Sie können hier mehr darüber lesen freedesktop.org/wiki/Software/ConsoleKit , und mein System verwendet es nicht. Logind ist ein Ersatz dafür, und es macht im Grunde das Gleiche. Ich habe versucht, die von Ihnen angegebene Zeile zu kommentieren, und nach dem Neustart werden auf meinem System keine Soundkarten angezeigt. Selbst wenn dies der Fall wäre und dies einwandfrei funktioniert hätte, glaube ich nicht, dass ich diese Lösung verwenden würde - es liegt daran, dass es dasselbe wäre, einen Benutzer zur Audiogruppe hinzuzufügen, zumindest sehe ich das so.
Mikhail Morfikov
Danke, ich habe mir die Logind-Details angesehen und ja, es macht ähnliche Sachen. Das sucht nach udev TAG 'uaccess', um zu verwaltende Geräte zu identifizieren, und es befindet sich in /lib/udev/rules.d/70-uaccess.rules. Alles hängt von den grundlegenden Unix-Berechtigungen ab. Meiner Meinung nach haben Sie folgende Möglichkeiten: 1) Entfernen Sie das Soundkarten-Tag über udev, damit logind das Audiogerät und den Sperrbildschirm nicht verwaltet und die Benutzer wechselt. Die Berechtigungen für Audiogeräte werden nicht geändert. Sie können Dauerwellen so einstellen, wie Sie möchten. 2) Sie können einfach Amarok-Binärdateien finden und die Gruppe auf Audio einstellen und festlegen, damit die effektive Gruppe zu Audio wird
VenkatC
Ich habe die zweite Lösung überprüft, aber leider funktioniert sie nicht. Ich audio grouphabe die Amarok-Binärdatei festgelegt und die Berechtigungen lauten wie folgt: -rwxr-sr-xWenn ich jedoch versuche, Amarok als regulären Benutzer zu starten, wird folgende Fehlermeldung 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"
angezeigt
hmm, es sieht so aus, als ob das Ausführen von setuid-Programmen in der GUI aus Sicherheitsgründen sehr kompliziert und blockiert erscheint, zum Beispiel: gtk.org/setuid.html . Ich werde mehr recherchieren und dich wissen lassen, das ist gutes Zeug - neue Dinge lernen!
VenkatC
0

Lassen Sie mich sagen, ich weiß wenig über Audio auf Linux-Desktops. Mea Culpa, wenn das nicht hilft.

Ich würde die Gruppenberechtigungen des Audiogeräts festlegen:

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

zu der Gruppe, in der Amarok ausgeführt wird. Verwenden Sie systemd, um Amarok zu zwingen, in dieser Gruppe ausgeführt zu werden. Kopieren Sie zuerst die amarok systemd-Datei nach / etc / systemd / user / und ändern Sie sie:

[Service]
Group=audio

(Das ist eine Modifikation, nicht die gesamte Datei).

Aufgrund der vielen Schichten, die das heutige Linux-Audiosystem darstellt, kann es jedoch zu einer "differenzierteren" Antwort kommen.

Otheus
quelle
1
Was chgrp audio- alle Geräte unter / dev / snd / haben bereits die audioGruppe, aber das sollte keine Rolle spielen, wenn Sie pulseaudio verwenden, und das ist der Fall. Wenn es um den Dienst von systemd geht, habe ich es versucht, aber ich habe den folgenden Fehler erhalten: Failed at step GROUP spawning /usr/bin/amarok: Operation not permitted. amarok.service: main process exited, code=exited, status=216/GROUPund ich glaube nicht, dass ich diese Gruppen als regulärer Benutzer ändern kann. Ich habe einen anderen Dienst, der eine Gruppenänderung erfordert, aber es ist ein normaler Systemdämon, und er funktioniert einwandfrei. `
Mikhail Morfikov
Der Amarok-Dienst wird nicht von root gestartet? Es ist möglich, dass Amarok andere Gruppenberechtigungen für andere Schüler benötigt. Schade, dass es nicht so einfach ist.
Otheus
Es ist nur ein Musikplayer. :)
Mikhail Morfikov
0

Wie wäre es, den Player in vnc framebuffer auszuführen? In Mint 17 ...

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

Sie würden VNC verwenden, um den Desktop wie unter https://en.wikipedia.org/wiki/Xvfb beschrieben anzuzeigen

raucht2345
quelle
Ich habe den Usage scenariosLink im Wiki gelesen und glaube nicht, dass einer davon hier zutrifft. Der Prozess (Amarok) benötigt nur einige Berechtigungen, und ich habe keine Ahnung, wie ich sie festlegen soll, wenn dies überhaupt möglich ist.
Mikhail Morfikov
Welche Berechtigungen benötigen Sie Ihrer Meinung nach? Ich bezweifle sehr, dass systemd die Berechtigungen für Geräte ändert, nur weil Sie die tty wechseln, und wenn dies der Fall ist, werde ich mein Bestes tun, um dies von nun an wie die Pest zu vermeiden. Ich weiß nicht, dass dir das auch helfen wird, ich habe es nicht getestet, aber es ist die einzige Idee, die ich habe und die eine Chance hat zu arbeiten. Außerdem haben Benutzer Berechtigungen, keine Prozesse.
raucht2345
Lesen Sie einfach den ersten Link in der Frage.
Mikhail Morfikov
0

Pulseaudio wird über den xdg-Autostart gestartet, den Sie unter finden ~/.config/autostart/. Es gibt eine Datei namens pulseaudio.desktop, und in dieser Datei habe ich die Standardzeile execin diese geändert :

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

Wenn ich mich beim System anmelde, sieht der Pulseaudio-Prozess folgendermaßen aus:

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

Und jetzt kann ich die ganze Zeit Musik hören. Ich denke, das ist die Lösung, nach der ich gesucht habe.

Mikhail Morfikov
quelle