Linux: come inviare un messaggio all'utente locale connesso a X11?


10

È possibile inviare un messaggio (finestra popup o altro) all'utente locale connesso a X (xdm, fluxbox) dalla console? Ad esempio: user1è registrato e utilizza X / fluxbox, user2accedendo alla stessa casella da ssh alla console. Ora - cosa user2devo fare per inviare un messaggio user1?

Risposte:


15

Lo xmessagestrumento ti consente di fare esattamente questo; presentare una finestra popup agli utenti con un messaggio di testo all'interno.

Esempio: user2 accede a una sessione BASH sulla confezione e presenta:

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

se accedi a una sessione TSCH, sarebbe qualcosa del genere:

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

In alternativa, è possibile inviare messaggi alle sessioni del terminale in due modi:

Utilizzo di wall(= avvisa tutti [utenti])

Dalla pagina man:
Wall visualizza il contenuto del file o, per impostazione predefinita, il suo input standard, sui terminali di tutti gli utenti attualmente connessi.

Se desideri scegliere come target un utente specifico, utilizza write. Ancora una volta, l'uomo ci dice:

L'utilità di scrittura ti consente di comunicare con altri utenti, copiando le linee dal tuo terminale al loro.


Se un destinatario ( user1nel mio esempio) è connesso a X11 e non ha ancora aperto un xtermaltro terminale, wallfunzionerà anche? Penso che user1non vedrà i messaggi.
marioosh,

Ho aggiornato la mia risposta per includere la soluzione 'xmessage'. Ciò mostrerà una piccola finestra per l'utente, indipendentemente dal fatto che abbiano un terminale aperto.
mjk,

1
Per inciso, "a proposito" è un'utilità utile da conoscere; cerca nelle pagine del manuale il testo che gli viene passato. Prova a eseguire 'apropos message' e vedi cosa restituisce.
mjk,

Lo so xmessagema come eseguirlo user1e far aprire questa piccola finestra sullo user2schermo? è anche possibile?
marioosh,

@marioosh Vorrei anche sapere come farlo. L'hai mai capito?

2

Di norma, le sessioni X11 vengono in genere avviate in modalità "privata", quindi è necessario uno di questi due elementi: o la cooperazione user2per consentire l'accesso ai loro schermi o i privilegi di superutente per "accedere" ai loro schermi.

PERICOLO: tieni presente che, una volta che avrai accesso al loro schermo, potresti anche fare cose come catturare sequenze di tasti (potenzialmente includendo password) e acquisire schermate, quindi questo è un grosso rischio per la sicurezza.

Nella maggior parte dei casi è preferibile utilizzare uno strumento di messaggistica o un programma di chat per queste cose.

Avvertenze a parte:

cooperare

Se user2vuoi consentire user1l'accesso al loro schermo, user2devi prima emettere un comando come:

 xhost +si:localuser:user1

Questo potrebbe potenzialmente essere aggiunto a uno script di avvio di qualche tipo; Non conosco Fluxbox, ma presumo che abbia un rchook o di avvio della sessione.

Una volta che questo è stato emesso, user1può quindi scrivere sul user2display, se riesce a trovarlo.

Se user2è a conoscenza di ciò, possono sempre inviarlo user1in qualche altro modo.

Trovare il display di un altro utente

Su una tipica workstation, è insolito avere più di uno o due utenti connessi; nel qual caso, "indovinare" che il display desiderato è 0, 1 o forse 2 potrebbe essere una soluzione praticabile.

Tuttavia, per una soluzione più completa, supponiamo che tu abbia una macchina in cui molti utenti possano accedere e proviamo a trovare quello che desideri.

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

quindi, user1può finalmente (usando il valore DISPLAY ottenuto sopra; ho appena scritto :14.0qui ...)

DISPLAY=:14.0 xmessage "Hello, user2"

Invio di una notifica invece

Per motivi di completezza, almeno quanto segue funziona sul desktop di Gnome. Non so se Fluxbox ha un widget di notifica.

 DISPLAY=:14.0 notify-send "Hello, user2"

Questo ha molte più opzioni user-friendly per la visualizzazione e probabilmente apparirà in un modo piuttosto più amichevole sullo schermo dell'utente.


for subproc inche cosa? Penso che la tua sceneggiatura sia corrotta qui.
Stéphane,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.