¿Hay alguna manera de conectarse a un terminal en serie tal como lo haría con SSH? Debe haber una forma más simple que herramientas como Minicom, como esta
$ serial /dev/ttyS0
Sé que puedo obtener cat
la salida, /dev/ttyS0
pero solo es posible una comunicación de esa manera, desde el puerto hasta la consola. Y echo
salir al puerto es igual, pero al revés, al puerto.
¿Cómo puedo realizar una comunicación bidireccional con un puerto serie de la manera más simple posible en Unix / Linux?
command-line
terminal
tty
serial-port
serial-console
ihatetoregister
fuente
fuente
Respuestas:
Encuentro
screen
el programa más útil para la comunicación en serie ya que lo uso para otras cosas de todos modos. Por lo generalscreen /dev/ttyS0 <speed>
, es justo , aunque la configuración predeterminada puede ser diferente para su dispositivo. También le permite canalizar cualquier cosa en la sesión ingresando al modo de comando y haciendoexec !! <run some program that generates output>
.fuente
screen
es increíble, pero no creo que sea más simple queminicom
:-)Antecedentes
La razón principal por la que necesita algún programa como
minicom
para comunicarse a través de un puerto serie es que el puerto debe configurarse antes de iniciar una conexión. Si no se configurara adecuadamente, los comandoscat
yecho
no harían por usted lo que podría haber esperado. Tenga en cuenta que una vez que ejecuta un programa comominicom
, el puerto se queda con la configuración queminicom
utilizó. Puede consultar la configuración de comunicación utilizando elstty
programa de esta manera:Si lo has hecho bien; después de arrancar la computadora y antes de ejecutar cualquier otro programa como
minicom,
la configuración de comunicación estará en su configuración predeterminada. Probablemente sean diferentes de lo que necesitará para establecer su conexión. En esta situación, enviar los comandoscat
oecho
al puerto producirá basura o no funcionará en absoluto.Ejecuta
stty
nuevamente después de usarminicom
, y notarás que la configuración está configurada para lo que el programa estaba usando.Comunicación serial mínima
Básicamente, se necesitan dos cosas para tener una comunicación bidireccional a través de un puerto serie: 1) configurar el puerto serie y 2) abrir la lectura-escritura pseudo-tty.
El programa más básico que sé que hace esto es
picocom
. También puede usar una herramienta comosetserial
configurar el puerto y luego interactuar con él directamente desde el shell.fuente
picocom
también le permitirá conectarse a un puerto serie sin reconfigurarlo (--noinit
) y le permitirá salir sin restaurar la configuración del puerto serie (--noreset
o usarCtrl-A
/Ctrl-Q
para salirpicocom
). He encontradopicocom
que es mucho más fácil de usar queminicom
. Por razones que no he descubierto, minicom a veces simplemente no enviará ni recibirá datos en un puerto que funcionó momentos antes o con el que picocom no tiene problemas. Probablemente sea una opción de configuración arcana, pero sea lo que sea, no puedo entenderlo (y este comportamiento ha sucedido en más de una máquina).--omap crcrlf --echo
opcionesSi UUCP está instalado en el sistema, puede usar el comando cu , p. Ej.
fuente
~^D
o~.
para salir.Encontré una manera de usar un script de shell aquí que se coloca
cat
como un proceso en segundo plano y un ciclo while que lee la entrada del usuario yecho
la envía al puerto. Lo modifiqué para que fuera más general y se ajustaba perfectamente a mi propósito.fuente
$?
se expande al código de salida del último comando sin fondo (en este casostty -F $1 $2
), por lo que se expande a 0 cuando no hubo error. Por lo tanto, la última línea se conviertekill 0
en lo que a su vez parece matar al shell actual y a todos sus hijos (creo que se comporta de manera diferente en shells interactivos). Para todos los detalles, consulte la siguiente explicación: unix.stackexchange.com/questions/67532/…while
ciclo de manera limpia. Si lo matas con Ctrl + C o con elkill
comando, elcat
proceso se mantiene vivo. Para solucionarlo, necesitaría usar eltrap
comando para ejecutarkill $bgPid
cuando se cierra el shell, como lo hace mi script a continuación . Honestamente, ni siquiera me importaría si agregaras todo mi script a tu publicación. Traté de hacer eso, pero la edición fue rechazada.Prueba http://tio.github.io
"tio" es una aplicación de terminal TTY simple que presenta una interfaz de línea de comandos sencilla para conectarse fácilmente a dispositivos TTY para entrada / salida básica.
El uso típico es sin opciones. Por ejemplo:
Que corresponde a las opciones de uso común:
Viene con soporte completo de autocompletado de shell para todas las opciones.
fuente
msys2
en Windows y se puede instalartio
conpacman -S tio
porque es uno de los paquetes disponibles por defecto.screen
,picocom
etc. no lo son. ¡Gracias!Este script se basa en otra respuesta , pero envía todo a través del puerto serie (excepto Ctrl + Q), no solo comandos individuales seguidos de Enter. Esto le permite utilizar Ctrl + C o Ctrl + Z en el host remoto y utilizar programas interactivos "GUI" como aptitude o alsamixer. Puede salir presionando Ctrl + Q.
fuente
Por cierto, el paquete de masilla (que se ejecuta en Linux) incluye soporte en serie.
fuente
Otro problema que puede ocurrir es que su cuenta de usuario deba configurarse en el grupo de "marcado" para acceder al puerto serie.
fuente
Putty funciona bien en Linux y ofrece cierta comodidad, especialmente para las comunicaciones en serie. Tiene un inconveniente que no he podido resolver directamente: no copiar y pegar desde la ventana de Putty. La versión de Windows tiene una hermosa copia automática al portapapeles en el resaltado, haga clic derecho para pegar el comportamiento (y hay excelentes complementos tanto para Chrome como para Firefox para permitir el mismo comportamiento), pero en Linux, ninguna copia ama AFAIK.
Si la falta de copia es un problema (lo es para mí), active el inicio de sesión en masilla y abra una ventana de terminal estándar
# tail -f putty.log
y el texto bidireccional estará disponible para la acción de copypasta estándar.fuente
Como se mencionó anteriormente, puede probar picocom. La última versión (2.0) también se puede utilizar (de forma segura) para configurar un "servidor de terminal", ya que ya no permite la inyección de comandos de shell. Ver:
https://github.com/npat-efault/picocom/releases
fuente
Depende de lo que quieras hacer. ¿Desea ejecutar un shell o aplicación de manera interactiva desde el terminal, conectarse a otra computadora a través de la línea serie, automatizar la comunicación con un dispositivo a través de un puerto serie?
Si desea una comunicación bidireccional, supongo que desea algo interactivo con un humano en la terminal. Puede configurar el sistema para permitir inicios de sesión desde un terminal a través de un puerto serie configurando una sesión getty (1) en el puerto serie: getty es la herramienta para configurar un terminal y permitir inicios de sesión en él. Ponga una entrada en su archivo inittab (5) para ejecutarlo en el puerto serie apropiado de forma
respawn
específica.Si desea conectarse a un dispositivo e iniciar conversaciones bidireccionales automatizadas, puede ver si esperar le dará lo que desea. Use stty (1) para configurar el puerto con la paridad, velocidad de transmisión y otras configuraciones relevantes correctas.
Si desea comunicarse de forma interactiva con otra computadora a través del puerto serie, necesitará un software de emulación de terminal. Esto hace bastante: configura el puerto, interpreta ANSI u otras secuencias de comandos de terminal (ANSI estaba lejos de ser el único estándar compatible con terminales en serie). Muchos emuladores de terminal también admiten protocolos de transferencia de archivos como kermit o zmodem.
Los entresijos de las comunicaciones en serie y las E / S de terminal son bastante complejas; puede leer más de lo que siempre quiso saber sobre el tema en el tutorial en serie.
fuente
Es posible que desee echar un vistazo a
http://serialconsole.sourceforge.net
Pro: no tiene problemas de seguridad obvios como minicom o picocom (si no tiene un problema para dar acceso a la shell de los usuarios, no hay problema, pero lo más probable es que tenga uno si desea configurar un servidor de terminal ... )
fuente
Debe asegurarse de tener los permisos de lectura y escritura correctos en el dispositivo, puede verlo con:
Confío en el script que encontraste e hice algunas modificaciones.
Para los sistemas de desarrollo que he usado hasta ahora, solían necesitar:
Esos valores son los predeterminados en el script.
Entonces, para conectarse, puede usarlo de la siguiente manera:
Ejemplo:
Guión:
PD: necesita saber qué tipo de avance de línea está utilizando su sistema receptor ya que esto determinará cómo necesitará enviar los comandos en mi caso. Necesitaba un Windows como LF, lo que significa que necesito enviar
Valores ASCII para:
fuente
#!/bin/sh
se ignora si no es la primera línea del archivo. (2) ¿En serio? ¿Está utilizando1
para especificar paridad par y2
para especificar impar ? (3) Es convencional tener un mensaje de "uso" o "ayuda" que documente todos los parámetros, no solo los obligatorios. (4) Siempre se debe citar sus referencias a variables de shell (por ejemplo,"$1"
,"$2"
,"$3"
,"$4"
,"$stopb"
,"$par"
,"$bgPid"
, e incluso"$?"
e"$!"
) a menos que tenga una buena razón para no hacerlo, y está seguro de que sabes lo que estás haciendo.Como ya no se menciona aquí, también mencionaría
socat
: más información en https://stackoverflow.com/questions/2899180/how-can-i-use-com-and-usb-ports-within-cygwin :o
(sin embargo, tuve el problema de detenerlo una vez que comienza a ejecutarse, en MSYS2 en Windows)
fuente
Me pregunto por qué nadie mencionó ser2net .
Ejemplo
/etc/ser2net.conf
:Puede conectarse al puerto serie tan fácil como:
O remotamente:
O incluso configurar el reenvío de puertos en su enrutador y exponerlo a Internet, para que pueda conectarse desde cualquier lugar (omita los problemas de seguridad, estoy hablando de flexibilidad).
fuente
Otra opción fácil es acceder a la máquina a través de ssh con la
-X
bandera y ejecutar un programa como putty o gtkterm.Entonces:
Debe iniciar la interfaz gráfica en su PC cliente y desde allí puede acceder al puerto serie como si estuviera en el host.
Descargo de responsabilidad: solo intenté esto con máquinas ubuntu. Supongo que no funcionará con máquinas sin interfaces gráficas.
Del manual ssh:
Así que úsala
-Y
si la seguridad es un problema.fuente