나는 당신과 같은 질문을했지만 일반 사용자를위한 것입니다. 사용자 계정 foo를 사용하여 firefox를 시작하고 싶다고 가정 해 봅시다. 바로 로그인했습니다 :
[bar@localhost ~]$ sudo -u foo -H firefox
슬프게도 그 명령은 질문에서와 같은 오류로 실패했습니다 (즉, 프로토콜이 지정되지 않았으며 디스플레이를 열 수 없습니다)
내 해결책은 단순히 foo 사용자를 X 서버에 대한 인증 된 액세스 목록에 추가하는 것입니다.
xhost si:localuser:foo
그리고 그것은 sudo
foo를 사용하여 Firefox (및 다른 X 응용 프로그램)를 시작할 수있었습니다 .
배경 : X Window에는 클라이언트 / 서버 아키텍처가 있습니다. 응용 프로그램을 시작할 때 X 서버 인증을 요청하여 응용 프로그램을 표시합니다. 기본적으로 세션을 열면 (그래픽으로 로그인) 사용자 (사용자)는 서버와 통신하고 응용 프로그램을 표시 할 수 있습니다. 다른 사용자는 사용자가 지정하지 않으면이 권한이 없습니다. xhost
권한 목록을 조작하는 도구입니다. 는 si
규칙이 서버 측임을 나타낸다하고 로컬 사용자 인증 foo
디스플레이 응용에있다. X Window는 이와 관련하여 매우 강력하며 DISPLAY
환경 변수를 사용하여 원격 응용 프로그램을 로컬로 표시 할 수 있습니다 xhost
(단, 이에 한하지 않음). 예전에는 사람들이 입력했을 때xhost +
암시 적으로 모든 사람이 자신의 X 세션을 사용할 수 있도록 허용했습니다. 요즘은 사람들이 X Window 클라이언트 / 서버 아키텍처를 사용하여 점점 줄어들지 않기 때문에 화면에 장난으로 응용 프로그램을 표시 할 수있었습니다. 지난 10 년).
추신 : 나는 나중에 pdf.js와 같은 취약점 을 피하기 위해 일종의 "감옥"으로 Firefox를 시작하기 위해 이것을했습니다 . 그러나 sudo를 통해 Firefox를 호출하면 오디오 또는 비디오 하드웨어에 액세스 할 수 없다는 것을 빨리 알았습니다. 그러나 sudo를 통해 Firefox를 호출 할 때 비디오 하드웨어 가속 및 오디오를 활성화하는 방법을 명확하게 설명 하는 사람이 있습니다. 이 지침이 포함 된 YMMV, 예를 들어, 여전히 오디오에 대한 권한이 거부되었지만 비디오는 양호합니다 (SELinux가 켜진 Fedora 22에서 테스트 됨).