У меня все заработало! Вот что я сделал ... Я отредактировал запись, которую добавил в Startup Applications, с
setxkbmap -option ctrl: swap_lalt_lctl
на
/ bin / bash -c "сна 15 && setxkbmap -option ctrl: swap_lalt_lctl"
. Это делает две вещи: 1. Обеспечивает выполнение команды bash. 2. Это добавляет задержку, чтобы рабочий стол завершил загрузку к моменту выполнения команды.
Я получил идею отсюда: https://askubuntu.com/questions/624868/run-command-at-login-ubuntu-15-04#624890
Я нашел способ реализовать автоматическую гостевую установку образа Archiso по умолчанию, контролируя только хост-машину, однако это несколько громоздко . Вам необходимо объединить встроенные функции VBox с открытым последовательным портом через ssh.
Включить поддержку виртуального последовательного порта для VBox:
VBoxManage modifyvm "$VNM" --uart1 0x3F8 4 --uartmode1 server "$SERIAL"
Запустить vbox:
VBoxManage startvm "$VNM"
# Wait for boot menu. WARNING: May be affected by problem with timing!
sleep 8
Отправить команды в гостевую систему для включения последовательного порта при загрузке ядра:
# Press <Tab> to edit boot string, add 'console=ttyS0', then <Enter>
VBoxManage controlvm "$VNM" keyboardputscancode 0f 8f 39 b9 # <Tab><Space>
VBoxManage controlvm "$VNM" keyboardputscancode 2e ae 18 98 31 b1 1f 9f 18 98 26 a6 12 92 # 'console'
VBoxManage controlvm "$VNM" keyboardputscancode 0d 8d 14 94 14 94 15 95 36 1f 9f b6 0b 8b # '=ttyS0'
VBoxManage controlvm "$VNM" keyboardputscancode 1c 9c # Enter
Войти в оболочку по последовательному каналу. Я использовал netcat
, но подойдет любой вариант. Следующие команды показывают, как работать с сокетом локально (но вы можете перенаправить на ssh):
sleep 25
printf "root\n" | nc -q 2 -U "$SERIAL"
Отправить сценарий установки как heredoc через сокет. Это было проще, чем мой основной подход с scp
. Но вы также можете выполнить scp
через последовательный порт.
printf "\n"'cat - <<-'"'EOFARCHSETUP' > ~/arch-setup\n" | nc -U "$SERIAL"
cat "$SCRIPT_DIR/arch-setup" | nc -U "$SERIAL" # Send text content of setup file
printf "\nEOFARCHSETUP\n" | nc -U "$SERIAL" # End of heredoc file
Начать установку:
printf "\nchmod u+x ~/arch-setup\n" | nc -U "$SERIAL" # Make executable
printf "\ncd ~ && ./arch-setup --new\n" | nc -U "$SERIAL" # Start install
Неинтерактивный мониторинг установки (безопасно с помощью Ctrl-C, чтобы прервать мониторинг только без влияния на установку):
nc -d -U "$SERIAL"
Если остались какие-то неясные моменты, вы можете увидеть полные сценарии на Github