コンソールにログインしている人でなくても、Xアプリケーションを実行してそのXセッションに表示するにはどうすればよいですか?私がrootであるか、ログインしたユーザーと同じであると想定しているため、原則としてこれを行う許可があります。しかし、どうすればこのことをXに納得させることができますか?
このような状況の例:
import
コマンドを介してXセッションのスクリーンショットを撮るcronジョブ簡単な答えは、DISPLAY
環境変数を設定する必要があるということです。そうすると、アプリが実行されます。
長い答えは、Xauthを持っているということです。同じマシンで同じユーザーとして実行している場合を除き、Xサーバーを実行しているアカウントからXを実行しているアカウントにXauth資格情報をエクスポートしない限り、クライアント。 ssh -X
がこれを処理します。これが素晴らしい理由ですが、手動の手順にはxauth extract - $DISPLAY
Xサーバーアカウントで、そのデータをxauth merge -
クライアントアカウント。 (警告:データはバイナリです。)
最新のLinuxシステムでは、:0に1つのXセッションがあり、X11機関データファイルは常に$HOME/.Xauthority
したがって、ほとんどの場合、たとえばBashで2つの環境変数を設定できます。
export XAUTHORITY=/home/$your_username/.Xauthority
export DISPLAY=':0'
結果は、Xディスプレイ(DISPLAY
環境変数に配置)とマジックCookie(ファイルに配置、XAUTHORITY
環境変数にファイル名を配置)を知る必要があるということです。
Xを実行しているシステムで、rootであるか、Xにログインしたユーザーと同じユーザーである場合は、最も一般的なディスプレイおよびCookieファイルを想定してください(ディストリビューションのほぼすべての標準デスクトップインストールで動作します)。
env DISPLAY=:0 XAUTHORITY=/home/whoever/.Xauthority /path/to/my/X/program
すでに実行中のXプログラムの環境からそれらを見つけてください。繰り返しますが、あなたがrootであるか、ログインしている同じユーザーである場合、これはあなたに知らせます(ユーザーがGNOMEを使用している場合):
cat /proc/`pgrep -f ^x-session-manager`/environ \
| Ruby -ne 'puts $_.split("\0").select { |e| e =~ /^(DISPLAY|XAUTHORITY)=/ }'