Linux: Bagaimana cara mengirim pesan ke pengguna lokal yang masuk ke X11?

10

Apakah mungkin untuk mengirim pesan (jendela sembulan atau sesuatu) ke pengguna lokal yang masuk ke X (xdm, fluxbox) dari konsol? Sebagai contoh: user1dicatat dan menggunakan X / fluxbox, user2masuk ke kotak yang sama dengan ssh ke konsol. Sekarang - apa yang user2harus dilakukan untuk mengirim pesan user1?

marioosh
sumber

Jawaban:

15

The xmessagealat memungkinkan Anda melakukan hal itu; menyajikan jendela sembulan kepada pengguna dengan pesan teks di dalamnya.

Contoh: user2 masuk ke sesi BASH pada kotak dan masalah:

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

jika Anda masuk ke sesi TSCH, itu akan menjadi seperti ini:

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

Atau, Anda dapat mengirim pesan ke sesi terminal dengan salah satu dari dua cara:

Menggunakan wall(= memperingatkan semua [pengguna])

Dari halaman manual:
Wall menampilkan konten file atau, secara default, input standarnya, pada terminal semua pengguna yang saat ini masuk.

Jika Anda ingin menargetkan pengguna tertentu, gunakan write. Sekali lagi, manusia memberi tahu kita:

Utilitas tulis memungkinkan Anda untuk berkomunikasi dengan pengguna lain, dengan menyalin garis dari terminal Anda ke mereka.

mjk
sumber
Jika penerima ( user1dalam contoh saya) masuk ke X11, dan belum membuka xtermatau terminal lain - apakah akan wallberfungsi juga? Saya pikir itu user1tidak akan melihat pesan.
marioosh
Saya memperbarui jawaban saya untuk memasukkan solusi 'xmessage'. Itu akan menunjukkan jendela kecil kepada pengguna, terlepas dari apakah mereka memiliki terminal terbuka.
mjk
1
Secara kebetulan, 'apropos' adalah utilitas yang berguna untuk diketahui; itu mencari halaman manual untuk teks yang Anda berikan padanya. Coba jalankan 'pesan yang tepat' dan lihat apa yang dikembalikan.
mjk
Saya tahu xmessagetetapi bagaimana menjalankannya user1dan membuka jendela kecil ini user2di layar? apakah itu mungkin?
marioosh
@ marioosh Saya juga ingin tahu bagaimana melakukannya. Apakah Anda pernah mendapatkannya?
2

Sebagai aturan, sesi X11 biasanya dimulai dalam mode "pribadi", jadi Anda memerlukan salah satu dari dua hal: entah, kerjasama dari user2untuk memungkinkan Anda mengakses layar mereka, atau hak pengguna super untuk "menerobos" ke layar mereka.

BERBAHAYA: Perlu diingat, setelah Anda memiliki akses ke layar mereka, Anda juga bisa melakukan hal-hal seperti menangkap penekanan tombol (berpotensi termasuk kata sandi) dan mengambil tangkapan layar, jadi ini adalah risiko keamanan yang besar.

Dalam kebanyakan kasus, lebih baik menggunakan alat pesan atau program obrolan untuk hal-hal ini.

Peringatan:

Coöperating

Jika user2ingin mengizinkan user1untuk mengakses layar mereka, maka pertama user2- tama harus mengeluarkan perintah seperti:

 xhost +si:localuser:user1

Ini berpotensi ditambahkan ke skrip start-up semacam; Saya tidak tahu Fluxbox, tapi saya berasumsi itu memiliki rcatau memulai sesi hook.

Setelah ini dikeluarkan, user1kemudian dapat menulis ke user2tampilan, jika mereka dapat menemukannya.

Jika user2mengetahui hal ini, mereka selalu dapat mengirimkannya dengan user1cara lain.

Menemukan Tampilan pengguna lain

Pada workstation tipikal, tidak biasa memiliki lebih dari satu atau dua pengguna masuk; dalam hal ini, "menebak" bahwa tampilan yang Anda inginkan adalah 0, 1, atau mungkin 2 mungkin merupakan solusi yang bisa diterapkan.

Namun, untuk solusi yang lebih lengkap, mari kita asumsikan bahwa Anda memiliki mesin di mana sangat banyak pengguna dapat masuk, dan mencoba untuk menemukan yang Anda inginkan.

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

kemudian, user1akhirnya (menggunakan nilai DISPLAY yang diperoleh di atas; Saya baru saja menulis di :14.0sini ...)

DISPLAY=:14.0 xmessage "Hello, user2"

Sebaliknya, Mengirim Pemberitahuan

Demi kelengkapan, berikut ini berfungsi di desktop Gnome, setidaknya. Saya tidak tahu apakah Fluxbox memiliki widget pemberitahuan.

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

Ini memiliki lebih banyak opsi yang ramah pengguna untuk tampilan, dan mungkin akan muncul dengan cara yang lebih ramah di layar pengguna.

BRPocock
sumber
for subproc inapa? Saya pikir skrip Anda rusak di sini.
Stéphane