it-swarm-ja.com

Linux:X11にログインしたローカルユーザーにメッセージを送信する方法

コンソールからX(xdm、fluxbox)にログインしているローカルユーザーにメッセージ(ポップアップウィンドウなど)を送信できますか?例:user1がログに記録され、X/fluxboxを使用して、user2がコンソールにsshで同じボックスにログインします。さて、user2にメッセージを送信するためにuser1は何をしなければなりませんか?

10
marioosh

xmessageツールを使用すると、まさにそれを実行できます。内部にテキストメッセージを表示してポップアップウィンドウをユーザーに表示します。

例:user2がボックスのBASHセッションにログインして発行します。

export DISPLAY=':0.0'
xmessage "some message here"

tSCHセッションにログインすると、次のようになります。

setenv DISPLAY ':0.0'
xmessage "some message here'

または、次の2つの方法のいずれかで端末セッションにメッセージを送信できます。

wallを使用(=すべての[ユーザー]に警告)

Manページから:
Wallは、現在ログインしているすべてのユーザーの端末に、ファイルの内容またはデフォルトでその標準入力を表示します。

特定のユーザーをターゲットにする場合は、writeを使用します。もう一度、男は私たちに言います:

書き込みユーティリティを使用すると、端末から行をコピーして、他のユーザーと通信できます。

15
mjk

原則として、X11セッションは通常「プライベート」モードで開始されるため、画面にアクセスできるようにするためのuser2からの連携、またはスーパーユーザー権限での「侵入」のいずれかが必要です。彼らのスクリーン。

危険:画面にアクセスできるようになったら、キーストロークのキャプチャ(パスワードを含む可能性があります)やスクリーンショットを撮ることもできるので、これは大きなセキュリティリスクです。

mostの場合、代わりにメッセージングツールまたはチャットプログラムを使用することをお勧めします。

脇に警告:

連携

user2user1に自分の画面へのアクセスを許可する場合は、最初にuser2が次のようなコマンドを発行する必要があります。

 xhost +si:localuser:user1

これは、ある種の起動スクリプトに追加される可能性があります。 Fluxboxはわかりませんが、rcまたはセッション開始フックがあると思います。

これが発行されると、user1user2のディスプレイに書き込むことができます。

user2がこれを認識している場合、他の方法でいつでもuser1に送信できます。

他のユーザーのディスプレイを見つける

一般的なワークステーションでは、1人または2人以上のユーザーがログインすることはまれです。その場合、必要な表示が0、1、またはおそらく2であると「推測」することは、実行可能な解決策になる可能性があります。

ただし、より完全なソリューションとして、非常に多くのユーザーがサインインできるマシンがあると想定し、必要なものを見つけようとします。

for proc in /proc/[0-9]*/
do
     if [ Xorg = $(< $proc/comm ) ] 2>/dev/null && \
        [ $(id -u user2) -eq $(< $proc/loginuid) ] 2>/dev/null
     then
        for subproc in $(
        do
            echo "user2 display=" $(Perl -ne 'if (m,DISPLAY=(.*)\0,) { print $1 }' < $subproc/environ)
        done
     fi
done

次に、最終的にuser1ができます(上記で取得したDISPLAY値を使用。ここに:14.0を記述したところです…)

DISPLAY=:14.0 xmessage "Hello, user2"

代わりに通知を送信する

完全を期すために、少なくとも以下はGnomeデスクトップで動作します。 Fluxboxに通知ウィジェットがあるかどうかわかりません。

 DISPLAY=:14.0 notify-send "Hello, user2"

これには表示のためのより多くのユーザーフレンドリーなオプションがあり、おそらくユーザーの画面にかなり親しみやすい方法でポップアップします。

2
BRPocock