我有一台运行 Ubuntu Server 14.04 的信息亭式主机。我正在尝试将其设置为播放一些视频,例如电视。有时它需要播放Youtube播放列表和其他基于网络的视频流服务等,因此浏览器窗口似乎是必要的。
为此,我安装了一个没有桌面环境的准系统 X.org,并且它可以工作。
然而,因为管理是通过网络进行的,并且主机兼作文件和 Web 服务器(这是一个家庭项目),所以我有点安全意识,我想以非 root 身份运行 X。我已经查过了https://wiki.ubuntu.com/X/Rootless,但它似乎过时了:用 -nohwaccess 运行 X 会抱怨:
/usr/bin/Xorg vt8 -retro -sharevts -nohwaccess -logfile /tmp/Xorg.U.log :1
...
Fatal server error:
(EE) Unrecognized option: -nohwaccess
如果我取下标志,它会启动但立即失败:
Loading extension GLX
xf86EnableIOPorts: failed to set IOPL for I/O (Operation not permitted)
编辑:哎呀,我显然无法阅读! Xorg 终止的致命错误不是这个,而是这个,就在xf86EnableIOPorts
警告之后:
(--) Depth 24 pixmap format is 32 bpp
Unable to retrieve master
Fatal server error:
[ 38106.045] (EE) AddScreen/ScreenInit failed for driver 0
而使用 运行时sudo
,它会发出:
(--) Depth 24 pixmap format is 32 bpp
RADEON(0): [DRI2] Setup complete
... and so forth.
这似乎是一个权限问题,但我已经设置了维基文章中提到的所有权限:
videoplayer@yuunagi:/usr/bin$ ls -la /dev/tty8
crw-rw---- 1 videoplayer root 4, 8 1月 13 02:09 /dev/tty8
/dev/event/*
有 o+rw 设置,
用户videoplayer
同时属于video
和audio
组:
videoplayer@yuunagi:/usr/bin$ cat /etc/group | grep videoplayer
audio:x:29:videoplayer
video:x:44:videoplayer
videoplayer:x:999:
我在这里缺少什么?
编辑: 顺便提一句。在有人指出之前:我启用了 KMS。内核日志如此说明(具有 DRM 功能的开源 Radeon 驱动程序),X.org 日志如此说明:[KMS] Kernel modesetting enabled.
编辑2: strace 揭示了以下内容:
打开GPU设备文件成功:
open("/dev/dri/card0", O_RDWR) = 9
之后,该文件有数十个后续 ioctrl,如下所示:
ioctl(9, 0xc0106407, 0x7fff66772190) = 0
然后,最后一个后续的 ioctl:
ioctl(9, TUNER_SET_CONFIG, 0x7fff667722b0) = 0
之后,失败了:
ioctl(9, 0x641e, 0) = -1 EACCES (Permission denied)
Unable to retrieve master
顺便提一句。访问的GPU dev文件具有以下权限:
videoplayer@yuunagi:/usr/bin$ ls -la /dev/dri/card0
crw-rw----+ 1 root video 226, 0 1月 13 02:09 /dev/dri/card0
答案1
我会快速猜测这取决于某些 DRI 设备。它还可能取决于处理 PCI 内存范围和类似内容的能力,并且使 Xorg 用户可读这些内容比让 X 成为非 root 对安全性造成的危害更大。因此,通过让 X 以非 root 身份运行来保护 X 实际上可能不会提高安全性(认为它可以通过阻止明显的攻击来使攻击变得更加困难。谁真正知道如何通过 PCI 寄存器来攻击系统?)
但我找到答案的方法是在 strace 下运行 Xorg。
strace -e 跟踪=打开,ioctl Xorg
然后查找它尝试打开哪个设备或哪个操作失败。 (我猜它将是 open 或 ioctl,但您可能必须扩展该系统调用列表)
答案2
我遇到了同样的问题(也有一个拉顿),我通过奥格和内核源代码。我的结论是,如果没有该诅咒,这将不会(可能永远)起作用系统。请参阅此存档电子邮件以获取代码指针: