私のシステムでグラフィカルソフトウェアを実行するために代替ユーザー(管理者ではない)を使用しようとしています。代替ユーザーは、同じ名前のリモート・システム・ユーザーと一致するように名前が付けられ、UIDとGIDが提供されます。 UIDは500なので、このユーザーは「ログインしていない」ユーザーになります。
Ubuntuで起動し、デフォルトのアカウントでログインし、ターミナルを開き、su
代替ユーザーに切り替えました。その後、アプリケーションを起動するコマンドを実行しようとしましたが、「指定されたプロトコルなし」というメッセージを受け取りました。
UIDが< 1000であるのか、su
それともユーザーが管理者ではないからですか?このユーザーにGUIを使用してアプリケーションを実行させるにはどうすればよいですか?
答え1
私の場合、新しいディスプレイサーバープロトコルがwayland
問題でした。
これにより、xhost + local:
他のユーザー(ルートなど)がセッションでプログラムを実行できるようになりますが、ネットワーク接続は許可されません。
顧客を許可したい場合すべてのホストxhost +
、ホストを指定せずに使用できます。しかし、これは安全ではありません、セッションアクセスを許可するホストのみを指定するのが最善です。
答え2
問題はいいえユーザーのUIDが原因で発生します。 500をUIDとして使用するのは問題ありません。そのUIDは、一部のディスプレイマネージャのデフォルト設定を除いて、「ログインしていない」ユーザーにはなりません。
エラーメッセージプロトコルが指定されていません。アプリケーション固有のエラーメッセージのように聞こえ、役に立ちません。しかし、私の考えでは、アプリケーションが別のユーザーとして実行されているため、そのアプリケーションがX11ディスプレイに接続できないため、エラーが発生しているようです。他のユーザーが実行しているシステムの他のプロセスがディスプレイをハッキングし、ウィンドウを作成し、キーストロークをスヌープできないようにするために、アプリケーションはX11サーバーと通信するために「魔法クッキー」(秘密トークン)を必要とします。デスクトップ環境を起動したユーザーのみがアクセスできるように権限が設定されているため、他のシステムユーザーはこのマジッククッキーにアクセスできません。
X11 Cookieを別のアカウントにコピーするには、元のユーザーとして実行してみてください。
su - <otheruser> -c "unset XAUTHORITY; xauth add $(xauth list)"
その後、アプリケーションを実行します。XAUTHORITY
シェルで設定を解除する必要があるかもしれません。このコマンドは、基本ユーザーからマジッククッキー()を抽出し、他のユーザーが取得できる場所にxauth list
追加()します。xauth add
答え3
あなたがXと接触するように無差別代入をしたいとしましょう...
(Xが実行されている)サーバー上ですでにコマンドを実行しているとし、それ以外の場合は最初に動作させてから、クライアントで「ssh -X user@server」を使用します。
xauthコマンドを実行する方法はいくつかあります。たとえば、「sudo」を使用できますが、環境変数が失われたり変更されたりする可能性があります。 DISPLAYおよびXAUTHORITY環境変数を保存する必要があります。このような場合であるかどうかをテストするには、コマンドを実行するのと同じ方法で "echo $ XAUTHORITY"を実行できます。ただし、これらのコマンドを実行する前に環境変数を拡張しないでください。たとえば、sudo bash -c 'echo "$ XAUTHORITY"'を実行してsudoを実行した後、XAUTHORITYが正確に何かを確認します(消えた場合は、sudoersファイルに何かを追加する必要があるかもしれません。他の場所を参照)。
最後に、アクセスするユーザーとしてサーバーで次のコマンドを実行します。
xauth info
これにより、使用される「権限ファイル」が表示されます(デフォルトでは/root/.Xauthority、rootの場合、または/home/theuser/.Xauthorityなどのファイル)。正しい。
ファイルがある場合は削除します。
mv /root/.Xauthority /root/.Xauthority.bak
もちろん、上記のコマンドで/root/.Xauthority
状況に応じて正しいXAUTHORITYファイルを置き換えてください。
再生成しますが空です(多くのコマンドに必要です)。
touch /root/.Xauthority
この時点であなたは得るでしょうプロトコルが指定されていません。エラーが発生しても無効なMIT-MAGIC-COOKIE-1これから。現在Xサーバーで使用されている権限ファイルを見つけます。
ps aux | grep Xorg
次のように表示する必要があります。
root 1153 0.0 1.0 149560 44464 tty7 Ss+ dec02 0:00 /usr/lib/xorg/Xorg -nolisten tcp -auth /var/run/sddm/{ef18c483-7891-4e82-80ef-2c8f9bd79711} -background none -noreset -displayfd 17 vt7
次のファイル名は、-auth
次のコマンドに必要なファイル名です。ルートとして実行:
sudo xauth -f '/var/run/sddm/{ef18c483-7891-4e82-80ef-2c8f9bd79711}' list
32桁の16進キーが一覧表示されます。たとえば、出力は次のようになります。
hostname/unix:0 MIT-MAGIC-COOKIE-1 c0eaf749aa252101a0f57d5087089db7
これを使用して.Xauthorityファイルを作成します(再度ログインする必要があるユーザーとして):
xauth add $DISPLAY MIT-MAGIC-COOKIE-1 c0eaf749aa252101a0f57d5087089db7
「c0eaf749aa252101a0f57d5087089db7」をlistコマンドから返された内容に置き換えます。 .Xauthorityのサイズは51バイトでなければならず、Xサーバーに(再び)接続できるようになりました。
PS/usr/bin/startx
私のようにXorgを実行して起動した場合は、次のようなものが表示されます。
root 1652 0.0 0.0 12788 5792 ? Ss jan20 0:00 login -- carlo
carlo 1834 0.0 0.0 8140 3468 tty1 Ss jan20 0:00 \_ -bash
carlo 1887 0.0 0.0 7404 3236 tty1 S+ jan20 0:00 \_ /bin/sh /usr/bin/startx
carlo 1905 0.0 0.0 3912 828 tty1 S+ jan20 0:00 \_ xinit /home/carlo/.xinitrc -- /etc/X11/xinit/xserverrc :0 vt1 -keeptty -auth /tmp/serverauth.WWPpq4OSlA
root 1906 1.2 0.7 25576848 235104 tty1 Sl jan20 207:56 \_ /usr/lib/Xorg -nolisten tcp :0 vt1 -keeptty -auth /tmp/serverauth.WWPpq4OSlA
carlo 1917 0.0 0.0 143408 10884 tty1 Sl jan20 0:00 \_ startplasma-x11
削除されました/tmp/serverauth.WWPpq4OSlA
。/usr/bin/startx
動作方法については、スクリプトを参照してください。
mcookie=`/usr/bin/mcookie`
xserverauthfile=`mktemp -p /tmp serverauth.XXXXXXXXXX`
trap "rm -f '$xserverauthfile'" HUP INT QUIT ILL TRAP KILL BUS TERM
xauth -q -f "$xserverauthfile" << EOF
add :$dummy . $mcookie
EOF
また
xauth -q << EOF
add $displayname . $mcookie
EOF
ユーザー.Xauthority
ファイルにランダムなCookieを追加します。
この場合、クッキーは完全に消えます。私がそれを元に戻すことができる唯一の場所はXorgプロセスのメモリ(RAM)ですが、それを復元する方法を見つけるにはあまりにも怠惰です。もちろん、Xを再起動すると、新しいCookieでファイル.Xauthority
が再生成され、同じCookieでサーバーが再起動されます。
答え4
端末にこれを入力しxhost +SI:localuser:root
てexport DISPLAY=:0.0
もう一度やり直してください