tui-check: Ursache der Rahmendarstellung am Terminal ablesen

Nach der Locale-Korrektur meldet der Selbsttest UTF-8, die Anzeige blieb
aber unveraendert. Damit liegt es nicht mehr an der Serverseite, und
Weiterraten hat keinen Sinn.

"cmk-manage.sh tui-check" gibt jetzt zwei Testzeilen aus:
  Zeile A  echte UTF-8-Rahmenzeichen (U+2500 ff.)
  Zeile B  die alte VT100-Umschaltung ESC(0 mit den Buchstaben lqk
An deren Aussehen laesst sich die Ursache direkt ablesen - Terminal
ignoriert die Umschaltung (PuTTY-Fall), Terminal nicht im UTF-8-Modus,
oder Schrift ohne Rahmenzeichen. Zu jeder Beobachtung nennt die Ausgabe
die passende Abhilfe samt PuTTY-Einstellungen.

Dazu der ASCII-Schalter, der bisher ins Leere lief: einfache Rahmen kann
nur dialog zeichnen. Ist CMK_TUI_ASCII gesetzt und dialog vorhanden,
wird dialog jetzt dafuer vorgezogen; fehlt es, sagt das Skript das
ausdruecklich statt wirkungslos weiterzumachen.

dialog ist auf dieser Seite ohnehin der wirksamere Griff - es geht mit
dem Zeichensatz zuverlaessiger um als whiptail. Entsprechend in beiden
Sprachfassungen hervorgehoben.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-20 18:28:38 +02:00
co-authored by Claude Opus 5
parent 667c119a6c
commit 861a9bd71c
4 changed files with 157 additions and 14 deletions
+35 -4
View File
@@ -1830,15 +1830,46 @@ Damit es auch auf der Gegenseite passt:
Wer die Sitzung dauerhaft so haben möchte, speichert sie in PuTTY unter
*Session → Saved Sessions*.
> Hilft beides nicht – etwa weil auf dem Server keine UTF-8-Locale
> installiert werden darf – lässt sich die Oberfläche mit einfachen
> ASCII-Rahmen zeichnen:
#### Wenn es trotzdem nicht passt: nachsehen statt raten
```bash
./scripts/cmk-manage.sh tui-check
```
Das gibt zwei Testzeilen aus:
* **Zeile A** – echte UTF-8-Rahmenzeichen (`┌──┐`)
* **Zeile B** – die alte VT100-Umschaltung `ESC(0` mit den Buchstaben `lqk`
Daran lässt sich die Ursache ablesen:
| Beobachtung | Bedeutung |
|---|---|
| A Linien, B Linien | alles in Ordnung |
| A Linien, **B zeigt `lqqqk`** | das Terminal macht die VT100-Umschaltung nicht mit – **der PuTTY-Fall**, siehe Einstellungen oben |
| A zeigt Kauderwelsch | das Terminal läuft nicht im UTF-8-Modus |
| beide zeigen Buchstaben | die Schrift hat keine Rahmenzeichen |
Das Kommando nennt zu jeder Beobachtung gleich die passende Abhilfe.
> **`dialog` statt `whiptail` installieren** ist auf dieser Seite der wirksamste
> Griff – es geht mit dem Zeichensatz zuverlässiger um und kann als einziges
> auch einfache ASCII-Rahmen:
>
> ```bash
> sudo dnf install -y dialog # RHEL/Rocky/Alma
> sudo apt-get install -y dialog # Debian/Ubuntu
> ```
>
> Das Skript bevorzugt `dialog`, sobald es vorhanden ist. Danach lassen sich
> notfalls einfache Rahmen erzwingen:
>
> ```bash
> CMK_TUI_ASCII=1 ./scripts/cmk-manage.sh gui
> ```
>
> Das wirkt allerdings nur mit `dialog`; `whiptail` kennt keine solche Option.
> Ohne `dialog` sagt das Skript das ausdrücklich – `whiptail` kennt keine
> solche Option.
### 14.5 Selbstprüfung
+35 -3
View File
@@ -1830,14 +1830,46 @@ So that the other end matches:
Save the session under *Session → Saved Sessions* to keep these settings.
> If neither helps – for instance because no UTF-8 locale may be installed on
> the server – the interface can be drawn with plain ASCII borders:
#### If it still looks wrong: look instead of guessing
```bash
./scripts/cmk-manage.sh tui-check
```
This prints two test lines:
* **Line A** – real UTF-8 box-drawing characters (`┌──┐`)
* **Line B** – the old VT100 switch `ESC(0` with the letters `lqk`
The cause can be read off them:
| Observation | Meaning |
|---|---|
| A lines, B lines | everything is fine |
| A lines, **B shows `lqqqk`** | the terminal ignores the VT100 switch – **the PuTTY case**, see the settings above |
| A shows gibberish | the terminal is not in UTF-8 mode |
| both show letters | the font has no box-drawing glyphs |
The command names the matching remedy for each observation.
> **Installing `dialog` instead of `whiptail`** is the most effective move on
> this side – it handles the character set more reliably and is the only one
> that can draw plain ASCII borders:
>
> ```bash
> sudo dnf install -y dialog # RHEL/Rocky/Alma
> sudo apt-get install -y dialog # Debian/Ubuntu
> ```
>
> The script prefers `dialog` as soon as it is present. After that, plain
> borders can be forced if needed:
>
> ```bash
> CMK_TUI_ASCII=1 ./scripts/cmk-manage.sh gui
> ```
>
> This only works with `dialog`; `whiptail` has no such option.
> Without `dialog` the script says so explicitly – `whiptail` has no such
> option.
### 14.5 Self-check
+66
View File
@@ -50,6 +50,8 @@ KOMMANDOS - Stack
status Status von Containern und Sites anzeigen
logs [-f] [DIENST] Logs anzeigen
selftest Skripte auf bekannte Fallstricke pruefen
tui-check Testzeilen fuer die Rahmendarstellung ausgeben
(hilft bei q/x/l/m statt Linien, etwa in PuTTY)
shell Root-Shell im Checkmk-Container
omd ARG... beliebiges omd-Kommando im Container ausfuehren
@@ -4669,6 +4671,69 @@ Backups : $BACKUP_DIR" \
ok "Beendet."
}
# =====================================================================
# Terminal pruefen
#
# Zeigt zwei Testzeilen. Woran es liegt, laesst sich an ihnen ablesen -
# ohne Raten:
# Zeile A sind echte UTF-8-Rahmenzeichen (U+2500 ff.)
# Zeile B ist die alte VT100-Umschaltung ESC(0 mit den Buchstaben lqk
# Genau diese Buchstaben erscheinen, wenn das Terminal die Umschaltung
# nicht mitmacht - der Fall bei PuTTY im UTF-8-Modus.
# =====================================================================
cmd_tui_check() {
ui_fix_locale || true
ui_init
printf '\n%sWas dieses Terminal meldet%s\n' "$C_BLD" "$C_RST"
printf ' TERM : %s\n' "${TERM:-<leer>}"
printf ' LANG : %s\n' "${LANG:-<leer>}"
printf ' LC_ALL : %s\n' "${LC_ALL:-<leer>}"
printf ' LC_CTYPE : %s\n' "${LC_CTYPE:-<leer>}"
printf ' Zeichensatz : %s\n' "$(locale charmap 2>/dev/null || echo unbekannt)"
printf ' Programm : %s\n' "${UI_BIN:-keines (dialog/whiptail fehlt)}"
[ -n "${UI_LOCALE_NOTE:-}" ] && printf ' Angepasst : %s\n' "$UI_LOCALE_NOTE"
printf '\n%sZeile A - echte UTF-8-Rahmenzeichen%s\n' "$C_BLD" "$C_RST"
printf ' ┌────────┐\n'
printf ' │ Rahmen │\n'
printf ' └────────┘\n'
printf '\n%sZeile B - alte VT100-Umschaltung (ESC(0)%s\n' "$C_BLD" "$C_RST"
printf ' \033(0lqqqqqqqqk\033(B\n'
printf ' \033(0x\033(B Rahmen \033(0x\033(B\n'
printf ' \033(0mqqqqqqqqj\033(B\n'
cat <<EOF
${C_BLD}Auswertung${C_RST}
A zeigt Linien, B zeigt Linien
Alles in Ordnung - die Oberflaeche muss sauber aussehen.
A zeigt Linien, B zeigt lqqqk / x / mqqj
Das Terminal macht die VT100-Umschaltung nicht mit.
Genau das ist der PuTTY-Fall. Abhilfe in PuTTY:
Window -> Translation -> Remote character set: UTF-8
Window -> Translation -> Handling of line drawing characters:
"Use Unicode line drawing code points"
Connection -> Data -> Terminal-type string: xterm-256color
Auf dieser Seite hilft zusaetzlich 'dialog' statt 'whiptail':
dnf install -y dialog bzw. apt-get install -y dialog
Oder einfache Rahmen erzwingen:
CMK_TUI_ASCII=1 $SELF gui
A zeigt Kaese wie a-- oder Fragezeichen
Das Terminal laeuft NICHT im UTF-8-Modus.
In PuTTY: Window -> Translation -> Remote character set: UTF-8
Beide Zeilen zeigen Buchstaben
Schrift ohne Rahmenzeichen. In PuTTY unter
Window -> Appearance eine andere waehlen, z.B. Consolas
oder DejaVu Sans Mono.
EOF
}
# =====================================================================
# Selbstpruefung
#
@@ -4831,6 +4896,7 @@ main() {
proxy) cmd_proxy "$@" ;;
config) cmd_config "$@" || true ;;
selftest) cmd_selftest ;;
tui-check) cmd_tui_check ;;
help|-h|--help) usage ;;
*) err "Unbekanntes Kommando: $cmd"; echo; usage; exit 1 ;;
esac
+21 -7
View File
@@ -338,24 +338,38 @@ ui_ascii_args() {
case "${CMK_TUI_ASCII:-}${UI_ASCII:-}" in
'') return 0 ;;
esac
# Nur dialog kann das; whiptail kennt die Option nicht.
if [ "${UI_BIN:-}" = dialog ] && dialog --ascii-lines --print-version >/dev/null 2>&1; then
UI_EXTRA=(--ascii-lines)
elif [ -z "${UI_ASCII_WARNED:-}" ]; then
UI_ASCII_WARNED=1
warn "Einfache Rahmen kann nur 'dialog' zeichnen - 'whiptail' kennt
die Option nicht. Installieren mit:
dnf install -y dialog (RHEL/Rocky/Alma)
apt-get install -y dialog (Debian/Ubuntu)"
fi
return 0
}
ui_init() {
ui_fix_locale || true
ui_ascii_args
# Geometrie IMMER setzen - sonst laeuft das Skript unter "set -u" auf
# eine unbound variable, wenn UI_BIN von aussen vorgegeben wurde.
UI_H="${UI_H:-22}"; UI_W="${UI_W:-78}"; UI_MH="${UI_MH:-13}"
[ -n "${UI_BIN:-}" ] && return 0
if command -v dialog >/dev/null 2>&1; then UI_BIN=dialog
elif command -v whiptail >/dev/null 2>&1; then UI_BIN=whiptail
else UI_BIN=""; fi
export DIALOGRC="${DIALOGRC:-}"
if [ -z "${UI_BIN:-}" ]; then
if command -v dialog >/dev/null 2>&1; then UI_BIN=dialog
elif command -v whiptail >/dev/null 2>&1; then UI_BIN=whiptail
else UI_BIN=""; fi
export DIALOGRC="${DIALOGRC:-}"
fi
# Einfache Rahmen koennen nur mit dialog gezeichnet werden. Ist das
# gewuenscht und dialog vorhanden, wird es dafuer vorgezogen.
if [ -n "${CMK_TUI_ASCII:-}${UI_ASCII:-}" ] && command -v dialog >/dev/null 2>&1; then
UI_BIN=dialog
fi
ui_ascii_args
}
ui_available() { ui_init; [ -n "$UI_BIN" ]; }