[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]

89. Messaggi sul terminale

Il modo normale di inviare un messaggio a una persona è quello di utilizzare la posta elettronica. In alternativa, quando si desidera aprire una comunicazione istantanea, può essere conveniente l'uso di programmi come talk, ammesso che il sistema di destinazione sia predisposto per questo.

Il tipo di comunicazione che utilizza programmi come talk e simili, parte dal presupposto che si possa «scrivere» sul dispositivo corrispondente al terminale utilizzato dall'utente destinatario.

89.1 Accesso al proprio terminale

Quando si accede normalmente attraverso un terminale a caratteri, il dispositivo corrispondente dovrebbe appartenere all'utente che lo sta utilizzando e anche al gruppo tty. Ciò dovrebbe avvenire automaticamente per opera del programma login. Nel caso dell'utente tizio che sta utilizzando la seconda console virtuale, si dovrebbero osservare le caratteristiche seguenti.

ls -l /dev/tty2

crw--w----   1 tizio    tty        4,   2 dic 31 10:38 /dev/tty2

L'utente che utilizza il terminale dovrebbe avere i permessi di lettura e scrittura, inoltre, dovrebbe essere concesso al gruppo il permesso di scrittura. Con questa convenzione, un programma che sia stato avviato con i privilegi del gruppo tty avrebbe la possibilità di scrivere su questo dispositivo.

Scrivere sul dispositivo di un terminale significa andare a pasticciare lo schermo su cui sta lavorando presumibilmente un utente. Esistendo questa possibilità, cioè che processi estranei possano aggiungere informazioni allo schermo del terminale che si sta utilizzando, la maggior parte degli applicativi prevede un comando che riscrive il contenuto dello schermo (di solito si tratta della combinazione di tasti [Ctrl+l]). Tuttavia, gli utenti potrebbero desiderare di limitare questa possibilità, eliminando il permesso in scrittura per il gruppo tty per il terminale che si sta utilizzando.

89.1.1 $ write

write <utente> [<terminale>]

Il programma write rappresenta il sistema primordiale di inviare un messaggio a un altro utente che utilizza un terminale dello stesso sistema locale. Il messaggio viene atteso dallo standard input e viene scritto nel dispositivo dell'utente destinatario quando questo viene concluso con un carattere <EOF> (di solito si ottiene con la combinazione [Ctrl+d]).

Per poter scrivere sul dispositivo dell'utente destinatario, write, secondo le convenzioni, deve avere i privilegi del gruppo tty, e per questo viene installato comunemente con il bit SGID attivato.

chmod g+s /usr/bin/write

write non è un programma destinato all'invio di messaggi attraverso la rete, e per questo il nome dell'utente va indicato in modo semplice, senza specificare il nodo. Il dispositivo del terminale può essere specificato, e in tal caso si può indicare il percorso completo (/dev/tty*) oppure solo il nome finale. Se il terminale non viene specificato, write cerca di determinarlo da solo.

Dal momento che quando si invia un messaggio, si presume che il proprio corrispondente voglia rispondere, write non invia il messaggio se il proprio terminale non ammette la risposta, cioè se i permessi del proprio dispositivo non lo consentono.

89.1.2 $ wall

wall <messaggio>

wall < <file-messaggio>

Il programma wall è una variante di write, dove il messaggio viene inviato a tutti i terminali attivi. Il messaggio può essere fornito anche attraverso la riga di comando. Valgono le stesse considerazioni fatte già per write, soprattutto per quello che riguarda il problema dei permessi su file di dispositivo dei terminali.

89.1.3 $ mesg

mesg [<opzione>]

Controlla l'accesso da parte di altri utenti al proprio terminale. In pratica controlla il permesso in scrittura per il gruppo tty del dispositivo corrispondente al terminale utilizzato. Viene usato di solito per impedire o permettere di ricevere messaggi attraverso programmi come write, wall, rwall, talk e simili.

Il fatto di togliere il permesso di scrittura per il gruppo tty al dispositivo del terminale, non è una garanzia che nessuno possa scriverci. Un processo con i privilegi dell'utente root potrebbe farlo ugualmente. Tuttavia, si tratta di una convenzione che generalmente viene rispettata.

Opzioni

y

Permette agli altri utenti di scrivere sul proprio terminale (aggiunge il permesso in scrittura al gruppo tty).

n

Impedisce agli altri utenti di scrivere sul proprio terminale (toglie il permesso in scrittura al gruppo tty).

<non definito>

Se l'opzione non viene specificata, si ottiene la visualizzazione dello stato attuale.

89.2 Comunicazione diretta attraverso la rete

Per entrare in comunicazione diretta con un utente che sta utilizzando un terminale o una console di un certo nodo raggiungibile attraverso la rete, si può utilizzare il servizio talk gestito attraverso il demone talkd

