他のユーザーでグラフィカルアプリケーションを実行するには?

他のユーザーでグラフィカルアプリケーションを実行するには?

ユーザー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でも機能します。

関連情報