
Я не могу использовать команду printf, когда нахожусь внутри tmux.
Команда для смены фона «на лету»:
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
передаст последовательности escape, которые он не распознает, tmux
не. Последовательности, начинающиеся с OSC ( \e]
), заканчиваются на BEL ( \a
/ ^G
). Когда tmux
видит \e]
, он читает до \a
(или до следующей последовательности escape), и если он не распознает эту последовательность, он просто отбрасывает ее.
Однако,tmux
поддерживает передачу произвольного текста дословно на хост-терминал(ы)с \ePtmux;\e<text>\e\
последовательностью. Так вот, вы могли бы сделать:
printf '\ePtmux;\e\e]20;/home/alexsson/Downloads/alternativ.png;\a\e\\'
В любом случае, имейте в виду, что это довольно опасная функция rxvt
. Например, если вы работаете rxvt
как root в Linux и запускаете cat malicious-file
файл, содержащий что-то вроде \e]20;/dev/watchdog\a
(в системах, где доступен сторожевой таймер), это перезагрузит вашу систему через несколько секунд.