basculer entre les shells, arrête la musique en cours de lecture

11

Pendant que j'écoutais de la musique, j'ai changé la console virtuelle en utilisant Ctrl+ Alt+ F2, et tout à coup la musique a été interrompue. Revenir à la console qui exécute le serveur X Ctrl+ Alt+ F7ou se connecter à l'utilisateur dans la console que j'utilise actuellement ( Ctrl+ Alt+ F2), recommence la lecture de la musique.

Linux (j'utilise Ubuntu) est un système d'exploitation multi-utilisateurs. Pour autant que je sache, il dispose de 7 consoles virtuelles sur lesquelles les utilisateurs peuvent se connecter et travailler simultanément. Pourquoi cela se produit-il donc? Que se passerait-il si mon système était en cours de mise à jour lors du changement de console?

DScript
la source
4
La bonne question à se poser est: que se passerait-il si tous ces utilisateurs voulaient jouer de la musique?
JdeBP

Réponses:

4

Linux a plusieurs consoles virtuelles. Ctrl+ Alt+ bascule entre ces consoles. Lorsque vous passez de la console 7 à la console 2, les périphériques d'entrée et de sortie sont redirigés de la console 7 vers la console 2. Lorsque la console 7 est inactive, elle n'a pas accès aux périphériques d'entrée / sortie: l'affichage n'est pas affiché sur l'écran, les applications ne reçoivent pas de saisie au clavier, etc.Fn

Pour des raisons historiques, l'entrée et la sortie audio utilisent des canaux complètement différents des périphériques d'entrée tels que le clavier et la souris et des écrans vidéo. Les périphériques de la console (l'abstraction du système d'exploitation) couvrent le clavier et la vidéo, mais pas le son. L'implémentation de base la plus courante du son sur un système Unix est indépendante de ce système, et l'autorisation d'utiliser les périphériques sonores est accordée en fonction de l'appartenance au groupe plutôt que de la propriété de la console. Il s'agit en fait d'un défaut de conception.

Ubuntu a configuré les choses pour que la session connectée à la console, et seulement eux, ait accès au périphérique audio. Si vous changez de console, vous perdez l'accès au périphérique audio, sauf si vous vous connectez également à cette autre console. C'est ce qui aurait vraiment dû être fait dès le départ, mais ce n'était pas parce que les concepteurs d'interfaces de console ne pensaient pas au son.

Lorsque vous passez à une autre console, vos programmes continuent de fonctionner, car le CPU n'est pas associé à une console mais à une machine: toute personne possédant un compte sur la machine est autorisée à utiliser le temps CPU. Il en va de même pour d'autres ressources telles que la mémoire et les fichiers (sous réserve d'autorisations). Ce ne sont que les interactions avec l'utilisateur qui sont régies par la propriété de la console. Votre son s'arrête lorsque vous passez à une console sur laquelle vous n'êtes pas connecté, car vos programmes perdent le privilège d'accéder au périphérique de sortie audio.

Je crois qu'Ubuntu implémente le contrôle d'accès via Polkit , mais je ne sais pas exactement comment cela fonctionne.

Gilles 'SO- arrête d'être méchant'
la source
Vous pouvez essayer ça. Jouez une musique et changez le VT. Après un certain temps, revenez à F7 VT. La chanson commence exactement au point où elle a été interrompue. Comment est-ce possible si le système ne dort pas de threads. Ne pas donner accès aux E / S sonores ne peut pas mettre le lecteur en pause. Et je l'ai également essayé en installant un programme. de façon surprenante, le programme avait été installé même lorsque j'ai changé de VT.
DScript
1
@DScript Le thread du lecteur est bloqué car il attend le système audio. Un thread qui n'attend pas le système audio continue de s'exécuter. Ne pas donner accès à son E / S ne bloque le joueur, parce que la façon dont il est fait est de ne pas rejeter la demande , mais pour le bloquer.
Gilles 'SO- arrête d'être méchant'
1

Il y a quelque temps, les gens utilisaient des terminaux informatiques pour entrer des données dans un ordinateur central Unix ou afficher des données à partir de celui-ci. Si l'un des utilisateurs de ce terminal voulait, disons cat /dev/zero, la sortie n'a pas été diffusée à tous les terminaux / utilisateurs connectés au même ordinateur central (c'est parce qu'il s'agissait d'un système multi-utilisateurs et que chaque utilisateur pouvait exécuter ses tâches sans affecter les autres utilisateurs) .

De nos jours, nous utilisons des terminaux virtuels (ou consoles virtuelles - VC) qui sont des émulations logicielles des terminaux informatiques physiques , et fonctionnent de manière similaire. Si vous êtes connecté sur VC1 et que vous l'exécutez ls -alR /, la sortie ne sera pas diffusée à tous les VC et, même si vous basculez vers un autre VC, vous lscontinuerez à fonctionner dans VC1 et enverrez sa sortie à VC1 (de la même manière, votre mise à jour La commande continuera à s'exécuter dans le VC que vous avez démarré même si vous passez à un autre VC).

Maintenant, le son est un peu différent de la sortie standard, car (par défaut) il utilise le même appareil pour la sortie, peu importe le VC auquel votre utilisateur est connecté, mais votre utilisateur doit être connecté pour avoir accès à la sortie du périphérique audio.

Vous pouvez également consulter ici pour plus de détails concernant VC.

petry
la source
Vous pouvez essayer ça. Jouez une musique et changez le VT. Après un certain temps, revenez à F7 VT. La chanson commence exactement au point où elle a été interrompue. Comment est-ce possible si le système ne dort pas de threads. Ne pas donner accès aux E / S sonores ne peut pas mettre le lecteur en pause. Et je l'ai également essayé en installant un programme. de façon surprenante, le programme avait été installé même lorsque j'ai changé de VT.
DScript
@DScript, c'est parce que le lecteur que vous utilisez a été conçu pour détecter le passage à un autre VC et faire une pause. Par défaut, le système n'améliorera pas ou ne suspendra pas les processus lors du passage à un autre VC.
petry