the command dmesg | grep console
returns:
Kernel command line: console=ttys6,115200 root=/dev/mmcblk1p2
rootwait rw
console [ttys6] enabled
I want to change this to ttys3 after booting. Is it possible?
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.
Sign up to join this communityThe man page for tty_ioctl lists the ioctl
TIOCCONS. When applied to an open file descriptor of a tty it will redirect future output intended for /dev/console
to that tty.
You can use this in a simple perl script. Create and chmod +x
a file mysetconsole holding the following:
#!/usr/bin/perl
# https://unix.stackexchange.com/a/397790/119298
# see man tty_ioctl for TIOCCONS
# and perldoc IO::Tty::Constant
require "sys/ioctl.ph";
use IO::Tty::Constant qw(TIOCCONS);
ioctl(STDIN,TIOCCONS,0) or die $!;
Assuming you can open the wanted device, use it simply as
sudo ./mysetconsole </dev/ttys3
You will not be able to use it again until you set the console back to /dev/console
, with
sudo sh -c './mysetconsole </dev/console'
You may get perl warnings about _FORTIFY_SOURCE
which can be ignored.
You will need rpm package perl-IO-Tty
or debian package libio-pty-perl
. If you prefer you can just look for the definition of TIOCCONS in the system include files. I found mine in:
/usr/include/asm-generic/ioctls.h: #define TIOCCONS 0x541D
Your perl script can then just be
#!/usr/bin/perl
# https://unix.stackexchange.com/a/397790/119298
sub TIOCCONS{ return 0x541D; }
ioctl(STDIN,TIOCCONS(),0) or die $!;
dmesg
could do this way back when, but the man page now says otherwise. I know there was some command I used to use to make an Xterm the console way back when, but can't remember it for the life of me.
xterm -C
will become console, but you need to be root these days, and it doesn't fit the questioners requirements.
dmesg
that did this rather than xterm
though.
Short anwser: use chvt Long anwser: How Linux configures the TTYs at boot depends on distribution. It could be /etc/inittab or it could be /etc/rc.local On systemd systems it's automatic based on configurations in logind.conf