Aktionen

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



Kommentare

Loading comments...