Console seriale su Mac con screen e /dev/tty.usbserial

Collega l'adattatore USB seriale ed esegui ls /dev/cu.* per trovare la sua porta, per esempio /dev/cu.usbserial-1420. Poi esegui screen /dev/cu.usbserial-1420 9600 con la velocità dell'apparato, spesso 9600 o 115200, e premi Invio. Per uscire da screen premi Ctrl-A, poi K, poi Y.

Aggiornata il . Eseguito su macOS 27 con screen 4.00.03 e cu inclusi nel sistema: porte elencate con ls /dev/cu.*, screen aperto in background su una porta interna con opzioni stty, elencato e chiuso con screen -X quit, e cu lanciato senza sudo per vedere l'errore del lock.

Trovare la porta seriale

Un adattatore USB seriale compare come due file in /dev. Elencali prima e dopo averlo collegato: il nome nuovo è la tua porta.

ls /dev/cu.*
/dev/cu.Bluetooth-Incoming-Port
/dev/cu.debug-console
/dev/cu.usbserial-1420

I nomi tipici sono cu.usbserial-XXXX per gli adattatori FTDI e Prolific e cu.usbmodemXXXX per le schede che si presentano come modem USB, come molte schede a microcontrollore. Il numero cambia con la presa USB che usi.

Ogni porta ha anche un gemello /dev/tty.*. Usa quello cu. Il dispositivo tty serve per le chiamate in arrivo e aspetta un segnale di portante che un cavo console invia di rado, quindi la sessione può restare bloccata senza output.

Se non compare nessuna porta nuova, controlla che macOS veda l'adattatore:

ioreg -p IOUSB

Se è nell'elenco ma non ha una porta, il chip ha bisogno di un driver del suo produttore. Se non è nell'elenco, prova un altro cavo: alcuni cavi USB portano solo corrente.

Collegarsi con screen

screen è incluso in macOS ed è il terminale seriale più rapido. Dagli la porta e la velocità:

screen /dev/cu.usbserial-1420 9600

Lo schermo diventa vuoto. È normale: una console non stampa nulla finché non le mandi qualcosa, quindi premi Invio e appare il prompt. Dopo la velocità puoi aggiungere le impostazioni di linea, nello stile di stty, separate da virgole:

screen /dev/cu.usbserial-1420 115200,cs8,-ixon,-ixoff

Qui cs8 vuol dire 8 bit di dati, e -ixon,-ixoff spengono il controllo di flusso software.

Per uscire da screen premi Ctrl-A, poi K, poi Y. Ctrl-A e poi D stacca soltanto: la sessione resta attiva e tiene la porta. Per trovare e chiudere una sessione staccata:

screen -ls
screen -r
screen -X -S 98339 quit

Per tenere una copia di tutto ciò che l'apparato stampa, avvia screen con -L. Scrive un file chiamato screenlog.0 nella cartella corrente.

Collegarsi con cu

cu è l'altro strumento incluso. Sul Mac serve sudo, perché scrive un file di lock in /var/spool/uucp. Senza, cu si ferma con Line in use anche quando la porta è libera. È proprio quello che è successo nella nostra prova.

sudo cu -l /dev/cu.usbserial-1420 -s 9600

Per uscire da cu scrivi ~. all'inizio di una riga, cioè Invio, poi tilde, poi punto. Se sei collegato al Mac via SSH, ssh intercetta prima la stessa sequenza, quindi scrivi ~~.. La guida alle sequenze di escape SSH spiega perché.

Velocità, parità e controllo di flusso

I due lati devono usare le stesse impostazioni, altrimenti ottieni caratteri a caso o niente. La notazione abituale è la velocità più 8N1: 8 bit di dati, nessuna parità, 1 bit di stop.

ApparatoImpostazione comune
Switch, router, firewall9600 8N1, senza controllo di flusso
Raspberry Pi, quasi tutte le schede Linux115200 8N1, senza controllo di flusso
Schede a microcontrolloreQuella impostata dal firmware, spesso 115200 o 9600
Vecchi modem e alcuni apparati industrialiPossono usare 7E1 (7 bit di dati, parità pari) o RTS/CTS

Come riconoscere un'impostazione sbagliata: simboli a caso indicano la velocità sbagliata; testo con qualche carattere errato fa pensare a parità o bit di dati; output che si ferma dopo una schermata fa pensare al controllo di flusso. Per vedere come è impostata la porta in questo momento:

stty -f /dev/cu.usbserial-1420

Sul Raspberry Pi la console seriale va anche attivata prima nel sistema. La guida SSH per Raspberry Pi copre la strada di rete, una volta che la console ha fatto il suo lavoro.

Problemi comuni

  • Resource busy o Line in use. Un altro programma tiene la porta, spesso uno screen staccato. Trovalo con lsof /dev/cu.usbserial-1420 e chiudilo, oppure esegui screen -ls.
  • Schermo vuoto. Premi Invio. Se ancora niente, controlla la velocità, poi se per quell'apparato serve un cavo null modem (incrociato) o un cavo console rollover.
  • Righe che scendono a scalini, o nessun a capo. L'apparato gestisce CR e LF in modo diverso. Molte console vogliono solo CR quando premi Invio.
  • Frecce o menu a schermo intero sbagliati. Imposta TERM sull'apparato in modo coerente, vedi unknown terminal type.

screen o un terminale seriale dedicato

screen e cu bastano per un controllo veloce. Un terminale seriale per Mac dedicato aiuta quando torni spesso sugli stessi apparati: ricorda porta e impostazioni di linea per ogni apparato, ti elenca le porte e regge un cavo che si stacca. In ogni caso, quando l'apparato è in rete, passa a SSH per il lavoro di tutti i giorni.

Domande

Su Mac devo usare /dev/tty.usbserial o /dev/cu.usbserial?

Usa /dev/cu. Il dispositivo tty aspetta un segnale di portante che quasi nessun cavo console invia, quindi screen può restare fermo senza mostrare nulla. Il dispositivo cu si apre subito.

Come si esce da screen su una porta seriale?

Premi Ctrl-A, poi K, e rispondi Y. Se chiudi invece la finestra del Terminale, screen può restare attivo in background e tenere la porta, che poi risponde Resource busy.

Perché la console seriale mostra caratteri strani?

La velocità è sbagliata. Chiudi la sessione e prova le altre velocità comuni, prima 9600 e 115200, poi 19200, 38400 e 57600.

Il Mac ha bisogno di un driver per un adattatore USB seriale?

Le versioni recenti di macOS includono i driver dei chip più diffusi. Se l'adattatore compare in ioreg -p IOUSB ma non appare nessuna porta /dev/cu., installa il driver del produttore del chip.

Fonti

Altro in SSH su ogni sistema

Tutte le guide