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
+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" ]; }