Можно ли отправить сообщение (всплывающее окно или что-то) локальному пользователю, вошедшему в X (xdm, fluxbox) из консоли? Например: user1
зарегистрирован и использует X/fluxbox, user2
входит в тот же ящик с помощью ssh для консоли. Теперь - что нужно сделать пользователю user2
, чтобы отправить сообщение пользователю user1
?
2 ответа
Инструмент xmessage
позволяет вам делать именно это; представить всплывающее окно пользователям с текстовым сообщением внутри.
Пример: user2 входит в сессию BASH в окне и выдает:
export DISPLAY=':0.0'
xmessage "some message here"
если вы войдете в сеанс TSCH, это будет примерно так:
setenv DISPLAY ':0.0'
xmessage "some message here'
Кроме того, вы можете отправлять сообщения в терминальные сеансы одним из двух способов:
Использование wall
(= предупредить всех [пользователей])
Со страницы руководства:
Wall отображает содержимое файла или, по умолчанию, его стандартный ввод, на терминалах всех зарегистрированных пользователей.
Если вы хотите настроить таргетинг на конкретного пользователя, используйте write
. Опять человек говорит нам:
Утилита записи позволяет вам общаться с другими пользователями, копируя строки из вашего терминала в их.
Как правило, сеансы 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"
У него гораздо больше удобных для отображения параметров, и, вероятно, он появится на экране пользователя более дружелюбно.