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(= предупредить всех [пользователей])

Со страницы man:
Wall отображает содержимое файла или, по умолчанию, его стандартный ввод на терминалах всех пользователей, которые в данный момент вошли в систему.

Если вы хотите настроить таргетинг на конкретного пользователя, используйте write. Опять человек говорит нам:

Утилита записи позволяет вам общаться с другими пользователями, копируя строки из вашего терминала в их.


Если получатель ( user1в моем примере) вошел в X11 и не открыл xtermили другой терминал - wallтоже будет работать? Я думаю, что user1не будет видеть сообщения.
Мариоуш

Я обновил свой ответ, чтобы включить решение «xmessage». Это покажет пользователю небольшое окно, независимо от того, открыт ли у него терминал.
MJK

1
Кстати, «кстати» - полезная утилита, которую нужно знать; он ищет в справочных страницах текст, который вы ему передаете. Попробуйте запустить 'apropos message' и посмотрите, что оно вернет.
MJK

Я знаю, xmessageно как запустить его user1и открыть это маленькое окно на user2экране? это вообще возможно?
Мариоуш

@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.