at master 1.3 kB view raw
1{ lib, pkgs, ... }: 2{ 3 name = "systemd-initrd-vconsole"; 4 5 nodes.machine = 6 { pkgs, ... }: 7 { 8 boot.kernelParams = lib.mkAfter [ 9 "rd.systemd.unit=rescue.target" 10 "loglevel=3" 11 "udev.log_level=3" 12 "systemd.log_level=warning" 13 ]; 14 15 boot.initrd.systemd = { 16 enable = true; 17 emergencyAccess = true; 18 }; 19 20 console = { 21 earlySetup = true; 22 keyMap = "colemak"; 23 }; 24 }; 25 26 testScript = '' 27 # Boot into rescue shell in initrd 28 machine.start() 29 machine.wait_for_console_text("Press Enter for maintenance") 30 machine.send_console("\n") 31 32 # Wait for shell to become ready 33 for _ in range(300): 34 machine.send_console("printf '%s to receive commands:\\n' Ready\n") 35 try: 36 machine.wait_for_console_text("Ready to receive commands:", timeout=1) 37 break 38 except Exception: 39 continue 40 else: 41 raise RuntimeError("Rescue shell never became ready") 42 43 # Check keymap 44 machine.send_console("(printf '%s to receive text:\\n' Ready && read text && echo \"$text\") </dev/tty1\n") 45 machine.wait_for_console_text("Ready to receive text:") 46 for key in "asdfjkl;\n": 47 machine.send_key(key) 48 machine.wait_for_console_text("arstneio") 49 ''; 50}