cambiar entre shells, detiene la música que se está reproduciendo actualmente

11

Mientras escuchaba música, cambié la consola virtual usando Ctrl+ Alt+ F2, y de repente la música se detuvo. Volviendo a la consola que ejecuta el servidor X Ctrl+ Alt+ F7o iniciando sesión en la consola que estoy usando actualmente ( Ctrl+ Alt+ F2), comienza a reproducir la música nuevamente.

Linux (estoy usando Ubuntu) es un sistema operativo multiusuario. Hasta donde yo sé, tiene 7 consolas virtuales en las que los usuarios pueden iniciar sesión y trabajar simultáneamente. Entonces, ¿por qué está pasando esto? ¿Qué pasaría si mi sistema se estuviera actualizando al cambiar las consolas?

DScript
fuente
44
La pregunta correcta es: ¿Qué pasaría si todos esos usuarios quisieran reproducir música?
JdeBP

Respuestas:

4

Linux tiene múltiples consolas virtuales. Ctrl+ Alt+ cambia entre estas consolas. Cuando cambia de la consola 7 a la consola 2, los periféricos de entrada y salida se redirigen de la consola 7 a la consola 2. Cuando la consola 7 está inactiva, no tiene acceso a los periféricos de entrada / salida: la pantalla no se muestra en la pantalla, las aplicaciones no reciben entrada de teclado, etc.Fn

Por razones históricas, la entrada y salida de sonido utiliza canales completamente diferentes desde dispositivos de entrada como teclado y mouse y desde pantallas de video. Los dispositivos de consola (la abstracción en el sistema operativo) cubren el teclado y el video pero no el sonido. La implementación básica más común del sonido en un sistema Unix es independiente de ese sistema, y ​​el permiso para usar los periféricos de sonido se otorga en función de la pertenencia al grupo en lugar de la propiedad de la consola. Esto es, de hecho, una deficiencia de diseño.

Ubuntu ha configurado las cosas para que la sesión iniciada en la consola, y solo ellas, tenga acceso al dispositivo de audio. Si cambia de consola, pierde el acceso al dispositivo de audio, a menos que también inicie sesión en esa otra consola. Esto es lo que realmente debería haberse hecho desde el principio, pero no porque los diseñadores de interfaces de consola no estuvieran pensando en el sonido.

Cuando cambia a otra consola, sus programas siguen ejecutándose, porque la CPU no está asociada con una consola sino con una máquina: cualquier persona con una cuenta en la máquina puede usar el tiempo de la CPU. Lo mismo ocurre con otros recursos, como memoria y archivos (sujetos a permisos). Solo las interacciones con el usuario se rigen por la propiedad de la consola. Su sonido deja de reproducirse cuando cambia a una consola donde no ha iniciado sesión porque sus programas pierden el privilegio de acceder al dispositivo de salida de sonido.

Creo que Ubuntu implementa el control de acceso a través de Polkit , pero no sé exactamente cómo funciona esto.

Gilles 'SO- deja de ser malvado'
fuente
Puedes probar esto. Reproduce una música y cambia el VT. Después de un tiempo, vuelva a cambiar a F7 VT. La canción comienza exactamente desde el punto donde está pausada. ¿Cómo es esto posible si el sistema no tiene hilos inactivos? No dar acceso al sonido de E / S no puede pausar el reproductor. Y lo probé mientras instalaba un programa también. Sorprendentemente, el programa se había instalado incluso cuando me cambiaron el VT.
DScript
1
@DScript El hilo del reproductor está bloqueado porque está esperando el sistema de sonido. Un hilo que no está esperando el sistema de sonido continúa ejecutándose. No dar acceso al sonido de E / S hace bloquear el jugador, porque la forma en que se hace no es negar la solicitud, pero para bloquearla.
Gilles 'SO- deja de ser malvado'
1

Hace un tiempo, las personas usaban terminales de computadora para ingresar datos o mostrar datos de un mainframe Unix. Si alguno de los usuarios de este terminal quisiera, digamos cat /dev/zero, la salida no se transmitió a todos los terminales / usuarios conectados al mismo mainframe (eso es porque era un sistema multiusuario, y cada usuario podía ejecutar sus tareas sin afectar a otros usuarios) .

En nuestros días, estamos usando terminales virtuales (o consolas virtuales - VC) que son emulaciones de software de las terminales físicas de la computadora y funcionan de manera similar. Si ha iniciado sesión en VC1 y se ejecuta ls -alR /, la salida no se transmitirá a todos los VC e, incluso si cambia a otro VC, lsseguirá ejecutándose en VC1 y enviará su salida a VC1 (de la misma manera, su actualización el comando seguirá ejecutándose en el VC que lo inició, incluso si cambia a otro VC).

Ahora, el sonido es un poco diferente a la salida estándar, ya que (de forma predeterminada) usa el mismo dispositivo para la salida sin importar el VC en el que su usuario haya iniciado sesión, pero su usuario debe iniciar sesión para tener acceso a la salida de la dispositivo de sonido.

También puede echar un vistazo aquí para obtener más detalles sobre VC.

petry
fuente
Puedes probar esto. Reproduce una música y cambia el VT. Después de un tiempo, vuelva a cambiar a F7 VT. La canción comienza exactamente desde el punto donde está pausada. ¿Cómo es esto posible si el sistema no tiene hilos inactivos? No dar acceso al sonido de E / S no puede pausar el reproductor. Y lo probé mientras instalaba un programa también. Sorprendentemente, el programa se había instalado incluso cuando me cambiaron el VT.
DScript
@DScript se debe a que el reproductor que está utilizando fue diseñado para detectar el cambio a otro VC y hacer una pausa. Por defecto, el sistema no detendrá o pausará los procesos al cambiar a otro VC.
petry