* Terminalemulator ====== Troubleshooting ====== ===== Unknown terminal type ===== * Meldung "Unknown Terminal Type" * oder Probleme bei Eingaben oder Farben * wie fehlende Farben oder Backspace oder Pfeiltasten funktionieren nicht * Programme im Terminal müssen die Sequenzen kennen um das Terminal zu steuern und wissen was das Terminal kann * für gewöhnlich macht das (n)curses-Library für die Programme * die Informationen können über die termcap/terminfo-Bibliothek (terminfo ist eine neuere Implementierung) (ncurses greift auf diese Bibliotheken zu) abgerufen werden * die Informationen stehen in der termcap-Datenbank * in der Regel sind das einzelne Dateien für die einzelnen Terminals * welcher Terminal(-Emulator) gerade aktiv ist steht in der Regel in der $TERM-Variable * Kitty hat eine eigene Termcap-Datei und eigene eigene Terminal-Bezeichnung * viele "einfachere" Terminal-Emulatoren melden sich als "xterm-256color", da sie dazu kompatibel sind * kitty stellt mehr Funktionalitäten zur Verfügung * Kitty meldet sich als "xterm-kitty" ==== ssh ==== * TERM wird durch ssh übermittelt -> die Remot-Maschine weiß also welches Terminal benutzt wird * kitty ist aber keines der verbeiteten Terminals, in der Regel ist die entsprechende Termcap-Datei daher auf der Remote-Maschine nicht installiert * das führt zum Fehler "Unknown Terminal Type" * TERM auf ein anderes (kompatibles) Terminal setzen * "export TERM=xterm-256color" auf der Remote-Maschine eingeben * einige Funktionen von kitty werden nicht funktionieren/es kann in seltenen Fällen zu seltsamen Phänomenen kommen * aber meist sollte das funktionieren * ssh kitten kitty +kitten ssh user@whatever * macht ssh zum gewünschten Host (alle Parameter werden transparent an ssh übergeben) * kopiert das Terminfo-File von Kitty nach ~.terminfo/kitty.terminfo auf dem Zielsystem * es kann auf Wunsch weitere Dateien kopieren und Umgebungsvariablen setzen * .zshrc, vimrc usw. * um einen Alias zu erzeugen (ssh wird dann auf kitty +kitten ssh gemappt) kann man folgendes in seine .zshrc oder .bashrc hinzufügen: if [ "$TERM" = 'xterm-kitty' ]; then alias ssh='kitty +kitten ssh' fi * kopieren des terminfo-Files * im lokalen Kitty "echo $TERMINFO" * das liefert den Pfad zur Terminfo-File * oder infocmp * ganz oben wird die Datei genannt aus der gelesen wurde * die Datei in das Verzeichnis "~/.terminfo" auf der Remote-Maschine kopieren * das Verzeichnis wird in der Regel nicht existieren -> muss angelegt werden * die bessere Idee ist wahrscheinlich aber dieser Weg: infocmp -a xterm-kitty | ssh myserver tic -x -o \~/.terminfo /dev/stdin * das dumped den Inhalt des Terminfo-Files und compiliert es und dumped den Inhalt in ~/.terminfo/ ==== sudo ==== * Problem ist wahrscheinlich das kitty als User-Installation (also nicht systemweit) installiert wurde * für "normales" sudo (wenn man root wird) lässt es sich so lösen: * sudo visudo Defaults env_keep += "TERM TERMINFO" am Ende hinzufügen * übernimmt in die neue Shell-Session die Terminfo-Variable (und die Term-Variable) * wenn man sudo -u nutzt hat man aber keinen Zugriff auf die Terminfo-Datei im Benutzerverzeichnis * die vorstehende Änderung am sudoers file muss rückgängig gemacht werden * sonst wird versucht auf die TERMINFO im Benutzerverzeichnis zuzugreifen, die nicht gelesen werden kann * es hilft nur global installieren der Datei infocmp > /tmp/kitty sudo tic /tmp/kitty * infocmp ließt die (binäre) geladene Terminfo-Datei aus und schreibt sie als Text nach /tmp/kitty * tic ließt die Textdatei ein und compiliert sie und da per sudo aufgerufen installiert es sie systemweit * man kann natürlich auch die bereits kompilierte Terminfo-Datei (für gewöhnlich in ~/.local/kitty.app/share/terminfo/x) manuell dorthin kopieren wo die Terminfo-Dateien erwartet werden (das hängt aber von der Distribution/Betriebssystem ab)