Ändern des Hintergrundbilds in tmux in urxvt-256 mit dem Befehl printf

Ändern des Hintergrundbilds in tmux in urxvt-256 mit dem Befehl printf

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:

Bildbeschreibung hier eingeben

Auch im Bildschirm:

Bildbeschreibung hier eingeben

Aber dieser printf-Befehl funktioniert in tmux einfach nicht:

Bildbeschreibung hier eingeben

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, tmuxund screensind drei verschiedene Terminalemulatoren, der erste verwendet X11 als Backend für Anzeige/Eingabe, während die beiden anderen ein Host-Terminal verwenden.

tmuxund screensind 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.

screengibt die Escape-Sequenzen weiter, die es nicht erkennt tmux. Sequenzen, die mit OSC ( \e]) beginnen, enden mit BEL ( \a/ ^G). Wenn tmuxein 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 rxvtals Root unter Linux arbeiten und cat malicious-filediese 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.

verwandte Informationen