在外壳之间切换,停止当前正在播放的音乐


11

在听音乐时,我使用Ctrl+ Alt+ 更改了虚拟控制台F2,然后音乐突然暂停了。返回回运行X服务器控制台Ctrl+ Alt+ F7是我目前使用的(或登录到控制台用户Ctrl+ Alt+ F2),再次开始播放音乐。

Linux(我正在使用Ubuntu)是一个多用户操作系统。据我所知,它有7个虚拟控制台,用户可以登录并同时工作。那么为什么会这样呢?如果在切换控制台时我的系统正在更新,将会发生什么?


4
要问的正确问题是,如果所有这些用户都想播放音乐,将会发生什么?
JdeBP

Answers:


4

Linux有多个虚拟控制台。Ctrl+ Alt+ 在这些控制台之间切换。当您从控制台7切换到控制台2时,输入和输出外围设备将从控制台7重新路由到控制台2。当控制台7不活动时,它无法访问输入/输出外围设备:显示屏上未显示屏幕,应用程序不接收键盘输入等。Fn

由于历史原因,声音输入和输出使用的输入通道与键盘和鼠标等输入设备以及视频显示通道完全不同。控制台设备(操作系统中的抽象)涵盖键盘和视频,但不包括声音。在Unix系统上,声音的最常见基本实现独立于该系统,并且基于组成员身份而不是控制台的所有权来授予使用声音外围设备的权限。这实际上是设计缺陷。

Ubuntu进行了设置,以便会话登录到控制台,只有它们才能访问音频设备。如果切换控制台,除非您也登录到其他控制台,否则您将无法访问音频设备。从一开始就应该这样做,但这不是因为控制台界面的设计人员没有考虑声音。

当您切换到另一个控制台时,您的程序将继续运行,因为CPU与控制台无关,而是与计算机关联:任何在计算机上具有帐户的人都可以使用CPU时间。其他资源(例如内存和文件)也同样如此(取决于权限)。只有与用户的交互才受控制台所有权的支配。当您切换到未登录的控制台时,声音停止播放,因为您的程序失去了访问声音输出设备的权限。

我相信Ubuntu通过Polkit实现访问控制,但是我不知道它是如何工作的。


你可以试试看 播放音乐并切换VT。一段时间后,切换回F7 VT。歌曲从暂停点开始播放。如果系统不是睡眠线程,这怎么可能。不访问声音I / O不会暂停播放器。而且我也在安装程序时尝试了它。令人惊讶的是,即使我切换了VT,该程序也已安装。
DScript

1
@DScript播放器线程正在等待声音系统,因此被阻止。没有等待声音系统的线程继续运行。不授予声音I / O访问权限确实会阻止播放器,因为完成操作的方式不是拒绝请求,而是阻止请求。
吉尔斯(Gillles)“所以-别再邪恶了”

1

不久前,人们使用计算机终端将数据输入到Unix大型机中或从中显示数据。假设该终端用户中的任何一个想要cat /dev/zero将输出不广播到连接到同一大型机的所有终端/用户(这是因为它是一个多用户系统,并且每个用户都可以运行其任务而不会影响其他用户) 。

当今,我们使用的是虚拟终端(或虚拟控制台 -VC),它们是物理计算机终端的软件仿真,并且以类似的方式工作。如果您已登录VC1并运行ls -alR /,则输出不会广播到所有VC,即使切换到另一个VC,您ls仍将继续在VC1中运行并将其输出发送到VC1(以相同的方式进行更新该命令将在您启动它的VC中保持运行,即使您切换到另一个VC)。

现在,听起来它与标准输出有些不同,因为(默认情况下)无论您用户登录的VC是什么,它都使用相同的设备进行输出,但是您的用户必须先登录才能访问主机的输出。声音设备。

您也可以在这里查看有关VC的更多详细信息。


你可以试试看 播放音乐并切换VT。一段时间后,切换回F7 VT。歌曲从暂停点开始播放。如果系统不是睡眠线程,这怎么可能。不访问声音I / O不会暂停播放器。而且我也在安装程序时尝试了它。令人惊讶的是,即使我切换了VT,该程序也已安装。
DScript

@DScript是因为您正在使用的播放器旨在检测切换到另一个VC并暂停。默认情况下,切换到另一个VC时,系统将不运行或暂停进程。
petry

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.