passando da una shell all'altra, interrompe la musica attualmente in riproduzione


11

Mentre ascoltavo la musica, ho cambiato la console virtuale usando Ctrl+ Alt+ F2e improvvisamente la musica è stata messa in pausa. Tornando alla console che esegue il server X Ctrl+ Alt+ F7o accedendo all'utente nella console che sto attualmente utilizzando ( Ctrl+ Alt+ F2), inizia di nuovo a riprodurre la musica.

Linux (sto usando Ubuntu) è un sistema operativo multiutente. Per quanto ne so, ha 7 console virtuali a cui gli utenti possono accedere e lavorare contemporaneamente. Allora perché sta succedendo questo? Cosa succederebbe se il mio sistema si aggiornasse durante il cambio delle console?


4
La domanda giusta da porsi è: cosa succederebbe se tutti quegli utenti volessero suonare?
JdeBP,

Risposte:


4

Linux ha più console virtuali. Ctrl+ Alt+ passa da una console all'altra. Quando si passa dalla console 7 alla console 2, le periferiche di input e output vengono reinstradate dalla console 7 alla console 2. Quando la console 7 è inattiva, non ha accesso alle periferiche di input / output: il display non è visualizzato su lo schermo, le applicazioni non ricevono input da tastiera, ecc.Fn

Per motivi storici, l'ingresso e l'uscita audio utilizzano canali completamente diversi dai dispositivi di input come tastiera e mouse e dai display video. I dispositivi console (l'astrazione nel sistema operativo) coprono tastiera e video ma non suono. L'implementazione di base più comune del suono su un sistema Unix è indipendente da quel sistema e il permesso di usare le periferiche audio è concesso in base all'appartenenza al gruppo piuttosto che alla proprietà della console. Questo è in realtà un difetto di progettazione.

Ubuntu ha impostato le cose in modo tale che la sessione abbia effettuato l'accesso alla console e solo loro abbiano accesso al dispositivo audio. Se si cambia console, si perde l'accesso al dispositivo audio, a meno che non si acceda anche a quell'altra console. Questo è ciò che davvero avrebbe dovuto essere fatto dall'inizio, ma non perché i progettisti di interfacce console non stessero pensando al suono.

Quando si passa a un'altra console, i programmi continuano a funzionare, poiché la CPU non è associata a una console ma a una macchina: a chiunque disponga di un account sulla macchina è consentito utilizzare il tempo della CPU. Lo stesso vale per altre risorse come memoria e file (soggetti a autorizzazioni). Sono solo le interazioni con l'utente che sono governate dalla proprietà della console. La riproduzione del suono si interrompe quando si passa a una console in cui non si è effettuato l'accesso perché i programmi perdono il privilegio di accedere al dispositivo di uscita audio.

Credo che Ubuntu implementa il controllo degli accessi tramite Polkit , ma non so esattamente come funzioni .


Puoi provare questo. Riproduci una musica e cambia il VT. Dopo qualche tempo torna a F7 VT. La canzone inizia esattamente dal punto in cui è stata messa in pausa. Come è possibile se il sistema non sta dormendo thread. Non dare accesso all'I / O audio non può mettere in pausa il lettore. E l'ho provato anche durante l'installazione di un programma. sorprendentemente, il programma era stato installato anche quando ho cambiato il VT.
DScript,

1
@DScript Il thread del player è bloccato perché è in attesa del sistema audio. Un thread che non è in attesa del sistema audio continua a essere eseguito. Non dare accesso all'I / O audio non blocca il lettore, perché il modo in cui viene fatto non è rifiutare la richiesta ma bloccarla.
Gilles 'SO- smetti di essere malvagio' il

1

Qualche tempo fa, le persone utilizzavano terminali di computer per immettere dati o visualizzarli da un mainframe Unix. Se qualcuno di questi utenti del terminale volesse, diciamo, cat /dev/zerol'output non è stato trasmesso a tutti i terminali / utenti collegati allo stesso mainframe (questo perché era un sistema multiutente e ogni utente poteva eseguire le sue attività senza influire sugli altri utenti) .

Ai nostri giorni, stiamo usando terminali virtuali (o console virtuali - VC) che sono emulazioni software dei terminali fisici del computer e funzionano in modo simile. Se hai effettuato l'accesso su VC1 ed esegui ls -alR /, l'output non verrà trasmesso a tutti i VC e, anche se passi a un altro VC, lscontinuerai a funzionare in VC1 e invierai l'output a VC1 (allo stesso modo, il tuo aggiornamento il comando continuerà a funzionare nel VC in cui è stato avviato anche se si passa a un altro VC).

Ora, l'audio è un po 'diverso dall'output standard, poiché (per impostazione predefinita) utilizza lo stesso dispositivo per l'output indipendentemente dal VC a cui è stato effettuato l'accesso, ma l'utente deve aver effettuato l'accesso per accedere all'output del dispositivo audio.

Puoi anche dare un'occhiata qui per ulteriori dettagli su VC.


Puoi provare questo. Riproduci una musica e cambia il VT. Dopo qualche tempo torna a F7 VT. La canzone inizia esattamente dal punto in cui è stata messa in pausa. Come è possibile se il sistema non sta dormendo thread. Non dare accesso all'I / O audio non può mettere in pausa il lettore. E l'ho provato anche durante l'installazione di un programma. sorprendentemente, il programma era stato installato anche quando ho cambiato il VT.
DScript,

@DScript perché il lettore che stai utilizzando è stato progettato per rilevare il passaggio a un altro VC e mettere in pausa. Per impostazione predefinita, il sistema non esegue correttamente o mette in pausa i processi quando passa a un altro VC.
petry

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.