
Wie kann ich die Hintergrundfarbe des Terminals so ändern, dass NUR das Terminalprotokoll verwendet wird und es nicht von IRGENDEINER Konfiguration (wie in „Profilen“) abhängt, die in einem bestimmten Terminalprogramm oder der Umgebung, in der es ausgeführt wird, gespeichert ist?
Ich möchte in der Lage sein, ein Skript zu schreiben, das die Hintergrundfarbe des Terminals zuverlässig für jeden ändert, der sich über ein Terminal beim Computer anmeldet und das Skript ausführt.
Eine schnelle und kompetente Antwort im Sinne von „das ist unmöglich“ wird ebenso geschätzt wie eine Lösung. Eine solche Antwort wird allerdings nur von einem Experten akzeptiert, der sich mit Terminalprotokollen bestens auskennt und das Fehlen einer solchen Funktion bestätigen kann.
Antwort1
Das ist unmöglich. Ich bin kein Experte, der sich mit Terminalprotokollen auskennt, aber ich weiß, dass es Terminals gibt, bei denen es keine Möglichkeit gibt, die Hintergrundfarbe zu ändern. Das ist zum Beispiel bei einfachen Terminals der Fall, wie sie vonerwartenoder M-x shell
in Emacs. Dies ist auch bei den meisten Hardware-Terminals der Fall, aber heutzutage verwenden nur noch wenige Leute diese.
Die meisten Terminalemulatoren bieten eine Möglichkeit, die Hintergrundfarbe zu ändern. Terminalemulatoren kopieren im Großen und Ganzen xterm für die Schnittstelle zwischen der Anwendung und dem Terminal. Wenn Sie also eine solche Funktion wünschen, probieren Sie die xterm-Methode aus und gehen Sie davon aus, dass sie auf einigen, aber nicht auf allen Terminalemulatoren funktioniert. Suchen Sie nach demxterm-Steuersequenzenund sehen Sie, ob eines Ihren Wünschen entspricht.
Um die Hintergrundfarbe des gesamten Terminals zu ändern, gibt esOSC 11; color BEL
, dh
printf '\e]11;%s\a' "$color"
Dies funktioniert in xterm, urxvt, gnome-terminal, konsole und lxterm, aber nicht in rxvt, xfce4-terminal, terminator oder Emacs . Die Änderung der Hintergrundfarbe bleibt auch nach einem Zurücksetzen des Terminals bestehen. Sie können die Vordergrundfarbe auch ändern, indem Sie durch M-x term
ersetzen .11;
10;
Dies ist natürlich die Standardhintergrundfarbe. Auf jedem Terminal, das diese Escape-Sequenz unterstützt, und den meisten anderen Terminals, die in irgendeiner Weise Farben unterstützen, können Sie die Hintergrundfarbe für nachfolgend angezeigten Text mit \e[41m
(für Rot) ändern.
Wenn die Escape-Sequenz in einem Terminal nicht unterstützt wird, können Sie das nicht herausfinden. Sie können versuchen, eine Escape-Sequenz zu finden, die das Terminal abfragt und die in denselben Terminals unterstützt wird, aber normalerweise gibt es keine solche Sequenz.
Das Umschalten auf invertierte Darstellung \e[?5h
funktioniert wahrscheinlich auf den meisten Terminals, übersteht aber einen Reset des Terminals nicht. Sie könnten das tun und dann die Vordergrundfarbe einstellen, so würde auf den meisten Terminals ein visueller Effekt entstehen.