
Não consigo usar o comando printf quando estou dentro do tmux.
O comando para alterar o plano de fundo dinamicamente é:
printf "\e]20;/home/alexsson/Downloads/alternativ.png;\a"
Posso fazer isso diretamente no urxvt:
Também dentro da tela:
Mas este comando printf simplesmente não funciona no tmux:
Alguma ideia de como fazer funcionar no tmux?
PS: Há uma pergunta semelhante aqui:problema de caracteres de sequência de controle e tmux. No entanto, é difícil encontrar essa pergunta se não usarmos os termos de pesquisa corretos. Acho que minha postagem será interessante para muito mais usuários que não sabem quais termos de pesquisa usar, mas são mais comuns (como simplesmente alterar o plano de fundo). Também não há muito escrito na documentação sobre isso.
Responder1
urxvt
, tmux
e screen
são três emuladores de terminal diferentes, o primeiro usa X11 como backend para exibição/entrada, enquanto os outros dois usam um terminal host.
tmux
e screen
são realmente emuladores de terminal, eles implementam uma série de recursos (como atributos de caracteres em negrito, limpeza de tela...) ativados por meio de algumas sequências de escape, mas definindo oimagem de fundonão está entre os recursos que eles suportam.
Lembre-se também de que uma sessão screen
/ tmux
pode ser anexada a qualquer tipo de terminal host, até mesmo a vários de uma vez (com -x
), alguns podem suportar esse recurso, outros não.
screen
transmitirá as sequências de escape que não reconhece, tmux
não reconhece. Sequências que começam com OSC ( \e]
) terminam em BEL ( \a
/ ^G
). Quando tmux
vê a \e]
, ele lê até \a
(ou a próxima sequência de escape) e se não reconhece essa sequência, apenas a descarta.
No entanto,tmux
suporta a passagem de texto arbitrário literalmente para o (s) terminal (is) hostcom a \ePtmux;\e<text>\e\
sequência. Então aqui você poderia fazer:
printf '\ePtmux;\e\e]20;/home/alexsson/Downloads/alternativ.png;\a\e\\'
De qualquer forma, observe que esse é um recurso bastante perigoso do rxvt
. Por exemplo, se você executar rxvt
como root no Linux e executar cat malicious-file
com aquele arquivo contendo algo como \e]20;/dev/watchdog\a
(em sistemas onde um watchdog está disponível), isso irá reinicializar seu sistema após alguns segundos.