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


100. 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.

100.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.

100.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 codice di EOF (che 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, pertanto 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 assoluto (`/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.

100.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.

100.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.

100.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'.

100.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

100.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@dinkel.brot.dg.
talk: respond with:  talk tizio@dinkel.brot.dg 

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 100.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).

100.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).

100.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.

100.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.

100.3.2 $ rwall

rwall <host-remoto> [<file>]

Invia un messaggio, eventualmente già preparato in un file, a tutti gli utenti di un nodo remoto determinato. 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 codice di EOF che di solito si ottiene premendo la combinazione [Ctrl+d].

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

Appunti Linux 2000.04.12 --- Copyright © 1997-2000 Daniele Giacomini --  daniele @ pluto.linux.it


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