有没有一种设置权限的方法,以便进程可以使用特定的设备?


12

如您所见,例如,在这里,logind是systemd的一部分,可以为某些设备设置用户会话的权限。还有一个视频显示这种行为在实践中是如何工作的。简而言之,如果您开始说amarok,并且播放了一些歌曲,您将听到声音,直到切换到只有登录提示的另一个用户或TTY。这是因为活动会话变为非活动状态。

我知道您可以简单地将一个(或多个)用户添加到特定的组,在本例中为“音频”,这将“解决”此问题,但是我想知道是否还有其他解决方案。我真正想要的是为该进程设置一些权限,以便即使所有用户的会话均被锁定,它也可以一直使用声卡。

那可能吗?我之所以问是因为我经常听音乐,而且我真的不需要在大多数时间打开显示器,所以我只是锁定屏幕。但是,当我锁定屏幕时,活动会话将变为非活动状态,并且amarok停止播放。是的,屏幕应该被锁定,而不仅仅是关闭。

编辑:

我认为我使用的发行版无关紧要,因为如果板上安装了系统,那将是完全相同的问题。无论如何,我正在使用debian sid,但是诸如systemd,udev(和某些依赖项)之类的某些软件包来自实验分支,现在是219-9版本。


1
可能的运行nohup program_x & ; disown可能会有所帮助。或使用屏幕
JustMe,2015年

但是该过程运行良好。当我锁定屏幕时,至少在解锁屏幕之前,它不再能够使用声卡。
Mikhail Morfikov 2015年

您是否尝试过使用loginctl enable-linger该帐户?
spuk

根据Arch Wiki的说法:The systemd user instance is started after the first login of a user and killed after the last session of the user is closed. Sometimes it may be useful to start it right after boot, and keep the systemd user instance running after the last session closes, for instance to have some user process running without any open session. Lingering is used to that effect.这与不活动的用户会话无关,因为systemd --user它一直存在。
米哈伊尔·莫尔菲科夫

锁好后,我通常在睡眠时让音乐在Fedora 21笔记本电脑上播放。因此,我不认为仅由于systemd锁定计算机屏幕就不会将会话标记为无效。
布拉奇利

Answers:


1

我不确定您使用的是哪个版本/版本的Linux,但看起来声音设备的ACL似乎由ConsoleKit通过udev规则控制。在我的Debian主机上,我在/lib/udev/rules.d/70-udev-acl.rules中看到以下内容

# sound devices
SUBSYSTEM=="sound", TAG+="udev-acl"

我会取消标记,因此consolekit不会将声音设备添加到其数据库中,也不会管理声音设备上的ACL


我在桌面上的注释中以及重新启动后在桌面上进行了验证。不再对声音设备进行ACL管理,我可以锁定屏幕来播放歌曲
VenkatC 2015年

我更新了问题。现在,consolekit已经过时了-您可以在这里免费阅读更多内容freedesktop.org/wiki/Software/ConsoleKit,而我的系统未使用它。已登录是它的替代品,它的作用基本上相同。我试图注释掉您给我的那行,重新启动后,我的系统看不到任何声卡。即使可以,而且效果很好,我也不认为我会使用此解决方案-因为与将用户添加到音频组是同一回事,至少我是这样看的。
米哈伊尔·莫尔菲科夫

谢谢,我查看了登录的详细信息,是的,它在做类似的事情。那就是在寻找udev TAG'uaccess'来识别要管理的设备,它位于/lib/udev/rules.d/70-uaccess.rules中。所有这些都归结为基本的unix权限,我认为您有以下选择:1)通过udev删除声卡标签,因此登录后将无法管理音频设备并锁定屏幕,切换用户-不会更改声音设备的权限。您可以根据需要设置烫发2)您可以简单地找到amarok二进制文件并将其组设置为音频并对其进行设置,这样有效的组就可以变为音频
VenkatC 2015年

我检查了第二个解决方案,但不幸的是它不起作用。我设置audio group为amarok二进制文件,并且权限如下:-rwxr-sr-x,但是当我尝试以普通用户身份启动amarok时,出现此错误:QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave. unnamed app(24333): KUniqueApplication: Cannot find the D-Bus session server: "Unable to autolaunch when setuid"
Mikhail Morfikov

嗯,出于安全原因,例如:gtk.org/setuid.html,似乎在GUI中运行setuid程序似乎非常复杂且受阻。我将进行更多研究,并让您知道,这是好东西-学习新事物!
2015年

0

让我说我对Linux桌面上的音频知之甚少。Mea Culpa,如果这没有帮助。

我将设置音频设备的组权限:

chgrp audio <dev-path>
chmod g+rw <dev-path>

到amarok运行所在的组。使用systemd强制amarok在该组中运行。首先将amarok systemd文件复制到/ etc / systemd / user /并进行修改:

[Service]
Group=audio

(这是一个修改,而不是整个文件)。

但是,由于当今的Linux音频系统具有多层结构,因此答案可能更为“复杂”。


1
至于chgrp audio-/ dev / snd /下的所有设备都已经有该audio组,但是当您使用pulseaudio时这无关紧要,事实就是如此。关于systemd的服务,我尝试了一下,但是遇到以下错误:Failed at step GROUP spawning /usr/bin/amarok: Operation not permitted. amarok.service: main process exited, code=exited, status=216/GROUP,并且我认为我不能以常规用户身份更改这些组。我还有其他需要更改组的服务,但这是一个正常的系统守护程序,并且工作正常。`
Mikhail Morfikov 2015年

Amarok服务不是由root启动的吗?Amarok可能需要其他组的其他组权限。太糟糕了,这并不容易。
奥西斯

它只是一个音乐播放器。:)
Mikhail Morfikov 2015年

0

在vnc framebuffer中运行播放器怎么样?在薄荷17 ...

# apt search vfb
p   xvfb                            - Virtual Framebuffer 'fake' X server
p   xvfb:i386                       - Virtual Framebuffer 'fake' X server

您将使用VNC来查看桌面,如https://en.wikipedia.org/wiki/Xvfb中所述


我已经阅读了Usage scenariosWiki链接中的,但我认为这些都不适用。该过程(amarok)只需要一些权限,即使有可能,我也不知道如何设置它们。
Mikhail Morfikov 2015年

您认为您需要什么权限?我非常怀疑systemd只是因为您切换tty而改变了设备的权限,如果确实如此,我将尽力避免像现在这样的瘟疫。我也不知道这对您有帮助,但我没有对其进行测试,但这是我唯一有机会工作的想法。此外,用户具有权限,而不是进程。
smokes2345

只需阅读问题中的第一个链接。
米哈伊尔·莫尔菲科夫

0

通过xdg自动启动(可在下找到)启动Pulseaudio ~/.config/autostart/。有一个名为的文件pulseaudio.desktop,在该文件中,我将默认exec行更改为此:

Exec=/usr/bin/sg audio -c "pulseaudio -D"

当我登录系统时,pulseaudio进程如下所示:

$ ps -eo user,group,args | grep pulse
morfik   audio    pulseaudio -D
morfik   audio    /usr/lib/pulseaudio/pulse/gconf-helper

现在我可以一直听音乐了。我认为这是我一直在寻找的解决方案。

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.