X11 すべての DISPLAY の全ユーザーに通知を送信する

X11 すべての DISPLAY の全ユーザーに通知を送信する

重複の可能性:
実行中のすべてのXモニターに通知を表示する

ルートとして、リモートサーバーからユーザーにメッセージウィンドウを表示するコマンドを実行しようとしています。問題は、su - userなしですべてのユーザーに対して正しいDISPLAY値を取得する方法です(時間がかかりすぎるため)。多くのユーザーのための時間) か。

答え1

簡単に言えば、必要なものに対する解決策(TM)はありません。

ただし、設定を十分に理解すれば、自分に合ったソリューションを開発できます。一度同じ問題が発生しました。

これが難しいのは、Xserverがユーザーとまったく接続されていないためです。選択したデスクトップ環境にログインし、ターミナルを開き、と入力して、主要なLinuxディストリビューションでこれを確認できますps faux。これには(少なくとも)2つの子プロセス、つまりxserverとユーザーセッションに属するすべてのプロセスの親プロセスを持つディスプレイマネージャが表示されます。 xserverはrootで始まり、いいえあなたのセッションが属するユーザーとして。

特定のxserverをユーザー名と一致させるために私がすることは、過半数の投票をすることです。各ユーザープロセスを調べて、どのxserverに接続されているかを確認します。この知識に基づいて、特定のxserverに接続されているユーザーあたりのプロセス数を示すリストを作成しました。テーブルの例は次のとおりです。

      |xserver :1| xserver :2 | xserver :3 | xserver :4
-------------------------------------------------------------
alice |    17    |      0     |      0     |       0
bob   |     0    |      0     |     14     |       0
eve   |     0    |     34     |      1     |       0
foo   |     1    |      1     |      1     |       8

このテーブルを使用して単純な多数決投票を実行してマッピングを作成します。

  • ユーザーアリスはxserver:1を使用しています(つまり、前に座っています)。
  • ユーザーbobはxserver:3を使用しています。
  • ユーザーeveはxserver:2を使用しています。
  • ユーザー foo は xserver:4 を使用しています。

この多数の投票は必ずしも正しいマッピングを生成するわけではありませんが、すべての意図と目的のために私にとって十分です。

それはあなたが必要とするすべてです。今できる

DISPLAY=<ip.to.xserver>:1 xmessage -buttons yes,no,maybe -nearmouse "Do you want to go on a date with me?"

アリスにデートを申請してください。

マジックは、xapplicationsがどのxserverに接続する必要があるかを判断するために使用するDISPLAY環境変数です。ほとんどのxapplicationsもこのオプションを受け入れます-displayxmessageとのマニュアルページを参照してくださいX

もちろん、私の多数の表を置き換えることができる他の方法もたくさんあります。どれがあなたにとって最善かを自分で見つけなければなりません...

関連情報