![在 shell 之间切换,停止当前正在播放的音乐](https://linux22.com/image/67675/%E5%9C%A8%20shell%20%E4%B9%8B%E9%97%B4%E5%88%87%E6%8D%A2%EF%BC%8C%E5%81%9C%E6%AD%A2%E5%BD%93%E5%89%8D%E6%AD%A3%E5%9C%A8%E6%92%AD%E6%94%BE%E7%9A%84%E9%9F%B3%E4%B9%90.png)
当我正在听音乐时,我使用 ++ 更改了虚拟控制台,音乐突然暂停了。返回运行 X 服务器的控制台 ++Ctrl或以Alt用户身份登录我当前正在使用的控制台 ( ++ ) ,音乐就会再次开始播放。F2CtrlAltF7CtrlAltF2
Linux(我使用的是Ubuntu)是一个多用户操作系统。据我所知,它有7个虚拟控制台,用户可以同时登录和工作。那么为什么会发生这种情况呢?如果我的系统在切换控制台时进行更新,会发生什么情况?
答案1
Linux 有多个虚拟控制台。Ctrl+ Alt+在这些控制台之间切换。当您从控制台 7 切换到控制台 2 时,输入和输出外围设备将从控制台 7 重新路由到控制台 2。当控制台 7 处于非活动状态时,它无法访问输入/输出外围设备:显示器上不显示屏幕、应用程序不接收键盘输入等。Fn
由于历史原因,声音输入和输出使用与键盘和鼠标等输入设备以及视频显示器完全不同的通道。控制台设备(操作系统中的抽象)涵盖键盘和视频,但不包括声音。 Unix 系统上最常见的声音基本实现独立于该系统,并且使用声音外围设备的权限是根据组成员身份而不是控制台的所有权授予的。这实际上是设计上的缺陷。
Ubuntu 已经进行了设置,以便登录到控制台的会话只有他们才能访问音频设备。如果您切换控制台,您将无法访问音频设备,除非您也登录到其他控制台。这确实是从一开始就应该做的事情,但这并不是因为控制台界面的设计者没有考虑声音。
当您切换到另一个控制台时,您的程序会继续运行,因为 CPU 不与控制台相关联,而是与计算机相关联:任何在该计算机上拥有帐户的人都可以使用 CPU 时间。对于内存和文件等其他资源(受权限限制)也是如此。只有与用户的交互才受控制台所有权的控制。当您切换到未登录的控制台时,您的声音将停止播放,因为您的程序失去了访问声音输出设备的权限。
我相信Ubuntu通过以下方式实现访问控制波尔基特,但我不知道它到底是如何工作的。
答案2
不久前,人们用电脑终端将数据输入 Unix 大型机或显示来自 Unix 大型机的数据。如果任何该终端用户想要,比方说,cat /dev/zero
输出不会广播到连接到同一主机的所有终端/用户(这是因为它是一个多用户系统,每个用户都可以运行其任务而不影响其他用户) 。
在我们这个时代,我们使用虚拟终端(或者虚拟控制台- VC)是物理的软件模拟电脑终端,并以类似的方式工作。如果您登录到 VC1 并运行ls -alR /
,输出不会广播到所有 VC,并且即使您切换到另一个 VC,您ls
也会继续在 VC1 中运行并将其输出发送到 VC1(同样,您的更新命令将继续在您启动它的 VC 中运行,即使您切换到另一个 VC)。
现在,听起来它与标准输出有点不同,因为(默认情况下)它使用相同的设备进行输出,无论您的用户登录到哪个 VC,但您的用户必须登录才能访问该设备的输出声音设备。
您也可以看看这里有关 VC 的更多详细信息。
答案3
尝试
usermod -a -G audio youruser
从:https://www.reddit.com/r/linux/comments/1ckvhd/keeping_music_playing_across_multiple_terminal/