Existe-t-il un moyen de se connecter à un terminal série comme vous le feriez avec SSH? Il doit y avoir un moyen plus simple que des outils tels que Minicom, comme celui-ci
$ serial /dev/ttyS0
Je sais que je peux obtenir cat
la sortie, /dev/ttyS0
mais une communication à sens unique est ainsi possible, du port à la console. Et echo
au port, c'est pareil, mais dans le sens inverse, au port.
Comment réaliser une communication bidirectionnelle avec un port série de la manière la plus simple possible sous Unix / Linux?
command-line
terminal
tty
serial-port
serial-console
ihatetorgister
la source
la source
Réponses:
Je trouve
screen
le programme le plus utile pour la communication série puisque je l’utilise de toute façon pour d’autres tâches. C'est généralement justescreen /dev/ttyS0 <speed>
, même si les paramètres par défaut peuvent être différents pour votre appareil. Il vous permet également de canaliser n'importe quoi dans la session en entrant en mode commande et en faisantexec !! <run some program that generates output>
.la source
screen
est génial, mais je ne pense pas plus simple queminicom
:-)Contexte
La principale raison pour laquelle tout programme souhaitant
minicom
communiquer via un port série est nécessaire, c’est que le port doit être configuré avant d’établir une connexion. S'il n'était pas configuré correctement, les commandescat
etecho
ne feraient pas pour vous ce à quoi vous vous attendiez. Notez qu’une fois que vous exécutez un programmeminicom
, le port reste avec les paramètresminicom
utilisés. Vous pouvez interroger les paramètres de communication en utilisant lestty
programme comme ceci:Si vous l'avez bien fait; après le démarrage de l'ordinateur et avant d'exécuter tout autre programme tel que
minicom,
les paramètres de communication seront leurs paramètres par défaut. Celles-ci sont probablement différentes de celles dont vous aurez besoin pour établir votre connexion. Dans cette situation, l'envoi des commandescat
ouecho
au port produira des déchets ou ne fonctionnera pas du tout.Exécuter à
stty
nouveau après l' utilisationminicom
, et vous remarquerez les paramètres sont définis à ce que le programme utilisait.Communication série minimale
Une communication bidirectionnelle à travers un port série nécessite essentiellement deux choses: 1) configurer le port série et 2) ouvrir le pseudo-tty en lecture-écriture.
Le programme le plus fondamental que je connaisse est le suivant
picocom
. Vous pouvez également utiliser un outil commesetserial
configurer le port, puis interagir directement avec celui-ci à partir du shell.la source
picocom
vous permettra également de vous connecter à un port série sans le reconfigurer (--noinit
) et vous permettra de quitter sans restaurer la configuration du port série (--noreset
ou d'utiliserCtrl-A
/Ctrl-Q
pour quitterpicocom
). J'ai trouvépicocom
être beaucoup plus facile à utiliser queminicom
. Pour des raisons que je n'ai pas comprises, minicom n'enverra parfois ni n'enverra de données sur un port qui a déjà fonctionné quelques instants auparavant ou pour lequel picocom n'a aucun problème. C'est probablement une option de configuration mystérieuse, mais peu importe ce que je ne peux pas comprendre (et ce problème est survenu sur plus d'une machine).--omap crcrlf --echo
optionsSi UUCP est installé sur le système, vous pouvez utiliser la commande cu , par exemple
la source
~^D
ou~.
pour sortir.J'ai trouvé un moyen utilisant un script shell ici qui a mis
cat
comme un processus d'arrière - plan et une boucle while qui a lu l'entrée d'utilisateur etecho
hors du port. Je l'ai modifié pour qu'il soit plus général et qu'il répondait parfaitement à mes besoins.la source
$?
se développe en code de sortie de la dernière commande autre que d'arrière-plan (dans ce casstty -F $1 $2
), ainsi il se développe à 0 lorsqu'il n'y a pas d'erreur. Ainsi, la dernière ligne devientkill 0
ce qui semble à son tour tuer le shell actuel et tous ses enfants (il se comporte différemment dans les shells interactifs, je crois). Pour tous les détails, voir l'explication suivante: unix.stackexchange.com/questions/67532/…while
boucle proprement. Si vous le tuez avec Ctrl + C ou avec lakill
commande, lecat
processus reste actif. Pour résoudre ce problème, vous devez utiliser latrap
commande à exécuterkill $bgPid
lorsque le shell se ferme, comme le fait mon script ci-dessous . Honnêtement, cela ne me dérangerait même pas que vous ajoutiez mon script entier à votre message. J'ai essayé de le faire, mais le montage a été rejeté.Essayez http://tio.github.io
"tio" est une simple application de terminal TTY dotée d'une interface de ligne de commande simple permettant de se connecter facilement à des périphériques TTY pour une entrée / sortie de base.
L'utilisation typique est sans options. Par exemple:
Ce qui correspond aux options couramment utilisées:
Il est livré avec un support complet d'auto-complétion du shell pour toutes les options.
la source
msys2
sous Windows et vous pouvez l' installertio
avec ,pacman -S tio
car il est parmi les paquets disponibles par défaut.screen
,picocom
etc. ne sont pas. Merci!Ce script est basé sur une autre réponse , mais envoie tout via le port série (sauf Ctrl + Q), pas seulement les commandes simples suivies de Enter. Cela vous permet d'utiliser Ctrl + C ou Ctrl + Z sur l'hôte distant et d'utiliser des programmes interactifs "GUI" comme aptitude ou alsamixer. Vous pouvez le quitter en appuyant sur Ctrl + Q.
la source
BTW, le paquet putty (qui tourne sous Linux) inclut le support série.
la source
Un autre problème pouvant survenir est que votre compte d'utilisateur peut avoir besoin de définir le groupe "dialout" pour accéder au port série.
la source
Putty fonctionne bien sous Linux et offre une certaine commodité, en particulier pour les communications série. Cela a un inconvénient que je n'ai pas pu résoudre directement: pas de copier-coller à partir de la fenêtre Putty elle-même. La version Windows a une belle copie automatique dans le presse-papiers en surbrillance, un clic droit pour coller (et il existe d'excellents plugins pour chrome et firefox permettant le même comportement), mais sous Linux, aucune copie ne ressemble à AFAIK.
Si le manque de copie est un problème (c'est pour moi), activez la connexion au mastic, ouvrez une fenêtre de terminal standard
# tail -f putty.log
et un texte bidirectionnel est disponible pour l'action Copypasta standard.la source
Comme mentionné précédemment, vous pouvez essayer picocom. La dernière version (2.0) peut également être utilisée (en toute sécurité) pour configurer un "serveur de terminal" car elle ne permet plus l'injection de commandes shell. Voir:
https://github.com/npat-efault/picocom/releases
la source
Cela dépend de ce que vous voulez faire. Voulez-vous exécuter un shell ou une application de manière interactive depuis le terminal, vous connecter à un autre ordinateur via la ligne série, automatiser la communication avec un périphérique via un port série?
Si vous voulez une communication bidirectionnelle, je suppose que vous voulez quelque chose d’interactif avec un humain sur le terminal. Vous pouvez configurer le système pour autoriser les connexions d'un terminal sur un port série en configurant une session getty (1) sur le port série. Getty est l'outil permettant de configurer un terminal et de lui permettre de se connecter. Mettez une entrée dans votre fichier inittab (5) pour l’exécuter sur le port série approprié sur une
respawn
base.Si vous souhaitez vous connecter à un appareil et initier des conversations automatisées à double sens, vous pouvez voir si attendez -vous à obtenir ce que vous voulez. Utilisez stty (1) pour configurer le port sur la bonne parité, le débit en bauds et d’autres paramètres pertinents.
Si vous souhaitez communiquer de manière interactive avec un autre ordinateur via le port série, vous aurez besoin d'un logiciel d'émulation de terminal. Cela fait beaucoup - il configure le port, interprète ANSI ou d’autres séquences de commandes de terminal (ANSI était loin d’être le seul standard pris en charge par les terminaux série). De nombreux émulateurs de terminaux prennent également en charge les protocoles de transfert de fichiers tels que kermit ou zmodem.
Les tenants et les aboutissants des communications série et des E / S de terminal sont assez complexes. vous pouvez lire plus que vous n’auriez jamais voulu savoir sur le sujet dans cet ouvrage en série.
la source
Vous voudrez peut-être jeter un oeil à
http://serialconsole.sourceforge.net
Pro: ne pas avoir des problèmes de sécurité évidents comme Minicom ou picocom (si vous ne disposez pas d' un problème donnant aux utilisateurs un accès shell, pas de problème, mais vous avez très probablement faire avoir un si vous voulez configurer un serveur de terminal ... )
la source
Vous devez vous assurer d’avoir les autorisations de lecture / écriture correctes sur le périphérique, vous pouvez le voir avec:
Je m'appuie sur le script que vous avez trouvé et apporté quelques modifications.
Pour les systèmes de développement que j'ai utilisés jusqu'à présent, ils avaient besoin de:
Ces valeurs sont celles par défaut dans le script.
Donc, pour vous connecter, vous pouvez l'utiliser aussi simplement que:
Exemple:
Scénario:
PS: Vous devez savoir quel type de saut de ligne utilise votre système récepteur, car cela déterminera la manière dont vous devrez envoyer les commandes. Dans mon cas, j'avais besoin d'un Windows comme LF. Cela signifie que je dois envoyer
Valeurs ASCII pour:
la source
#!/bin/sh
est ignoré s'il ne s'agit pas de la première ligne du fichier. (2) sérieusement? Vous utilisez1
pour spécifier une parité paire et2
pour spécifier un impair ? (3) Il est classique d’avoir un message «d’utilisation» ou «d’aide» qui documente tous les paramètres, pas seulement ceux qui sont obligatoires. (4) Vous devez toujours citer vos références shell variables (par exemple,"$1"
,"$2"
,"$3"
,"$4"
,"$stopb"
,"$par"
,"$bgPid"
, et même"$?"
et"$!"
) à moins que vous avez une bonne raison de ne pas, et vous êtes sûr que vous savez ce que vous faites.Comme ce n'est pas déjà mentionné ici, je mentionnerais également
socat
- plus d'infos sur https://stackoverflow.com/questions/2899180/how-can-i-use-com-and-usb-ports-within-cygwin :ou
(cependant, j'ai eu le problème de l' arrêter une fois qu'il a démarré, sous MSYS2 sous Windows)
la source
Je me demande pourquoi personne n'a mentionné ser2net .
Exemple
/etc/ser2net.conf
:Vous pouvez vous connecter au port série aussi facilement que:
Ou à distance:
Ou encore, configurez la redirection de port sur votre routeur et exposez-la à Internet, de sorte que vous puissiez vous y connecter depuis n'importe où (ignorons les problèmes de sécurité, je parle de flexibilité).
la source
Une autre option simple consiste à accéder à la machine via ssh avec le
-X
drapeau et à exécuter un programme tel que putty ou gtkterm.Alors:
Il devrait lancer l'interface graphique sur votre PC client et à partir de là, vous pourrez accéder au port série comme si vous étiez dans l'hôte.
Déni de responsabilité: seulement essayé avec les machines Ubuntu. J'imagine que cela ne fonctionnera pas avec des machines sans interfaces graphiques.
Du manuel ssh:
Alors utilisez
-Y
si la sécurité est un problème.la source