Linux: ¿Cómo enviar un mensaje al usuario local conectado a X11?
10
¿Es posible enviar un mensaje (ventana emergente o algo así) al usuario local conectado a X (xdm, fluxbox) desde la consola? Por ejemplo: user1se registra y usa X / fluxbox, iniciando user2sesión en el mismo cuadro mediante ssh para la consola. Ahora, ¿qué user2tiene que hacer para enviar un mensaje user1?
Alternativamente, puede enviar mensajes a sesiones de terminal de una de dos maneras:
Usando wall(= advertir a todos [usuarios])
Desde la página de manual:
Wall muestra el contenido del archivo o, por defecto, su entrada estándar, en los terminales de todos los usuarios actualmente conectados.
Si desea apuntar a un usuario específico, use write. De nuevo, el hombre nos dice:
La utilidad de escritura le permite comunicarse con otros usuarios, copiando líneas de su terminal a las de ellos.
Si un destinatario ( user1en mi ejemplo) ha iniciado sesión en X11 y no ha abierto xtermu otro terminal, ¿ wallfuncionará también? Creo que user1eso no verá mensajes.
marioosh
Actualicé mi respuesta para incluir la solución 'xmessage'. Eso mostrará una pequeña ventana al usuario, independientemente de si tiene un terminal abierto.
mjk
1
Por cierto, 'a propósito' es una utilidad útil para saber; busca en las páginas del manual el texto que le pasa. Intente ejecutar 'mensaje a propósito' y vea qué devuelve.
mjk
No sé xmessagecómo ejecutarlo user1y abrir esta pequeña ventana en user2la pantalla. ¿Es posible?
marioosh
@marioosh También me gustaría saber cómo hacerlo. ¿Alguna vez lo resolviste?
2
Como regla general, las sesiones X11 generalmente se inician en un modo "privado", por lo que necesita una de dos cosas: cooperación, user2para permitirle acceder a sus pantallas, o privilegios de superusuario para "entrar" en sus pantallas.
PELIGRO: Tenga en cuenta que, una vez que tenga acceso a su pantalla, también puede hacer cosas como capturar pulsaciones de teclas (que pueden incluir contraseñas) y tomar capturas de pantalla, por lo que este es un gran riesgo de seguridad.
En la mayoría de los casos, es preferible utilizar una herramienta de mensajería o un programa de chat para estas cosas.
Advertencias a un lado:
Cooperando
Si user2quiere permitir el user1acceso a su pantalla, primero user2debe emitir un comando como:
xhost +si:localuser:user1
Esto podría agregarse potencialmente a un script de inicio de algún tipo; No conozco Fluxbox, pero supongo que tiene un rcenlace de inicio de sesión.
Una vez que esto se ha emitido, user1puede escribir en user2la pantalla, si pueden encontrarlo.
Si user2es consciente de esto, siempre pueden enviarlo de user1alguna otra manera.
Encontrar la pantalla de otro usuario
En una estación de trabajo típica, es inusual tener más de uno o dos usuarios conectados; en cuyo caso, "adivinar" que la pantalla que desea es 0, 1 o quizás 2 podría ser una solución viable.
Sin embargo, para una solución más completa, supongamos que tiene una máquina en la que pueden iniciar sesión muchos usuarios e intente encontrar la que desea.
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
entonces, user1finalmente puede (usando el valor DISPLAY obtenido anteriormente; acabo de escribir :14.0aquí ...)
DISPLAY=:14.0 xmessage "Hello, user2"
En vez de enviar una notificación
En aras de la integridad, lo siguiente funciona en el escritorio de Gnome, al menos. No sé si Fluxbox tiene un widget de notificación.
DISPLAY=:14.0 notify-send "Hello, user2"
Esto tiene muchas más opciones de visualización fáciles de usar, y probablemente aparecerá de una manera más amigable en la pantalla del usuario.
user1
en mi ejemplo) ha iniciado sesión en X11 y no ha abiertoxterm
u otro terminal, ¿wall
funcionará también? Creo queuser1
eso no verá mensajes.xmessage
cómo ejecutarlouser1
y abrir esta pequeña ventana enuser2
la pantalla. ¿Es posible?Como regla general, las sesiones X11 generalmente se inician en un modo "privado", por lo que necesita una de dos cosas: cooperación,
user2
para permitirle acceder a sus pantallas, o privilegios de superusuario para "entrar" en sus pantallas.PELIGRO: Tenga en cuenta que, una vez que tenga acceso a su pantalla, también puede hacer cosas como capturar pulsaciones de teclas (que pueden incluir contraseñas) y tomar capturas de pantalla, por lo que este es un gran riesgo de seguridad.
En la mayoría de los casos, es preferible utilizar una herramienta de mensajería o un programa de chat para estas cosas.
Advertencias a un lado:
Cooperando
Si
user2
quiere permitir eluser1
acceso a su pantalla, primerouser2
debe emitir un comando como:Esto podría agregarse potencialmente a un script de inicio de algún tipo; No conozco Fluxbox, pero supongo que tiene un
rc
enlace de inicio de sesión.Una vez que esto se ha emitido,
user1
puede escribir enuser2
la pantalla, si pueden encontrarlo.Si
user2
es consciente de esto, siempre pueden enviarlo deuser1
alguna otra manera.Encontrar la pantalla de otro usuario
En una estación de trabajo típica, es inusual tener más de uno o dos usuarios conectados; en cuyo caso, "adivinar" que la pantalla que desea es 0, 1 o quizás 2 podría ser una solución viable.
Sin embargo, para una solución más completa, supongamos que tiene una máquina en la que pueden iniciar sesión muchos usuarios e intente encontrar la que desea.
entonces,
user1
finalmente puede (usando el valor DISPLAY obtenido anteriormente; acabo de escribir:14.0
aquí ...)En vez de enviar una notificación
En aras de la integridad, lo siguiente funciona en el escritorio de Gnome, al menos. No sé si Fluxbox tiene un widget de notificación.
Esto tiene muchas más opciones de visualización fáciles de usar, y probablemente aparecerá de una manera más amigable en la pantalla del usuario.
fuente
for subproc in
¿Qué? Creo que tu guión está dañado aquí.