In tal caso, è il demone talkd (o meglio, in.talkd) del nodo destinatario, che si occupa di scrivere sul dispositivo del terminale. Generalmente, questo programma viene avviato da inetd con i privilegi dell'utente root, cosa che gli permetterebbe di scavalcare qualunque limitazione di accesso ai dispositivi di terminale. Tuttavia, è il demone stesso che cerca di rispettare le convenzioni, evitando di scrivere se manca il permesso in scrittura per il gruppo tty.

89.2.1 # talkd

in.talkd

Consente l'instaurarsi di una connessione diretta tra due utenti, attraverso il protocollo talk. È gestito dal supervisore inetd e filtrato da tcpd.

Nell'esempio seguente, viene mostrata la riga di /etc/inetd.conf in cui si dichiara il suo possibile utilizzo.

talk	dgram	udp	wait	root	/usr/sbin/tcpd	in.talkd

89.2.2 $ talk

talk <utente>[@<host>] [<terminale>]

Permette di entrare in comunicazione con una persona che sta utilizzando un nodo all'interno della rete. Il nome dell'utente può essere espresso identificando anche il nodo all'interno del quale è, o dovrebbe essere connesso: <utente>@<host>. Se l'utente con cui si vuole comunicare è connesso su più terminali all'interno dello stesso nodo, è possibile specificare il nome del terminale nella forma ttyxx. Quando si è chiamati attraverso talk, sullo schermo del terminale appare un messaggio simile a quello seguente:

Message from Talk_Daemon@localhost at 11:31 ...
talk: connection requested by tizio@localhost.
talk: respond with:  talk tizio@localhost 

In questo caso, si tratta dell'utente tizio che cerca di contattarci; nel messaggio viene suggerito anche il modo corretto di rispondere. Evidentemente, l'utente che vuole rispondere deve sospendere la propria attività, per avviare a sua volta una copia del programma talk.

Quando la comunicazione si instaura, viene utilizzato uno schermo suddiviso in due finestre per distinguere i messaggi: nella parte superiore si vedono quelli inviati, mentre nella parte inferiore appaiono quelli ricevuti.

[Connection established]
Io sto bene, grazie






|----------------------------------------------------------------------|

Ciao caio, come stai?







Figura 89.1: Comunicazione attraverso talk.

Durante la comunicazione, lo schermo può essere riscritto utilizzando la combinazione [Ctrl+l]. La comunicazione può essere terminata da uno qualunque dei due interlocutori utilizzando il carattere di interruzione che di norma è [Ctrl+c].

Secondo le convenzioni, la chiamata attraverso talk può essere impedita utilizzando il programma mesg, ovvero togliendo il permesso di scrittura al gruppo tty del dispositivo del proprio terminale.

Esempi

talk tizio

Cerca di contattare l'utente tizio nello stesso sistema locale.

talk tizio@dinkel.brot.dg

Cerca di contattare l'utente tizio presso dinkel.brot.dg.

talk tizio@dinkel.brot.dg tty2

Cerca di contattare l'utente tizio presso dinkel.brot.dg, al terminale tty2 (si tratta probabilmente della seconda console virtuale).

89.2.3 $ ytalk

ytalk [-x] <utente>...

Si tratta di un sistema di comunicazione tra due o più utenti. Il suo funzionamento è simile a talk e può anche comunicare con utenti che usano lo stesso talk. L'utente può essere specificato in diversi modi:

Durante la comunicazione, è possibile richiamare un menu di funzioni premendo il tasto [Esc].

ytalk è più complesso rispetto al solito talk, tanto che è previsto l'uso di file di configurazione: /etc/ytalkrc per le impostazioni generali e ~/.ytalkrc per la personalizzazione da parte di ogni utente.

Eventualmente si possono approfondire le altre caratteristiche consultando la sua pagina di manuale: ytalk(1).

89.3 Invio di un messaggio circolare

Se quello che si desidera è l'invio di un messaggio circolare senza la necessità di avere un colloquio con gli utenti destinatari, si può usare rwall. Il sistema si basa sulle RPC, di conseguenza, è necessario che i nodi destinatari di questo messaggio abbiano in funzione il portmapper, oltre al demone particolare che si occupa di questo.

89.3.1 # rpc.rwalld

rpc.rwalld

rpc.rwalld è il demone del servizio rwall. Per attivarlo è normalmente necessario avviarlo in maniera indipendente da inetd, attraverso la procedura di inizializzazione del sistema.

89.3.2 $ rwall

rwall <host-remoto> [<file>]

Invia un messaggio, eventualmente già preparato in un file, a tutti gli utenti di un determinato nodo remoto. Se non viene fornito il nome di un file contenente il messaggio da inviare, questo messaggio può essere inserito attraverso la tastiera del terminale da cui si avvia il programma. Per terminare l'inserimento si utilizza il carattere <EOF> che di solito si ottiene premendo la combinazione [Ctrl+d].

---------------------------

Appunti Linux 1999.09.21 --- Copyright © 1997-1999 Daniele Giacomini --  daniele @ pluto.linux.it


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]