* 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)