alternar entre conchas, interrompe a música que está sendo reproduzida atualmente

11

Enquanto ouvia música, mudei o console virtual usando Ctrl+ Alt+ F2e, de repente, a música foi pausada. Retornando ao console que executa o servidor X Ctrl+ Alt+ F7ou efetuando login no usuário no console que estou usando no momento ( Ctrl+ Alt+ F2), começa a reproduzir a música novamente.

Linux (eu estou usando o Ubuntu) é um sistema operacional multiusuário. Até onde eu sei, ele possui 7 consoles virtuais nos quais os usuários podem fazer logon e trabalhar simultaneamente. Então, por que isso está acontecendo? O que aconteceria se meu sistema estivesse atualizando enquanto trocava de console?

DScript
fonte
4
A pergunta certa a ser feita é: o que aconteceria se todos esses usuários quisessem tocar música?
JdeBP

Respostas:

4

O Linux possui vários consoles virtuais. Ctrl+ Alt+ alterna entre esses consoles. Quando você alterna do console 7 para o console 2, os periféricos de entrada e saída são redirecionados do console 7 para o console 2. Quando o console 7 está inativo, ele não tem acesso aos periféricos de entrada / saída: a tela não é exibida na tela, os aplicativos não recebem entrada do teclado etc.Fn

Por razões históricas, a entrada e saída de som usa canais completamente diferentes dos dispositivos de entrada, como teclado e mouse, e das telas de vídeo. Os dispositivos de console (a abstração no sistema operacional) cobrem teclado e vídeo, mas não som. A implementação básica mais comum do som em um sistema Unix é independente desse sistema, e a permissão para usar os periféricos de som é concedida com base na associação ao grupo e não na propriedade do console. Isso é de fato uma deficiência de design.

O Ubuntu configurou as coisas para que a sessão registrada no console, e somente elas, tenha acesso ao dispositivo de áudio. Se você alternar entre os consoles, perde o acesso ao dispositivo de áudio, a menos que também faça login no outro console. Isso é o que realmente deveria ter sido feito desde o início, mas não foi porque os designers de interfaces de console não estavam pensando em som.

Quando você muda para outro console, seus programas continuam em execução, porque a CPU não está associada a um console, mas a uma máquina: qualquer pessoa com uma conta na máquina pode usar o tempo da CPU. O mesmo vale para outros recursos, como memória e arquivos (sujeitos a permissões). Apenas as interações com o usuário são controladas pela propriedade do console. Seu som para de tocar quando você muda para um console em que não está conectado, porque seus programas perdem o privilégio de acessar o dispositivo de saída de som.

Acredito que o Ubuntu implementa o controle de acesso via Polkit , mas não sei exatamente como isso funciona.

Gilles 'SO- parar de ser mau'
fonte
Você pode tentar isso. Toque uma música e mude o VT. Depois de algum tempo, volte para F7 VT. A música começa exatamente no ponto em que está em pausa. Como isso é possível se o sistema não está dormindo segmentos. Não dar acesso ao som de E / S não pode pausar o player. E eu tentei durante a instalação de um programa também. surpreendentemente, o programa foi instalado mesmo quando eu mudei o VT.
DScript
1
@DScript O segmento do player está bloqueado porque está aguardando o sistema de som. Um segmento que não está aguardando o sistema de som continua em execução. Não dando acesso a soar I / O faz bloquear o jogador, porque a forma como ele é feito não é para negar o pedido, mas para bloqueá-lo.
Gilles 'SO- stop be evil'
1

Há um tempo, as pessoas usavam terminais de computador para inserir dados ou exibir dados de um mainframe Unix. Se algum desses usuários do terminal quisesse, digamos, cat /dev/zeroa saída não foi transmitida para todos os terminais / usuários conectados ao mesmo mainframe (isso é porque era um sistema multiusuário e cada usuário poderia executar suas tarefas sem afetar outros usuários) .

Atualmente, estamos usando terminais virtuais (ou consoles virtuais - VC) que são emulações de software dos terminais físicos do computador e funcionam de maneira semelhante. Se você estiver conectado ao VC1 e executado ls -alR /, a saída não será transmitida para todos os VCs e, mesmo se você alternar para outro VC, você lscontinuará executando no VC1 e enviará a saída para o VC1 (da mesma forma, sua atualização O comando continuará sendo executado no VC em que você o iniciou, mesmo que você mude para outro VC).

Agora, o som é um pouco diferente da saída padrão, pois (por padrão) ele usa o mesmo dispositivo para a saída, independentemente do VC em que seu usuário estiver conectado, mas seu usuário precisa estar conectado para ter acesso à saída do Dispositivo de som.

Você também pode dar uma olhada aqui para mais detalhes sobre o VC.

petry
fonte
Você pode tentar isso. Toque uma música e mude o VT. Depois de algum tempo, volte para F7 VT. A música começa exatamente no ponto em que está em pausa. Como isso é possível se o sistema não está dormindo segmentos. Não dar acesso ao som de E / S não pode pausar o player. E eu tentei durante a instalação de um programa também. surpreendentemente, o programa foi instalado mesmo quando eu mudei o VT.
DScript
@DScript, porque o player que você está usando foi projetado para detectar a mudança para outro VC e fazer uma pausa. Por padrão, o sistema não agradará ou interromperá os processos ao mudar para outro VC.
petry