
Ich kann den printf-Befehl nicht verwenden, wenn ich mich in tmux befinde.
Der Befehl zum schnellen Ändern des Hintergrunds lautet:
printf "\e]20;/home/alexsson/Downloads/alternativ.png;\a"
Ich kann dies direkt in urxvt tun:
Auch im Bildschirm:
Aber dieser printf-Befehl funktioniert in tmux einfach nicht:
Irgendeine Idee, wie man es in tmux zum Laufen bringt?
PS: Eine ähnliche Frage gibt es hier:tmux und Steuersequenzzeichenproblem. Allerdings ist es schwierig, diese Frage zu finden, wenn man nicht die richtigen Suchbegriffe verwendet. Ich denke, mein Beitrag wird für viele Benutzer interessant sein, die nicht wissen, welche Suchbegriffe sie verwenden sollen, sondern eher allgemeinere Begriffe verwenden (wie beispielsweise einfach den Hintergrund ändern). In der Dokumentation steht dazu auch nicht viel.
Antwort1
urxvt
, tmux
und screen
sind drei verschiedene Terminalemulatoren, der erste verwendet X11 als Backend für Anzeige/Eingabe, während die beiden anderen ein Host-Terminal verwenden.
tmux
und screen
sind eigentlich Terminalemulatoren. Sie implementieren eine Reihe von Funktionen (wie Fettschriftattribute, Bildschirm löschen...), die über einige Escape-Sequenzen aktiviert werden, aber das Setzen derHintergrundbildgehört nicht zu den Funktionen, die sie unterstützen.
Denken Sie auch daran, dass eine screen
/ tmux
-Sitzung an jeden Hostterminaltyp angehängt werden kann, sogar an mehrere gleichzeitig (mit -x
). Einige unterstützen diese Funktion möglicherweise, andere nicht.
screen
gibt die Escape-Sequenzen weiter, die es nicht erkennt tmux
. Sequenzen, die mit OSC ( \e]
) beginnen, enden mit BEL ( \a
/ ^G
). Wenn tmux
ein angezeigt wird \e]
, liest es bis \a
(oder zur nächsten Escape-Sequenz) und wenn es diese Sequenz nicht erkennt, verwirft es sie einfach.
Jedoch,tmux
unterstützt die wortwörtliche Weitergabe beliebigen Textes an das/die Host-Terminal(s)mit der \ePtmux;\e<text>\e\
Sequenz. Hier könnten Sie also Folgendes tun:
printf '\ePtmux;\e\e]20;/home/alexsson/Downloads/alternativ.png;\a\e\\'
Beachten Sie in jedem Fall, dass dies eine ziemlich gefährliche Funktion von ist rxvt
. Wenn Sie beispielsweise rxvt
als Root unter Linux arbeiten und cat malicious-file
diese Datei etwas wie enthält \e]20;/dev/watchdog\a
(auf Systemen, auf denen ein Watchdog verfügbar ist), wird Ihr System nach einigen Sekunden neu gestartet.