답변:
다른 사용자가되면 일반적으로 사용하려고합니다 su - user2
. 대시는 user2 .bash_profile
가 소스를 얻 도록 강제합니다 .
또한 사용자에게 디스플레이에 대한 액세스 권한을 부여해야합니다. 이것은 X에 의해 제어됩니다.이 명령 xhost +
을 사용하여 다른 사용자에게 GUI를 user1의 데스크탑에 표시 할 수있는 권한을 부여 할 수 있습니다.
참고 : 실행할 때 xhost +
당신이 USER1에 속하는 쉘에서 여전히 동안을 실행 할 수 있습니다.
user2가되면 환경 변수를 설정해야합니다 $DISPLAY
.
$ export DISPLAY=:0.0
xhost +user2
여전히 나 에게이 오류가 발생 xhost: bad hostname "user2"
합니다. 나는 일부를 봤는데, xhost +user2@laptop
또는 할 필요가있는 것 같습니다 xhost +user2@localhost
. 그런 다음 말합니다 xhost +user2@localhost being added to access control list
.
xhost
, 및 지정 export DISPLAY=:0.0
, 실행 leafpad
여전히 나를를 제공 No protocol specified leafpad: Cannot open display:
하고, 실행하는 데 실패합니다. linuxquestions.org/questions/linux-newbie-8/… 에서이 링크를 찾았습니다 . 여기에는 몇 가지 매직 쿠키가 xauth
있습니다. 이러한 것들이 컴퓨터에서 작동하는지 테스트 했습니까? 어쩌면 구성과 다른 점이 있습니까? 데비안 + LXDE에 있습니다.
xhost +
작동하며 다른 것은 필요하지 않은 것 같습니다 (설정하지 않아도 됨 $DISPLAY
). 답변을 업데이트 할 수 있습니까? 동의합니다.
xhost
은 형식의 목록을 제공 SI:localuser:USERNAME
하므로 xhost SI:localuser:user2
작동합니다. 아 그리고 사용자의 디스플레이는를 사용하여 찾을 수 있습니다 w
.
xhost +
x-server에 연결할 수있는 모든 호스트의 모든 사용자가 화면에 액세스 할 수 있습니다. xhost +SI:localuser:user2
데비안에서 나를 위해 일합니다.
user1 에서 인증 토큰을 공유해야합니다 (가정 ~
이 user1의 홈 이라고 가정 ).
cat ~/.Xauthority | sudo -u user2 -i tee .Xauthority > /dev/null
tee -a
기존 정보가 방해받지 않도록 사용 하는 것이 더 안전 할 수 있습니다 .Xauthority
.
X11 전달을 사용할 수 있습니다.
ssh -XY otheruser@localhost your-gui-program-name-here
다른 사용자로부터 앱을 시작할 수 있습니다. 사용자 1로 로그인 (GUI) 한 상태에서 user2에서 gimp 앱을 시작하겠습니다.
$ xhost +
$ sudo su user2
(패스)
$ gimp
즐겨 :)
export DISPLAY
받아 들인 대답이 말한대로 먼저 해야합니다 )
$ xhost -
sux 명령을 시도 할 수 있습니다.
sux user2
sux가 $ DISPLAY를 처리 할 것입니다. 다음과 같이 설치해야 할 수도 있습니다.
sudo apt-get install sux
데비안 / 우분투에서.
sux
더 이상 데비안 또는 우분투에서 배송되지 않습니다. 내가 찾을 수있는 최선의 대안은 영구적으로 사용하거나 사용할 수 있도록 xhost SI:localuser:root
(또는 어떤 사용자라도) 추가 ~/.xprofile
하는 것입니다runuser
gksu
/ gksudo
가공 한 미세 그 대안. 여전히 Sid에있는 동안 보안 문제로 Buster에서 제거됩니다.
대안에 관해서는 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 +
(모든 사용자는 효력이있는 한 그래픽 디스플레이에 액세스 할 수 있습니다)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 프로그램을 열어보십시오.
sudo su
. 사용 sudo
또는 su
; 하나를 선택. (3) 질문은 user1
및로 표시 user2
됩니다. user1
및로 답변을 작성하십시오 user2
. (하지 마십시오 tri
. 없음 ) (4)에 대한 설명이 포함되어 있으면 대답이 더 나을 것입니다 SI:localuser
. ……………… 의견에 응답하지 마십시오. 명확하고 완전하게 답변을 편집 하십시오.
$XAUTHORITY
것이 여전히 user1 's로 설정되어 있기 때문에~/.Xauthority
프로그램이 읽으려고 시도하고 파일이 일반적으로 모드 0600 (-rw-------
) 이기 때문에 실패 한다는 것입니다. user2를 포함하여 "other"그룹의 모든 사용자가 읽습니다. 당신이chmod o+r ~/.Xauthority
(user1로서), 당신은이 문제를 해결하기 위해 해킹했을 것입니다. 나는 이것을 보여주는 스크립트 를 썼다 .