하자 내가 2 개 사용자 계정을 갖고 있다고 user1
하고 user2
. 로 로그인 user1
한 다음를 user2
사용으로 전환하면 su
명령 줄 프로그램을 실행할 수 있지만 GUI 프로그램은 실패합니다.
예:
user1@laptop:~$ su - user2
user2@laptop:~$ leafpad ~/somefile.txt
No protocol specified
leafpad: Cannot open display:
그렇다면 어떻게 GUI 응용 프로그램을 실행할 수 있습니까?
답변
수 대 수-
다른 사용자가되면 일반적으로 사용하려고합니다 su - user2
. 대시는 user2 .bash_profile
가 소스를 얻 도록 강제합니다 .
xhost
또한 사용자에게 디스플레이에 대한 액세스 권한을 부여해야합니다. 이것은 X에 의해 제어됩니다.이 명령 xhost +
을 사용하여 다른 사용자에게 GUI를 user1의 데스크탑에 표시 할 수있는 권한을 부여 할 수 있습니다.
참고 : 실행할 때 xhost +
당신이 USER1에 속하는 쉘에서 여전히 동안을 실행 할 수 있습니다.
$ DISPLAY
user2가되면 환경 변수를 설정해야합니다 $DISPLAY
.
$ export DISPLAY=:0.0
답변
user1 에서 인증 토큰을 공유해야합니다 (가정 ~
이 user1의 홈 이라고 가정 ).
cat ~/.Xauthority | sudo -u user2 -i tee .Xauthority > /dev/null
답변
X11 전달을 사용할 수 있습니다.
ssh -XY otheruser@localhost your-gui-program-name-here
답변
다른 사용자로부터 앱을 시작할 수 있습니다. 사용자 1로 로그인 (GUI) 한 상태에서 user2에서 gimp 앱을 시작하겠습니다.
$ xhost +
$ sudo su user2
(패스)
$ gimp
즐겨 🙂
답변
sux 명령을 시도 할 수 있습니다.
sux user2
sux가 $ DISPLAY를 처리 할 것입니다. 다음과 같이 설치해야 할 수도 있습니다.
sudo apt-get install sux
데비안 / 우분투에서.
답변
대안에 관해서는 sux
, 안전하게 (그래픽 명령을 실행하기 위해 firefox-esr
아래의 예에서와) 같은 $AUTHUSER
( guest
아래 예제) :
AUTHUSER=guest
AUTHSTRING=SI:localuser:${AUTHUSER}
xhost +${AUTHSTRING} > /dev/null
SUDO_ASKPASS=/usr/bin/ssh-askpass
export SUDO_ASKPASS
sudo -k --askpass -u ${AUTHUSER} /usr/bin/firefox-esr
xhost -${AUTHSTRING} > /dev/null
sudo -K
코드는 다음을 수행합니다.
- 제공
guest
현재 사용자에 대한 사용자 액세스$DISPLAY
를 통해를xhost +SI:localuser:guest
ssh-askpass
그래픽으로 암호를 묻는 데 사용 합니다. (물론sudoers(5)
NOPASSWD:
보안 정책에 문제가 있다고 생각되면 이것을 피할 수 있습니다 . 또는 다른askpass
프로그램을 사용 하거나 구성 파일에 지정할 수 있습니다 (자세한 내용sudo(8)
은 참조--askpass
)- 비밀번호가 괜찮고 (및 권한이있는 경우
sudoers(5)
)/usr/bin/firefox-esr
다른 사용자 (guest
) 로 명령 을 실행합니다. - 프로그램이 완료된 후 다른 사용자 (
guest
)에게 액세스 권한은 다음$DISPLAY
을 통해 취소됩니다.xhost -SI:localuser:guest
-
마지막으로
sudo -K
캐시 된 암호를 제거하므로 다음에 호출하면 캐시 된 암호ssh-askpass
를 사용하는 대신 암호를 다시 묻습니다.그것보다 조금 더 많은 작업을하는 동안
gksu(8)
또는sux(8)
한을, 그것은 스크립트, 그리고 훨씬 더 안전보다 될 수있다 :xhost +
(모든 사용자는 효력이있는 한 그래픽 디스플레이에 액세스 할 수 있습니다)- 다른 사용자가 읽을 수있는 ~ / .xauth (해당 사용자가 디스플레이에 무제한 액세스)
- 어떤
gksu
/sux
의 (임시 복사본 한~/.Xauthority
당신을 복사 할 사용자를 지정 허용MIT-MAGIC-COOKIE-1
디스플레이를 사용하여 계속을 후에도 gksu / SUX 당신이 종료 기계하지 않았다 나 디스플레이의 로그 아웃만큼 (완료 – 스크린 세이버, 최대 절전 모드 등이 마법을 변경하지 않은 쿠키).
단 하나의 로컬 사용자 만 디스플레이에 액세스 할 수 있으며 명령이 실행되는 동안 만 (명령이 완료 $AUTHUSER
되면 더 이상 어떤 방식 으로든 디스플레이에 액세스 할 수 없음).
또 다른 안전한 대안이다 ssh -X
(없이 -Y
볼! 어떤 실제로 당신이 덜 안전한 수 ForwardX11Trusted
에 ssh_config(5)
로 당신이 그것을 스크립팅하지 않으면 사용하기가 쉽습니다 세부 사항)하지만 additinal 오버 헤드 유도 (예를.이 느립니다) 및 일부 프로그램이 제대로 작동하지 않을 수 있습니다 안전 하지 않은-Y
.
답변
설치 UI를 user2 로로드해야합니다 .
이것을 따르십시오 :
루트 로 로그인 :
sudo su
x 서버를 테스트하십시오.
xclock
시계가 작동하는 것을 볼 수 있다면 좋습니다. 이제 다음을 실행하십시오.
xhost
결과는 다음과 같아야합니다.
xhost SI:localuser:tri
# tri is my user name
이제 user2가 xhost에 액세스 하도록하십시오
xhost +SI:localuser:user2
이제 user2에 다시 로그인 하여 GUI 프로그램을 열어보십시오.