Difference between revisions of "Serial Login"
Jump to navigation
Jump to search
m (→Usage) |
m (Reverted edits by Etegohy (Talk) to last revision by PhilippeTeuwen) |
||
(3 intermediate revisions by the same user not shown) | |||
Line 45: | Line 45: | ||
** You can use instead esc-1..esc-9, esc-0 (for F10) in mc |
** You can use instead esc-1..esc-9, esc-0 (for F10) in mc |
||
** You can also simply fix the TERM variable according to your local terminal, which means sth like: |
** You can also simply fix the TERM variable according to your local terminal, which means sth like: |
||
− | ** TERM=xterm |
+ | ** export TERM=xterm # if you are in an xterm |
− | ** TERM=linux |
+ | ** export TERM=linux # if you are in a text console |
+ | |||
+ | Here is a simple bash script to launch serial consoles in an easy and explicit way: |
||
+ | <source lang=bash> |
||
+ | #!/bin/bash |
||
+ | |||
+ | # Usage: |
||
+ | # -c to get ctrl-c working remotely instead of locally |
||
+ | # this means you'll have to kill socat by other means! |
||
+ | |||
+ | DATA=$0 |
||
+ | DATA=${DATA/*%/} |
||
+ | PORT=/dev/tty${DATA/@*/} |
||
+ | SPEED=${DATA/*@} |
||
+ | if [ "$SPEED" == "$DATA" ]; then |
||
+ | echo "Error, this script must be called by a symlink with a proper name" >&2 |
||
+ | echo "Example: machine1%USB0@9600" >&2 |
||
+ | echo "to connect to machine1 via local port /dev/ttyUSB0 at 9600bps" >&2 |
||
+ | exit 1 |
||
+ | fi |
||
+ | |||
+ | ISIG="" |
||
+ | echo "============================================================================" |
||
+ | if [ "$1" == "-c" ]; then |
||
+ | ISIG=",isig=0" |
||
+ | echo "CTRL-C will be active remotely but not locally!" |
||
+ | else |
||
+ | echo "CTRL-C will be active locally but not remotely!" |
||
+ | echo "Use \"$0 -c\" if you want the other way" |
||
+ | fi |
||
+ | echo |
||
+ | echo "Once you are logged, you'd better fix the terminfo to your current settings:" |
||
+ | echo " >>>>>>>>>>>>>>>>>>>> export TERM=$TERM <<<<<<<<<<<<<<<<<<<<" |
||
+ | echo " You have to do it manually as i've no idea in which state the port is" |
||
+ | echo |
||
+ | echo " And, of course, don't forget to logout! CTRL-D works remotely" |
||
+ | echo |
||
+ | echo " Press enter to get a login or CTRL-L if there is already a running session" |
||
+ | echo "============================================================================" |
||
+ | echo |
||
+ | socat -,icanon=0,echo=0${ISIG} ${PORT},raw,echo=0,b${SPEED} |
||
+ | </source> |
Latest revision as of 21:33, 24 November 2010
Inspired by http://www.rajeevnet.com/linux/grub_serial_console.html but the Debian way.
Support in BIOS
I use 57600 as this is the speed set in my BIOS (yes, even BIOS management via serial!)
Support in Grub
Add to /boot/grub/menu.lst
# Setup serial (COM1) here with baudrate 57600 # use --unit=1 (for COM2) and so on serial --unit=0 --speed=57600 # # Now setup terminal as both Serial Line(/dev/ttyS0) and # Monitor Console(/dev/tty0) depending upon where you press key # with in timeout (15 sec) period. Otherwise first entry # (console(Monitor)=>tty0) is selected here. terminal --timeout=15 console serial
Then
update-grub
Support in Kernel
To get messages on both consoles, use "console=ttyS0,57600" and "console=tty0", modify these lines (but let them commented!) in /boot/grub/menu.lst to change kernel options
# defoptions=console=ttyS0,57600 console=tty0 # altoptions=(recovery mode) console=ttyS0,57600 console=tty0 single # altoptions=(recovery mode via serial) console=tty0 console=ttyS0,57600 single
Then
update-grub
Support in console
Uncomment in /etc/inittab and change speed
T0:23:respawn:/sbin/getty -L ttyS0 57600 vt100
check if ttyS0 is well present in /etc/securetty to be able to login directly as root
Usage
You can use
- minicom
- socat (man pages of stty and termios can help understanding the tweaks of terminals
socat -,icanon=0,echo=0 /dev/ttyUSB2,raw,echo=0,b9600
With that socat command:
- echo is ok, colors are supported, arrows also, ctrl-d
- ctrl-c is local -> exit socat
- To get ctrl-c working remotely instead of locally
But then socat must be killed externally to quit:
socat -,icanon=0,echo=0,isig=0 /dev/ttyUSB2,raw,echo=0,b9600
- If F1..F10 don't work in mc or other problems, this is probably because of a mismatch of terminfo.
- You can use instead esc-1..esc-9, esc-0 (for F10) in mc
- You can also simply fix the TERM variable according to your local terminal, which means sth like:
- export TERM=xterm # if you are in an xterm
- export TERM=linux # if you are in a text console
Here is a simple bash script to launch serial consoles in an easy and explicit way:
#!/bin/bash
# Usage:
# -c to get ctrl-c working remotely instead of locally
# this means you'll have to kill socat by other means!
DATA=$0
DATA=${DATA/*%/}
PORT=/dev/tty${DATA/@*/}
SPEED=${DATA/*@}
if [ "$SPEED" == "$DATA" ]; then
echo "Error, this script must be called by a symlink with a proper name" >&2
echo "Example: machine1%USB0@9600" >&2
echo "to connect to machine1 via local port /dev/ttyUSB0 at 9600bps" >&2
exit 1
fi
ISIG=""
echo "============================================================================"
if [ "$1" == "-c" ]; then
ISIG=",isig=0"
echo "CTRL-C will be active remotely but not locally!"
else
echo "CTRL-C will be active locally but not remotely!"
echo "Use \"$0 -c\" if you want the other way"
fi
echo
echo "Once you are logged, you'd better fix the terminfo to your current settings:"
echo " >>>>>>>>>>>>>>>>>>>> export TERM=$TERM <<<<<<<<<<<<<<<<<<<<"
echo " You have to do it manually as i've no idea in which state the port is"
echo
echo " And, of course, don't forget to logout! CTRL-D works remotely"
echo
echo " Press enter to get a login or CTRL-L if there is already a running session"
echo "============================================================================"
echo
socat -,icanon=0,echo=0${ISIG} ${PORT},raw,echo=0,b${SPEED}