
No puedo usar el comando printf cuando estoy dentro de tmux.
El comando para cambiar el fondo sobre la marcha es:
printf "\e]20;/home/alexsson/Downloads/alternativ.png;\a"
Puedo hacer esto directamente en urxvt:
También dentro de la pantalla:
Pero este comando printf simplemente no funciona en tmux:
¿Alguna idea de cómo hacerlo funcionar en tmux?
PD: Hay una pregunta similar aquí:Problema de caracteres de secuencia de control y tmux. Sin embargo, es difícil encontrar esa pregunta si no se utilizan los términos de búsqueda correctos. Creo que mi publicación será interesante para muchos más usuarios que no saben qué términos de búsqueda usar pero que son más comunes (como simplemente cambiar el fondo). Tampoco hay mucho escrito en la documentación sobre esto.
Respuesta1
urxvt
, tmux
y screen
son tres emuladores de terminal diferentes, el primero usa X11 como backend para visualización/entrada, mientras que los otros dos usan un terminal host.
tmux
y screen
son en realidad emuladores de terminal, implementan una serie de funciones (como atributos de caracteres en negrita, limpieza de pantalla...) que se activan mediante algunas secuencias de escape, pero configurando elimagen de fondono está entre las características que admiten.
Recuerde también que una sesión screen
/ tmux
se puede conectar a cualquier tipo de terminal host, incluso a varios a la vez (con -x
), algunos pueden admitir esa característica, otros no.
screen
transmitirá las secuencias de escape que no reconoce, tmux
no lo reconoce. Las secuencias que comienzan con OSC ( \e]
) terminan en BEL ( \a
/ ^G
). Cuando tmux
ve un \e]
, lee hasta \a
(o la siguiente secuencia de escape) y si no reconoce esa secuencia, simplemente la descarta.
Sin embargo,tmux
admite el paso de texto arbitrario palabra por palabra a los terminales hostcon la \ePtmux;\e<text>\e\
secuencia. Entonces aquí puedes hacer:
printf '\ePtmux;\e\e]20;/home/alexsson/Downloads/alternativ.png;\a\e\\'
En cualquier caso, tenga en cuenta que se trata de una característica bastante peligrosa de rxvt
. Por ejemplo, si ejecuta rxvt
como root en Linux y ejecuta cat malicious-file
con ese archivo que contiene algo como \e]20;/dev/watchdog\a
(en sistemas donde hay un perro guardián disponible), su sistema se reiniciará después de unos segundos.