当我在 tmux 中时,我无法使用 printf 命令。
动态更改背景的命令是:
printf "\e]20;/home/alexsson/Downloads/alternativ.png;\a"
我可以直接在 urxvt 中执行此操作:
还有屏幕内:
但是这个 printf 命令在 tmux 中根本不起作用:
知道如何让它在 tmux 中工作吗?
PS:这里有一个类似的问题:tmux 和控制序列字符问题。然而,如果不使用正确的搜索词,就很难找到该问题。我认为我的帖子对于更多不知道使用哪些搜索术语但更常见的用户来说会很有趣(例如简单地更改背景)。文档中也没有太多关于此的内容。
答案1
urxvt
、tmux
和screen
是三个不同的终端仿真器,第一个使用 X11 作为显示/输入的后端,而其他两个使用主机终端。
tmux
它们screen
是真正的终端模拟器,它们实现了许多通过一些转义序列激活的功能(如粗体字符属性、清除屏幕...),但设置背景图片不属于他们支持的功能。
另请记住,screen
/tmux
会话可以附加到任何类型的主机终端,甚至可以一次附加到多个主机终端(使用-x
),有些可能支持该功能,有些可能不支持。
screen
将传递它无法识别的转义序列,tmux
不会。以 OSC ( ) 开头的序列以 BEL ( / )\e]
结尾。当看到 a 时,它会读取直到(或下一个转义序列),如果它无法识别该序列,它就会丢弃它。\a
^G
tmux
\e]
\a
然而,tmux
支持将任意文本逐字传递到主机终端与\ePtmux;\e<text>\e\
顺序。所以在这里,你可以这样做:
printf '\ePtmux;\e\e]20;/home/alexsson/Downloads/alternativ.png;\a\e\\'
无论如何,请注意这是 的一个相当危险的功能rxvt
。例如,如果您rxvt
在 Linux 上以 root 身份运行并运行cat malicious-file
包含类似内容的文件\e]20;/dev/watchdog\a
(在有看门狗的系统上),那么几秒钟后就会重新启动您的系统。