przełączanie się między powłokami, zatrzymuje aktualnie odtwarzaną muzykę

11

Podczas słuchania muzyki zmieniłem wirtualną konsolę za pomocą Ctrl+ Alt+ F2i nagle muzyka została zatrzymana. Wracając z powrotem do konsoli, na której działa X serwer Ctrl+ Alt+ F7lub logując się do użytkownika w konsoli, której aktualnie używam ( Ctrl+ Alt+ F2), odtwarzanie muzyki zaczyna się od nowa.

Linux (używam Ubuntu) to system operacyjny dla wielu użytkowników. O ile mi wiadomo, ma 7 wirtualnych konsol, do których użytkownicy mogą logować się i pracować jednocześnie. Dlaczego tak się dzieje? Co by się stało, gdyby mój system aktualizował się podczas zmiany konsoli?

DScript
źródło
4
Prawidłowe pytanie, jakie należy zadać, brzmi: co by się stało, gdyby wszyscy ci użytkownicy chcieli odtwarzać muzykę?
JdeBP

Odpowiedzi:

4

Linux ma wiele wirtualnych konsol. Ctrl+ Alt+ przełącza między tymi konsolami. Po przełączeniu z konsoli 7 na konsolę 2 urządzenia peryferyjne wejścia i wyjścia są przekierowywane z konsoli 7 na konsolę 2. Gdy konsola 7 jest nieaktywna, nie ma dostępu do urządzeń peryferyjnych wejścia / wyjścia: wyświetlacz nie jest wyświetlany na ekran, aplikacje nie otrzymują danych z klawiatury itp.Fn

Ze względów historycznych wejście i wyjście dźwięku wykorzystuje zupełnie inne kanały niż urządzenia wejściowe, takie jak klawiatura i mysz oraz wyświetlacze wideo. Urządzenia konsoli (abstrakcja w systemie operacyjnym) obejmują klawiaturę i wideo, ale nie dźwięk. Najczęstsza podstawowa implementacja dźwięku w systemie Unix jest niezależna od tego systemu, a zezwolenie na korzystanie z peryferyjnych urządzeń dźwiękowych jest udzielane na podstawie członkostwa w grupie, a nie własności konsoli. Jest to w rzeczywistości brak projektowy.

Ubuntu skonfigurował rzeczy tak, aby sesja zalogowana do konsoli i tylko one miały dostęp do urządzenia audio. Jeśli zmienisz konsolę, utracisz dostęp do urządzenia audio, chyba że zalogujesz się również do tej drugiej konsoli. Tak naprawdę należało zrobić od samego początku, ale nie dlatego, że projektanci interfejsów konsolowych nie myśleli o dźwięku.

Po przełączeniu na inną konsolę twoje programy nadal działają, ponieważ procesor nie jest powiązany z konsolą, ale z komputerem: każdy, kto ma konto na komputerze, może korzystać z czasu procesora. To samo dotyczy innych zasobów, takich jak pamięć i pliki (w zależności od uprawnień). Tylko interakcje z użytkownikiem są regulowane przez prawo własności do konsoli. Dźwięk przestaje być odtwarzany po przejściu na konsolę, na której nie jesteś zalogowany, ponieważ Twoje programy tracą uprawnienia dostępu do urządzenia wyjściowego dźwięku.

Uważam, że Ubuntu wdraża kontrolę dostępu za pośrednictwem Polkit , ale nie wiem dokładnie, jak to działa.

Gilles „SO- przestań być zły”
źródło
Możesz tego spróbować. Odtwórz muzykę i przełącz VT. Po pewnym czasie wróć do F7 VT. Piosenka zaczyna się dokładnie od momentu, w którym została zatrzymana. Jak to możliwe, jeśli system nie śpi w wątkach. Brak dostępu do wejścia / wyjścia dźwięku nie może zatrzymać odtwarzacza. Próbowałem też podczas instalacji programu. co zaskakujące, program został zainstalowany nawet po przełączeniu VT.
DScript,
1
@DScript Wątek odtwarzacza jest zablokowany, ponieważ czeka na system dźwiękowy. Wątek, który nie czeka na system dźwiękowy, nadal działa. Nie dając dostęp do brzmię / O nie blokować gracza, bo tak to się stało, to się nie odrzucić żądanie, ale aby ją zablokować.
Gilles „SO- przestań być zły”
1

Jakiś czas temu ludzie używali terminali komputerowych do wprowadzania danych lub wyświetlania danych z mainxame Unixa. Jeśli którykolwiek z użytkowników tego terminalu chciałby, powiedzmy, cat /dev/zerodane wyjściowe nie były nadawane do wszystkich terminali / użytkowników podłączonych do tej samej komputera mainframe (to dlatego, że był to system dla wielu użytkowników i każdy użytkownik mógł uruchamiać swoje zadania bez wpływu na innych użytkowników) .

W naszych czasach używamy wirtualnych terminali (lub wirtualnych konsol - VC), które są emulacjami oprogramowania fizycznych terminali komputerowych i działają w podobny sposób. Jeśli zalogujesz się na VC1 i uruchomisz ls -alR /, dane wyjściowe nie będą transmitowane do wszystkich VC, a nawet jeśli przełączysz się na inny VC, lsbędziesz nadal działał w VC1 i wysyłał go do VC1 (w ten sam sposób, twoja aktualizacja polecenie będzie działało w VC, które uruchomiłeś, nawet jeśli przełączysz się na inny VC).

Teraz dźwięk jest nieco inny niż standardowe wyjście, ponieważ (domyślnie) używa tego samego urządzenia do wyjścia bez względu na VC, do którego zalogowany jest użytkownik, ale użytkownik musi być zalogowany, aby mieć dostęp do wyjścia urządzenie dźwiękowe.

Możesz także zajrzeć tutaj, aby uzyskać więcej informacji na temat VC.

petry
źródło
Możesz tego spróbować. Odtwórz muzykę i przełącz VT. Po pewnym czasie wróć do F7 VT. Piosenka zaczyna się dokładnie od momentu, w którym została zatrzymana. Jak to możliwe, jeśli system nie śpi w wątkach. Brak dostępu do wejścia / wyjścia dźwięku nie może zatrzymać odtwarzacza. Próbowałem też podczas instalacji programu. co zaskakujące, program został zainstalowany nawet po przełączeniu VT.
DScript,
@DScript, ponieważ odtwarzacz, którego używasz, został zaprojektowany do wykrywania przełączania się na inną VC i wstrzymywania. Domyślnie system nie ładuje ani nie wstrzymuje procesów przy przełączaniu na inny VC.
petry