¿Hay alguna forma de establecer permisos para que un proceso pueda usar un dispositivo específico?

12

Como puede leer, por ejemplo aquí , logind, que es parte de systemd, puede establecer permisos para algunos dispositivos para sesiones de usuario. También hay un video que muestra cómo funciona este tipo de comportamiento en la práctica. En resumen, si comienza, digamos, amarok, y reproduce alguna canción, escuchará el sonido hasta que cambie a otro usuario o TTY donde solo tenga el mensaje de inicio de sesión. Eso es porque la sesión activa se volvió inactiva.

Sé que simplemente puede agregar un usuario (o usuarios) a un grupo específico, en este caso "audio", y eso "solucionará" este problema, pero me pregunto si hay otra solución. Lo que realmente quiero es establecer algunos permisos para el proceso para que pueda usar la tarjeta de sonido todo el tiempo, incluso cuando todos los usuarios tienen sus sesiones bloqueadas.

¿Es eso posible? Lo pregunto porque a menudo escucho la música y realmente no necesito que mi monitor esté encendido la mayor parte del tiempo, así que solo bloqueo la pantalla. Pero cuando bloqueo la pantalla, la sesión activa se vuelve inactiva y amarok deja de reproducirse. Y sí, la pantalla debe estar bloqueada, y no solo apagada.

EDITAR:

No creo que importe qué distribución estoy usando porque si hay systemd a bordo, sería exactamente el mismo problema. De todos modos, estoy usando debian sid, pero algunos paquetes como systemd, udev (y algunas dependencias) son de la rama experimental, y ahora es la versión 219-9.

Mikhail Morfikov
fuente
1
Posiblemente correr nohup program_x & ; disownpodría ayudar. O usando la pantalla
JustMe
Pero el proceso funciona bien. Cuando bloqueo la pantalla, ya no puede usar la tarjeta de sonido, al menos hasta que desbloqueo la pantalla.
Mikhail Morfikov
¿Has intentado usar loginctl enable-lingerpara la cuenta?
Spuk
Según el wiki de arch: 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.eso no se refiere a una sesión de usuario inactiva porque systemd --userestá presente todo el tiempo.
Mikhail Morfikov
Rutinariamente dejo mi música en mi computadora portátil Fedora 21 mientras duermo después de haberla bloqueado. Por lo tanto, no creo que bloquear la pantalla de su computadora deba marcar una sesión como inactiva solo por systemd.
Bratchley

Respuestas:

1

No estoy seguro de qué versión / sabor de Linux está utilizando, pero parece que las ACL para dispositivos de sonido están controladas por ConsoleKit a través de las reglas de udev. En mi host Debian, veo algo como a continuación en /lib/udev/rules.d/70-udev-acl.rules

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

Jugaría sin etiquetar esto, por lo que consolekit no agregará dispositivos de sonido a su base de datos y no administrará ACL en dispositivos de sonido

