シェルを切り替えて、現在再生中の音楽を停止します


11

音楽を聴いているときにCtrl+ Alt+ を使用して仮想コンソールを変更したところF2、突然音楽が一時停止しました。Xサーバーを実行するコンソールに戻るCtrl+ + Alt+ F7または現在使用しているコンソールでユーザーにログインする(Ctrl+ Alt+ F2)と、音楽の再生が再開されます。

Linux(私はUbuntuを使用しています)はマルチユーザーオペレーティングシステムです。私の知る限りでは、ユーザーがログオンして同時に作業できる7つの仮想コンソールがあります。では、なぜこれが起こっているのでしょうか?コンソールの切り替え中にシステムが更新された場合はどうなりますか?


4
尋ねるべき正しい質問は、それらのユーザー全員が音楽を演奏したいとしたらどうなるでしょうか?
JdeBP 2015年

回答:


4

Linuxには複数の仮想コンソールがあります。Ctrl+ Alt+ これらのコンソールを切り替えます。コンソール7からコンソール2に切り替えると、入力および出力周辺機器はコンソール7からコンソール2に再ルーティングされます。コンソール7が非アクティブの場合、入力/出力周辺機器にアクセスできません。ディスプレイは表示されません。画面、アプリケーションがキーボード入力などを受け取らないFn

歴史的な理由により、サウンドの入出力は、キーボードやマウスなどの入力デバイスやビデオディスプレイとはまったく異なるチャネルを使用します。コンソールデバイス(オペレーティングシステムの抽象概念)はキーボードとビデオをカバーしますが、音声はカバーしません。Unixシステムでのサウンドの最も一般的な基本的な実装はそのシステムから独立しており、サウンドペリフェラルの使用許可は、コンソールの所有権ではなくグループメンバーシップに基づいて付与されます。これは実際には設計上の欠陥です。

Ubuntuは、コンソールにログインしたセッションだけがオーディオデバイスにアクセスできるように設定しています。コンソールを切り替えると、他のコンソールにもログインしない限り、オーディオデバイスにアクセスできなくなります。これは最初から本当にすべきことでしたが、コンソールインターフェイスの設計者がサウンドについて考えていなかったためではありませんでした。

別のコンソールに切り替えても、CPUはコンソールではなくマシンに関連付けられているため、プログラムは引き続き実行されます。マシンのアカウントを持つユーザーは、CPU時間を使用できます。メモリやファイルなどの他のリソースについても同様です(権限が必要です)。コンソールの所有権によって管理されるのは、ユーザーとのやり取りだけです。プログラムがサウンド出力デバイスにアクセスする権限を失うため、ログインしていないコンソールに切り替えると、サウンドの再生が停止します。

UbuntuはPolkitを介してアクセス制御を実装していると思いますが、これがどのように機能するのか正確にはわかりません。


これを試すことができます。音楽を再生し、VTを切り替えます。しばらくしてからF7 VTに切り替えます。曲は、一時停止したところから始まります。システムがスレッドをスリープしていない場合、これはどのように可能ですか。サウンドI / Oへのアクセスを許可しないと、プレーヤーを一時停止できません。そして、プログラムをインストールしながら試してみました。驚いたことに、VTを切り替えてもプログラムがインストールされていました。
DScript 2015年

1
@DScriptサウンドシステムを待機しているため、プレーヤースレッドはブロックされています。サウンドシステムを待機していないスレッドは引き続き実行されます。I / Oを音にアクセスを与えていないことはありません、それが行うの方法は、要求を拒否するのではなく、それをブロックすることはないので、プレイヤーをブロックします。
Gilles「SO-邪悪なことをやめよう」

1

昔、人々はコンピュータ端末を使用して、UNIXメインフレームにデータを入力したり、Unixメインフレームからデータを表示したりしていました。この端末ユーザーのいずれかが、たとえば、cat /dev/zero出力が同じメインフレームに接続されているすべての端末/ユーザーにブロードキャストされなかった場合(これはマルチユーザーシステムであり、各ユーザーが他のユーザーに影響を与えずにタスクを実行できるためです) 。

私たちの時代に、我々は、使用している仮想端末(あるいは仮想コンソールソフトウェアの物理のエミュレーションです- VC)コンピュータ端末と同様の方法で、作業を。VC1にログインしてを実行するls -alR /と、出力がすべてのVCにブロードキャストされるわけではありません。別のVCに切り替えてもls、VC1で実行を続け、その出力をVC1に送信します(同じ方法で、更新コマンドは、別のVCに切り替えても、起動したVCで実行され続けます。

これで、サウンドは標準出力とは少し異なります。ユーザーがログインしているVCに関係なく(デフォルトでは)同じデバイスを出力に使用しますが、ユーザーは、出力の出力にアクセスするためにログインする必要があります。サウンドデバイス。

VCに関する詳細については、こちらもご覧ください。


これを試すことができます。音楽を再生し、VTを切り替えます。しばらくしてからF7 VTに切り替えます。曲は、一時停止したところから始まります。システムがスレッドをスリープしていない場合、これはどのように可能ですか。サウンドI / Oへのアクセスを許可しないと、プレーヤーを一時停止できません。そして、プログラムをインストールしながら試してみました。驚いたことに、VTを切り替えてもプログラムがインストールされていました。
DScript 2015年

これは、使用しているプレーヤーが別のVCへの切り替えを検出して一時停止するように設計されているためです。デフォルトでは、システムは別のVCに切り替えるときにプロセスを適切にまたは一時停止しません。
petry 2015年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.