Proxmox PVE Virtual Environment - xterm.js aktivieren
Aus znilwiki
Changelog:
- 30.05.2025 erste Version
Vorwort
Man kann ja in der Proxmox-Weberfläche eine >_ Shell öffnen:
Und das geht auch für eigene - Linux - VMs.
Der Vorteil ist das dann auch Copy&Paste funktioniert - und das ganz auch hinter einem Reverse Proxy möglich ist.
Getestet habe ich diesen Artikel hier mit Ubuntu 24.04.2 LTS
Hardware der VM bearbeiten
Fahrt die VM herunter und fügt in den Hardware-Einstellungen einen seriellen Port hinzu:
Dann die VM wieder starten.
VM konfigurieren
In der VM konfigurieren wir, z.B. per SSH, das folgende (als root oder sudo davor!):
nano /etc/default/grub
die vorhandenen Einstellungen habe ich wie folgt abgeändert:
GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_CMDLINE_LINUX_DEFAULT="quiet console=tty0 console=ttyS0,115200" GRUB_TERMINAL="console serial" GRUB_SERIAL_COMMAND="serial --speed=115200"
Die letzte Zeile gab es noch nicht und wurde von mir neu hinzugefügt.
Speichern und das System die Änderungen verarbeiten lassen:
update-grub
Nun einmal rebooten:
reboot
xterm.js starten
In den >_ Console Optionen oben rechts steht euch nun auch xterm.js zur Verfügung:
Wenn Ihr in dem Fenster einmal auf Enter drückt, erscheint der Eingabeprompt.
Nach einem Reboot kommt direkt der Prompt
Farbiger Prompt in xterm.js
nano /etc/bash.bashrc
und ganz unten folgendes anhängen:
export TERM=xterm-256color
Funktioniert wenn Ihr das Konsolenfenster neu öffnet.
Auflösung mehr als 80x25 Zeichen
nano und andere Programme sind nun aber auf 80x25 Zeichen beschränkt.
Grund das über die serielle Konsole die richtige Auflösung nicht mitgeteilt wird.
Lösung ist das wir wieder die
nano /etc/bash.bashrc
bearbeiten und folgendes unten anhängen:
# resize function for connected serial console
resize() {
old=$(stty -g)
stty raw -echo min 0 time 5
printf '\0337\033[r\033[999;999H\033[6n\0338' > /dev/tty
IFS='[;R' read -r _ rows cols _ < /dev/tty
stty "$old"
#echo "cols:$cols"
#echo "rows:$rows"
stty cols "$cols" rows "$rows"
}
ALL_COMMANDS_FINISHED=1
PreCommands() {
if [ "$ALL_COMMANDS_FINISHED" = '1' ]; then
ALL_COMMANDS_FINISHED=0
resize
#echo "1->0"
fi
}
PostCommands() {
ALL_COMMANDS_FINISHED=1
}
# if login thru tty*
if [[ $(tty) = /dev/tty* ]]; then
# PreCommands is called before every single command on a command line
trap PreCommands DEBUG
# PostCommands is called after all commands on a command line are finished
PROMPT_COMMAND="PostCommands"
fi
Die Auflösungsänderung funktioniert nicht dynamisch sondern es wird die Größe bei der Anmeldung genommen. Also erst das Fenster maximieren und dann anmelden.
Wenn Ihr das in der Sitzung unbedingt ändern müsst, hilft ein
source /etc/bash.bashrc && source ~/.bashrc
welches Ihr euch natürlich auf einen Alias legen könntet.
Quellen
- https://forum.proxmox.com/threads/how-to-activate-gui-xterm-js-in-a-debian-12-vm.163529/
- https://forum.proxmox.com/threads/serial-devices-added-to-debian-ubuntu-guests-default-settings-are-80-column-with-reduced-colors-can-we-change-this.151794/
- https://unix.stackexchange.com/questions/16578/resizable-serial-console-window/680244#680244
- https://forum.proxmox.com/threads/sch%C3%B6ne-xterm-js-f%C3%BCr-eine-vm-vern%C3%BCnftiges-terminal.67224/#post-301672