VenkatC
fuente
Verifiqué en mi escritorio comentando la línea anterior y después de reiniciar. No más administración de ACL para dispositivos de sonido y puedo reproducir canciones con la pantalla bloqueada
VenkatC
Actualicé la pregunta. Ahora, el kit de consola es material obsoleto; puede leer más sobre esto aquí freedesktop.org/wiki/Software/ConsoleKit , y mi sistema no lo usa. Logind lo reemplaza y hace básicamente lo mismo. Traté de comentar la línea que me diste, y después de reiniciar, mi sistema no ve ninguna tarjeta de sonido. Incluso si lo hizo y funcionó bien, no creo que usaría esta solución, es porque sería lo mismo que agregar un usuario al grupo de audio, al menos lo veo de esta manera.
Mikhail Morfikov
Gracias, miré los detalles de inicio de sesión y sí, está haciendo cosas similares. Eso está buscando udev TAG 'uaccess' para identificar dispositivos para administrar y está en /lib/udev/rules.d/70-uaccess.rules. Todo se reduce a los permisos básicos de Unix, en mi opinión, tiene estas opciones 1) eliminar la etiqueta de la tarjeta de sonido a través de udev, por lo que logind no administra el dispositivo de audio y la pantalla de bloqueo, cambiando de usuario, no cambiará los permisos de los dispositivos de sonido. puede configurar permisos como desee 2) simplemente puede encontrar el binario de amarok y configurar su grupo para que sea audio y configurarlo, para que su grupo efectivo se convierta en audio
VenkatC
Verifiqué la segunda solución, pero desafortunadamente no funciona. Configuré audio groupel binario de amarok, y los permisos son los siguientes: -rwxr-sr-xpero cuando intento iniciar amarok como usuario habitual, 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"
aparece
hmm, parece que ejecutar programas setuid en GUI parece complicado y bloqueado por razones de seguridad, por ejemplo: gtk.org/setuid.html . Investigaré más y les haré saber, esto es algo bueno: ¡aprender cosas nuevas!
VenkatC
0

Déjame decirte que sé poco sobre audio en el escritorio de Linux. Mea Culpa si esto no ayuda.

Establecería los permisos de grupo del dispositivo de audio:

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

al grupo en el que se ejecuta amarok. Use systemd para forzar a amarok a ejecutarse en ese grupo. Primero copie el archivo amarok systemd a / etc / systemd / user / y modifíquelo:

[Service]
Group=audio

(eso es una modificación, no todo el archivo).

Pero puede haber una respuesta más "sofisticada" debido a las múltiples capas que son el sistema de audio Linux actual.

Oteo
fuente
1
En cuanto a chgrp audio: todos los dispositivos en / dev / snd / ya tienen el audiogrupo, pero esto no debería importar cuando usa pulseaudio, y ese es el caso. Cuando se trata del servicio de systemd, lo probé, pero recibí el siguiente error: Failed at step GROUP spawning /usr/bin/amarok: Operation not permitted. amarok.service: main process exited, code=exited, status=216/GROUPy no creo que pueda cambiar estos grupos como usuario habitual. Tengo otro servicio que requiere un cambio de grupo, pero es un demonio de sistema normal y funciona bien. `
Mikhail Morfikov
¿El servicio de Amarok no es iniciado por root? Es posible que Amarok necesite otros permisos de grupo para otras puproses. Lástima que no sea tan fácil.
Oteo
Es solo un reproductor de música. :)
Mikhail Morfikov
0

¿Qué hay de ejecutar el reproductor en vnc framebuffer? En menta 17 ...

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

Usaría VNC para ver el escritorio como se describe en https://en.wikipedia.org/wiki/Xvfb

fuma2345
fuente
He leído el Usage scenariosenlace en el wiki, y no creo que ninguno de esos se aplique aquí. El proceso (amarok) solo necesita algunos permisos, y no tengo idea de cómo configurarlos, si eso es posible.
Mikhail Morfikov
¿Qué permisos crees que necesitas? Dudo mucho que systemd esté cambiando los permisos en los dispositivos solo porque cambias los tty y, si lo hace, haré todo lo posible para evitarlo como la peste a partir de ahora. No sé si esto te ayudará tampoco, no lo probé, pero es la única idea que tengo que tiene la oportunidad de funcionar. Además, los usuarios tienen permisos, no procesos.
fuma2345
Solo lea el primer enlace de la pregunta.
Mikhail Morfikov
0

Pulseaudio se inicia mediante el inicio automático xdg, que se puede encontrar en ~/.config/autostart/. Hay un archivo llamado pulseaudio.desktop, y en ese archivo he cambiado la execlínea predeterminada a esta:

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

Cuando inicio sesión en el sistema, el proceso de pulseaudio se ve así:

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

Y ahora puedo escuchar la música todo el tiempo. Creo que esta es la solución que estaba buscando.

Mikhail Morfikov
fuente