Serial Console: Difference between revisions
imported>Samueldr m I can't even into syntax it seems |
serial console login |
||
| (4 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
{{expansion}} | {{expansion}} | ||
== Connect to serial device == | |||
Most serial console programs require you to specify a serial device and a baud rate. | |||
=== With <code>tio</code> === | |||
tio -b 115200 /dev/ttyS0 | |||
=== With <code>screen</code> === | |||
screen /dev/ttyS0 115200 | |||
== Serial devices == | |||
Serial devices under NixOS will get expose with the following file names. | |||
The file names relate to the driver used for the serial interface. | |||
* <code>/dev/ttyS*</code> | |||
* <code>/dev/ttyUSB*</code> | |||
* <code>/dev/ttyACM*</code> | |||
== Use serial interface as TTY == | |||
To use a serial device <code>ttyS0</code> as a TTY to log into the device, you have to tell the kernel and you boot loader about the serial configuration. | |||
An example for GRUB bootloader: | |||
boot.kernelParams = [ "console=ttyS0,115200n8" ]; | |||
boot.loader.grub.extraConfig = " | |||
serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1 | |||
terminal_input serial | |||
terminal_output serial | |||
"; | |||
== Unprivileged access to serial device == | |||
Serial devices under NixOS are created with the group <code>dialout</code> by default. | |||
All users that are part of the group <code>dialout</code> can access serial devices. | |||
Add a user to group <code>dialout</code>: | |||
users.users.<name>.extraGroups = [ "dialout" ]; | |||
== Tips == | == Tips == | ||
| Line 14: | Line 58: | ||
This will give you the exact invocation for your current terminal size. | This will give you the exact invocation for your current terminal size. | ||
In case tmux is used an alternative is to add the following snippet to the <code>tmux.conf</code> | |||
bind R run "echo \"stty columns $(tmux display -p \#{pane_width}); stty rows $(tmux display -p \#{pane_height})\" | tmux load-buffer - ; tmux paste-buffer" | |||
In this case fixing the terminal size can be achieved by pressing R. | |||
== Serial Console Login == | |||
There is a long thread here: https://github.com/NixOS/nixpkgs/issues/84105 | |||
This configuration seems to work<syntaxhighlight lang="nix"> | |||
# | |||
# serial-tty.nix | |||
# | |||
# Serial console configuration for /dev/ttyS0 | |||
# Enables login via serial interface | |||
# https://github.com/NixOS/nixpkgs/blob/nixos-unstable/nixos/modules/services/ttys/getty.nix | |||
# https://github.com/NixOS/nixpkgs/issues/84105 | |||
{ config, lib, pkgs, ... }: | |||
{ | |||
# Enable serial console on ttyS0 | |||
boot.kernelParams = [ | |||
"console=ttyS0,115200" | |||
]; | |||
# Disable the upstream getty module's automatic configuration for serial-getty@ | |||
# This prevents conflicts with our custom configuration | |||
systemd.services."serial-getty@" = { | |||
enable = false; | |||
}; | |||
# Configure our own serial-getty@ttyS0 service | |||
systemd.services."serial-getty@ttyS0" = { | |||
enable = true; | |||
wantedBy = [ "getty.target" ]; | |||
after = [ "systemd-user-sessions.service" ]; | |||
wants = [ "systemd-user-sessions.service" ]; | |||
serviceConfig = { | |||
Type = "idle"; | |||
Restart = "always"; | |||
Environment = "TERM=vt220"; | |||
ExecStart = "${pkgs.util-linux}/bin/agetty --login-program ${pkgs.shadow}/bin/login --noclear --keep-baud ttyS0 115200,57600,38400,9600 vt220"; | |||
UtmpIdentifier = "ttyS0"; | |||
StandardInput = "tty"; | |||
StandardOutput = "tty"; | |||
TTYPath = "/dev/ttyS0"; | |||
TTYReset = "yes"; | |||
TTYVHangup = "yes"; | |||
IgnoreSIGPIPE = "no"; | |||
SendSIGHUP = "yes"; | |||
}; | |||
}; | |||
# Enable early console output during boot | |||
#boot.consoleLogLevel = 7; # Show all kernel messages | |||
boot.initrd.verbose = true; # Show initrd messages | |||
} | |||
</syntaxhighlight> | |||