Wenn Sie zwischen den Shells wechseln, wird die gerade abgespielte Musik gestoppt

11

Während ich Musik hörte, wechselte ich die virtuelle Konsole mit Ctrl+ Alt+ F2und plötzlich wurde die Musik angehalten. Wiederkehrende zurück auf die Konsole , die den X - Server läuft Ctrl+ Alt+ F7oder Protokollierung in den Benutzer in der Konsole , dass ich zur Zeit bin mit ( Ctrl+ Alt+ F2), beginnt wieder die Musik zu spielen.

Linux (ich benutze Ubuntu) ist ein Mehrbenutzer-Betriebssystem. Soweit ich weiß, verfügt es über 7 virtuelle Konsolen, an denen sich Benutzer anmelden und gleichzeitig arbeiten können. Warum passiert das? Was würde passieren, wenn mein System beim Wechseln der Konsolen aktualisiert würde?

DScript
quelle
4
Die richtige Frage lautet: Was würde passieren, wenn all diese Benutzer Musik abspielen möchten?
JdeBP

Antworten:

4

Linux verfügt über mehrere virtuelle Konsolen. Ctrl+ Alt+ Schaltet zwischen diesen Konsolen. Wenn Sie von Konsole 7 zu Konsole 2 wechseln, werden die Eingangs- und Ausgangsperipheriegeräte von Konsole 7 zu Konsole 2 umgeleitet. Wenn Konsole 7 inaktiv ist, hat sie keinen Zugriff auf die Eingangs- / Ausgangsperipheriegeräte: Das Display wird nicht angezeigt Auf dem Bildschirm erhalten die Anwendungen keine Tastatureingaben usw.Fn

Aus historischen Gründen werden bei der Audioeingabe und -ausgabe völlig andere Kanäle als bei Eingabegeräten wie Tastatur und Maus sowie bei Videoanzeigen verwendet. Konsolengeräte (die Abstraktion im Betriebssystem) decken Tastatur und Video ab, jedoch keinen Ton. Die häufigste grundlegende Implementierung von Sound auf einem Unix-System ist unabhängig von diesem System. Die Berechtigung zur Verwendung der Sound-Peripheriegeräte wird eher aufgrund der Gruppenmitgliedschaft als aufgrund des Eigentums an der Konsole erteilt. Dies ist in der Tat ein Designmangel.

Ubuntu hat die Dinge so eingerichtet, dass die an der Konsole angemeldete Sitzung und nur sie Zugriff auf das Audiogerät haben. Wenn Sie die Konsole wechseln, verlieren Sie den Zugriff auf das Audiogerät, es sei denn, Sie melden sich auch bei dieser anderen Konsole an. Dies hätte eigentlich von Anfang an getan werden sollen, aber nicht, weil die Designer von Konsolenschnittstellen nicht über Sound nachdachten.

Wenn Sie zu einer anderen Konsole wechseln, werden Ihre Programme weiter ausgeführt, da die CPU nicht einer Konsole, sondern einem Computer zugeordnet ist: Jeder Benutzer mit einem Konto auf dem Computer darf die CPU-Zeit verwenden. Gleiches gilt für andere Ressourcen wie Speicher und Dateien (vorbehaltlich Berechtigungen). Es sind nur Interaktionen mit dem Benutzer, die durch den Besitz der Konsole geregelt werden. Ihr Sound wird nicht mehr abgespielt, wenn Sie zu einer Konsole wechseln, an der Sie nicht angemeldet sind, da Ihre Programme das Zugriffsrecht auf das Soundausgabegerät verlieren.

Ich glaube, dass Ubuntu die Zugriffskontrolle über Polkit implementiert , aber ich weiß nicht genau, wie das funktioniert.

Gilles 'SO - hör auf böse zu sein'
quelle
Sie können dies versuchen. Spielen Sie eine Musik und schalten Sie den VT um. Nach einiger Zeit wieder auf F7 VT umschalten. Das Lied beginnt genau an dem Punkt, an dem es angehalten wird. Wie ist dies möglich, wenn das System keine Threads schläft? Wenn Sie keinen Zugriff auf Sound-E / A gewähren, kann der Player nicht angehalten werden. Und ich habe es auch bei der Installation eines Programms versucht. überraschenderweise war das programm auch installiert worden, als ich den vT umgestellt hatte.
DScript
1
@DScript Der Player-Thread ist blockiert, weil er auf das Soundsystem wartet. Ein Thread, der nicht auf das Soundsystem wartet, wird weiterhin ausgeführt. Wenn Sie keinen Zugriff auf Sound-E / A gewähren, wird der Player blockiert, da die Anforderung nicht abgelehnt, sondern blockiert wird.
Gilles 'SO - hör auf böse zu sein'
1

Vor einiger Zeit verwendeten die Benutzer Computerterminals , um Daten in einen Unix-Mainframe einzugeben oder Daten von diesem anzuzeigen. Wenn einer dieser Terminalbenutzer beispielsweise wollte, cat /dev/zerowurde die Ausgabe nicht an alle Terminals / Benutzer gesendet, die mit demselben Mainframe verbunden sind (dies liegt daran, dass es sich um ein Mehrbenutzersystem handelt und jeder Benutzer seine Aufgaben ausführen kann, ohne andere Benutzer zu beeinträchtigen). .

In unseren Tagen verwenden wir virtuelle Terminals (oder virtuelle Konsolen - VC), die Softwareemulationen der physischen Computerterminals sind und auf ähnliche Weise funktionieren. Wenn Sie bei VC1 angemeldet sind und ausgeführt werden ls -alR /, wird die Ausgabe nicht an alle VCs gesendet. Selbst wenn Sie zu einer anderen VC wechseln, wird Ihre lsAusgabe weiterhin in VC1 ausgeführt und die Ausgabe an VC1 gesendet (auf die gleiche Weise Ihr Update) Der Befehl wird in der von Ihnen gestarteten VC weiter ausgeführt, auch wenn Sie zu einer anderen VC wechseln.

Der Sound unterscheidet sich ein wenig von der Standardausgabe, da (standardmäßig) unabhängig von der VC, bei der Ihr Benutzer angemeldet ist, dasselbe Gerät für die Ausgabe verwendet wird. Ihr Benutzer muss jedoch angemeldet sein, um Zugriff auf die Ausgabe der zu haben Soundkarte.

Sie können hier auch nach weiteren Details zu VC suchen .

petry
quelle
Sie können dies versuchen. Spielen Sie eine Musik und schalten Sie den VT um. Nach einiger Zeit wieder auf F7 VT umschalten. Das Lied beginnt genau an dem Punkt, an dem es angehalten wird. Wie ist dies möglich, wenn das System keine Threads schläft? Wenn Sie keinen Zugriff auf Sound-E / A gewähren, kann der Player nicht angehalten werden. Und ich habe es auch bei der Installation eines Programms versucht. überraschenderweise war das programm auch installiert worden, als ich den vT umgestellt hatte.
DScript
@DScript, weil der von Ihnen verwendete Player so konzipiert wurde, dass er das Umschalten auf eine andere VC erkennt und pausiert. Standardmäßig wird das System beim Wechsel zu einem anderen VC keine netten oder angehaltenen Prozesse ausführen.
Petry