[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 298.   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 file di dispositivo corrispondente al terminale utilizzato dall'utente destinatario.

La messaggistica istantanea è diventato un concetto importante, tanto da assumere un acronimo diffuso: «IM», ovvero Instant messaging.

298.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[Invio]

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 file di dispositivo.

Scrivere sul file di 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 di scrittura per il gruppo tty per il terminale che si sta utilizzando.

Per controllare il permesso di scrittura per il gruppo tty del dispositivo corrispondente al proprio terminale attivo, si può usare anche un programma molto semplice: mesg. (1)

mesg [y|n]

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.

Opzione Descrizione
y
Permette agli altri utenti di scrivere sul proprio terminale (aggiunge il permesso di scrittura al gruppo tty).
n
Impedisce agli altri utenti di scrivere sul proprio terminale (toglie il permesso di scrittura al gruppo tty).

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

Per scrivere sullo schermo di un altro utente collegato allo stesso elaboratore locale, si usano comunemente i programmi write (2) e wall: (3)

write utente [terminale] [< file_messaggio]

Il programma write rappresenta il sistema primordiale per 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]).

Dal momento che il programma write non è destinato all'invio di messaggi attraverso la rete, 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.

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.

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

chown root:tty /usr/bin/write[Invio]

chmod g+s /usr/bin/write[Invio]

chown root:tty /usr/bin/wall[Invio]

chmod g+s /usr/bin/wall[Invio]

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

298.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 (4)

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 dal supervisore dei servizi di rete 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 di scrittura per il gruppo tty.

in.talkd

Il demone in.talkd è gestito dal supervisore dei servizi di rete, che di solito ne controlla l'uso attraverso il filtro del TCP wrapper.

Nell'esempio seguente, viene mostrata la riga di /etc/inetd.conf in cui si dichiara il suo possibile utilizzo per quanto riguarda il caso particolare di Inetd:

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

Dal lato cliente, il programma talk permette di entrare in comunicazione con una persona che sta utilizzando un nodo all'interno della rete:

talk utente[@nodo] [terminale]

Il nome dell'utente può essere espresso identificando anche il nodo all'interno del quale è, o dovrebbe essere connesso: utente@nodo. 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.

Figura 298.5. Comunicazione attraverso talk.

[Connection established]
Io sto bene, grazie






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

Ciao caio, come stai?






                                                                       .

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.

Segue la descrizione di alcuni esempi.

Oltre al programma talk tradizionale, è disponibile comunemente anche ytalk (5) che consente la comunicazione tra più di due soli utenti:

ytalk [-x] utente...

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:

nome
un utente connesso presso lo stesso elaboratore locale;
nome@nodo
un utente connesso presso un altro elaboratore;
nome#terminale
un utente connesso presso lo stesso elaboratore locale attraverso un terminale determinato;
nome#terminale@nodo
un utente connesso presso un altro elaboratore, su un terminale determinato.

Durante la comunicazione, è possibile richiamare un menù 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).

298.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. (6) 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.

Rwall si compone in particolare di un demone, rpc.rwalld, oppure solo rwalld, che si avvia normalmente senza argomenti, di solito attraverso la procedura di inizializzazione del sistema, in modo indipendente dal supervisore dei servizi di rete.

Il programma cliente che serve per sfruttare il servizio è rwall, il quale si utilizza con la sintassi seguente:

rwall nodo_remoto [file]

rwall consente di inviare 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 di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) Sysvinit   GNU GPL

2) Write   UCB BSD

3) Wall   UCB BSD

4) Talk   UCB BSD

5) ytalk   software libero con licenza speciale

6) Rwall   UCB BSD


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome messaggi_sul_terminale.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!