Измените фоновое изображение в tmux в urxvt-256 с помощью команды printf

Измените фоновое изображение в tmux в urxvt-256 с помощью команды printf

Я не могу использовать команду printf, когда нахожусь внутри tmux.

Команда для смены фона «на лету»:

printf "\e]20;/home/alexsson/Downloads/alternativ.png;\a"

Я могу сделать это прямо в urxvt:

введите описание изображения здесь

Также внутри экрана:

введите описание изображения здесь

Но эта команда printf просто не работает в tmux:

введите описание изображения здесь

Есть идеи, как заставить это работать в tmux?

PS: Похожий вопрос есть здесь:tmux и проблема с символами управляющей последовательности. Однако, трудно найти этот вопрос, если не использовать правильные поисковые термины. Я думаю, что мой пост будет интересен гораздо большему количеству пользователей, которые не знают, какие поисковые термины использовать, но более распространены (например, просто смена фона). В документации об этом также не так много написано.

решение1

urxvttmuxи представляют собой три различных эмулятора терминала , 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(в системах, где доступен сторожевой таймер), это перезагрузит вашу систему через несколько секунд.

Связанный контент