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