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'

Крім того, ви можете надсилати повідомлення на термінальні сесії одним із двох способів:

Використання wall(= попередження всіх [користувачів])

Із чоловічої сторінки:
Стіна відображає вміст файлу або, за замовчуванням, його стандартний вхід, на терміналах усіх користувачів, які зараз увійшли в систему.

Якщо ви хочете націлити на конкретного користувача, використовуйте write. І знову людина каже нам:

Утиліта запису дозволяє спілкуватися з іншими користувачами, копіюючи лінії зі свого терміналу на їхній.


Якщо одержувач ( user1на моєму прикладі) увійшов до X11, а не відкрив xtermчи інший термінал - також буде wallпрацювати? Я думаю, що user1повідомлення не побачить.
marioosh

Я оновив свою відповідь, щоб включити рішення "xmessage". Це покаже користувачеві невелике вікно, незалежно від того, чи є у них відкритий термінал.
mjk

1
Між іншим, "apropos" - корисна утиліта, яку слід знати; він шукає на сторінках вручну текст, який ви передаєте до нього. Спробуйте запустити "apropos message" і подивіться, що воно повертається.
mjk

Я знаю, xmessageале як запустити його user1і відкрити це маленьке вікно на user2екрані? це можливо навіть?
marioosh

@marioosh Я також хотів би знати, як це зробити. Ви коли-небудь з'ясували це?

2

Як правило, X11-сеанси зазвичай починаються в "приватному" режимі, тому вам потрібно одне з двох: або співпраця, user2щоб дозволити вам отримувати доступ до їх екранів, або права доступу супер-користувачів для "прориву" на їхні екрани.

НЕБЕЗПЕЧНО: Майте на увазі, щойно ви отримаєте доступ до їх екрану, ви також можете робити такі дії, як захоплення клавіш (можливо, включаючи паролі) та робити знімки екрана, тому це є великим ризиком для безпеки.

У більшості випадків бажано замість цього використовувати інструмент обміну повідомленнями або програму чату.

Застереження вбік:

Співпраця

Якщо user2хоче дозволити user1отримати доступ до їх екрану, то спочатку user2слід видати команду типу:

 xhost +si:localuser:user1

Це потенційно може бути додано до якогось сценарію запуску; Я не знаю Fluxbox, але я припускаю, що він має rcабо гачок для запуску сеансу.

Як тільки це буде використано, user1можна записувати на user2дисплей, якщо вони зможуть його знайти.

Якщо про user2це знають, вони завжди можуть надсилати це user1іншим чином.

Пошук дисплея іншого користувача

На типовій робочій станції незвично ввійти більше одного або двох користувачів; у такому випадку "здогадуючись", що потрібний дисплей дорівнює 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що? Я думаю, ваш сценарій зіпсований тут.
Стефан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.