10

Можно ли отправить сообщение (всплывающее окно или что-то) локальному пользователю, вошедшему в X (xdm, fluxbox) из консоли? Например: user1 зарегистрирован и использует X/fluxbox, user2 входит в тот же ящик с помощью ssh для консоли. Теперь - что нужно сделать пользователю user2 , чтобы отправить сообщение пользователю user1 ?

2 ответа2

15

Инструмент xmessage позволяет вам делать именно это; представить всплывающее окно пользователям с текстовым сообщением внутри.

Пример: user2 входит в сессию BASH в окне и выдает:

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

если вы войдете в сеанс TSCH, это будет примерно так:

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

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

Использование wall (= предупредить всех [пользователей])

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

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

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

2

Как правило, сеансы X11 обычно запускаются в «закрытом» режиме, поэтому вам требуется одна из двух вещей: либо взаимодействие с user2 чтобы позволить вам получить доступ к их экранам, либо привилегии суперпользователя, чтобы «взломать» их экраны.

ОПАСНО: Имейте в виду, что, получив доступ к их экрану, вы также можете выполнять такие действия, как захват клавиш (возможно, включая пароли) и создание снимков экрана, так что это представляет серьезную угрозу безопасности.

В большинстве случаев для этих целей предпочтительнее использовать инструмент обмена сообщениями или программу чата.

Предостережения в сторону:

взаимодействующий

Если пользователь user2 хочет разрешить пользователю user1 доступ к своему экрану, то сначала пользователь user2 должен выполнить такую команду:

 xhost +si:localuser:user1

Это может быть потенциально добавлено в какой-либо скрипт запуска; Я не знаю Fluxbox, но я предполагаю, что у него есть хук rc или start-session.

После того, как это было issed, user1 может затем записать на дисплее user2 «s, если они могут найти.

Если пользователь 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"

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .