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


10

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

回答:


15

この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。もう一度、男は私たちに言います:

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


受信者(user1私の例では)がX11にログインしていて、開いていなかっxtermたり、他の端末を開いていなかったりする場合- wall動作しますか?user1メッセージは表示されないと思います。
marioosh

「xmessage」ソリューションを含めるように回答を更新しました。端末が開いているかどうかに関係なく、ユーザーには小さなウィンドウが表示されます。
mjk

1
ちなみに、「apropos」は知っておくと便利なユーティリティです。それはあなたがそれに渡すテキストのためにマニュアルページを検索します。「該当するメッセージ」を実行して、何が返されるかを確認してください。
mjk

私は知ってxmessageいますが、それを実行してuser1、この小さなウィンドウをuser2画面に開く方法は?それも可能ですか?
marioosh '13

@marioosh私もその方法を知りたいです。あなたはそれを理解したことはありますか?

2

いずれかから、協力:あなたは2つのいずれかが必要ですので、原則として、X11セッションは通常、「プライベート」モードで起動されuser2、あなたはそれらの画面に「でブレーク」に自分の画面、またはスーパーユーザ権限にアクセスできるようにします。

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

では、ほとんどのケースではなく、これらのもののためのメッセージングツールやチャットプログラムを使用することが好ましいです。

脇に注意:

協力する

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

 xhost +si:localuser:user1

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

これが発行されたら、が表示できる場合はのディスプレイにuser1書き込むuser2ことができます。

これ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"

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


for subproc in何?ここではスクリプトが壊れていると思います。
ステファン・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.