Ubuntu Server 14.04를 실행하는 키오스크 호스트가 있습니다. TV와 같은 일부 비디오를 재생하도록 설정하려고 합니다. 때로는 유튜브 재생목록이나 기타 웹 기반 비디오 스트리밍 서비스 등을 재생해야 하므로 브라우저 창이 필요할 것 같습니다.
이를 위해 데스크톱 환경 없이 베어본 X.org를 설치했는데 작동했습니다.
그러나 관리는 네트워크를 통해 이루어지고 호스트는 파일 및 웹 서버 역할을 두 배로 하기 때문에(이것은 홈 프로젝트입니다.) 보안에 조금 신경을 쓰고 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
이후 파일에는 다음과 같이 수십 개의 후속 ioctrls가 있습니다.
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 개발 파일에는 다음과 같은 권한이 있습니다.
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를 루트가 아닌 사용자로 만드는 것보다 보안에 더 해롭습니다. 따라서 루트가 아닌 사용자로 실행되도록 하여 X를 보호하는 것은 실제로 보안을 향상시키지 못할 수 있습니다. (명백한 공격을 차단하여 공격을 더 어렵게 만든다고 생각하십시오. PCI 레지스터를 통해 시스템을 공격하는 방법을 실제로 아는 사람은 누구입니까?)
하지만 제가 답을 찾은 방법은 strace에서 Xorg를 실행하는 것이었습니다.
strace -e 추적=on,ioctl Xorg
그런 다음 열려고 시도한 장치 또는 실패한 작업을 찾으십시오. (나는 그것이 open 또는 ioctl일 것이라고 추측하지만, 해당 시스템 호출 목록을 확장해야 할 수도 있습니다)
답변2
나도 같은 문제가있었습니다 (또한레이톤), 나는 통과한다도래 송곳그리고 커널 소스 코드. 내 결론은 이것이 저주 없이는 (아마도) 작동하지 않을 것이라는 것입니다.체계. 코드 포인터는 다음 보관된 이메일을 참조하세요.