다른 사용자로 그래픽 응용 프로그램을 실행하는 방법은 무엇입니까?

다른 사용자로 그래픽 응용 프로그램을 실행하는 방법은 무엇입니까?

사용자 A( ) 가 사용자 B( )로서 자신의 그래픽 세션에서 그래픽 응용 프로그램을 실행 userA하려고 한다고 가정합니다. userB최신 GNU/Linux 시스템에서는 어떻게 수행됩니까?

답변1

짧은 답변

설치하다 run-as 스크립트 및 실행:

run-as -X <user> <command>

긴 대답

그래픽 세션 userB에 대한 액세스 권한 을 부여하는 스크립트를 작성하고 실행합니다 .userA

/home/userA/.local/bin/xhost_userB
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
xhost +si:localuser:userB

임의로 선택할 수 있는: 로그인 시 접근을 허용합니다.

/home/userA/.config/autostart/xhost_userB.desktop
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
[Desktop Entry]
Type=Application
Name=Graphical auth for user B
Comment=Authorize user B to run graphical software in this session
GenericName=userB xauth
Exec=/home/userA/.local/bin/xhost_userB
X-GNOME-Autostart-enabled=true

일부 응용 프로그램에는 추가 서비스가 필요할 수 있습니다.

/home/userA/.local/bin/xhost_userB_extra_services
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
systemctl --user restart dbus
systemctl --user import-environment

사용자 B(예: Seahorse)로 애플리케이션을 실행하는 스크립트를 만듭니다.

/home/userA/.local/bin/application
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
machinectl shell --uid=userB \
                 --setenv=DISPLAY="${DISPLAY}" \
                 --setenv=NO_AT_BRIDGE=1 \
                 .host \
                 /home/userA/.local/bin/xhost_userB_extra_services

machinectl shell --uid=userB \
                 --setenv=DISPLAY="${DISPLAY}" \
                 --setenv=NO_AT_BRIDGE=1 \
                 .host /usr/bin/application

참고: XWayland가 실행 중인 경우 Wayland에서도 작동합니다.

관련 정보