Bug 60524
| Summary: | Некорректное отображение превью для pdf и изображений в yazi | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Product: | Sisyphus | Reporter: | Шатков Павел Вадимович <shatkovpv> | ||||||||||||||||
| Component: | ueberzugpp | Assignee: | srebrov <srebrov> | ||||||||||||||||
| Status: | NEW --- | QA Contact: | qa-sisyphus | ||||||||||||||||
| Severity: | normal | ||||||||||||||||||
| Priority: | P5 | CC: | amakeenk, antohami, kurachenko.urup, nenderus, rider, srebrov | ||||||||||||||||
| Version: | unstable | ||||||||||||||||||
| Hardware: | x86_64 | ||||||||||||||||||
| OS: | Linux | ||||||||||||||||||
| Attachments: |
|
||||||||||||||||||
Похоже, проблема не в самом yazi, а в отрисовке превью через ueberzugpp (xfce4-terminal не поддерживает ни Kitty protocol, ни Sixel, поэтому yazi рисует превью отдельным X11-окном ueberzugpp поверх терминала — под xfwm4 у таких окон бывают проблемы с позиционированием и стэкингом). Чтобы это подтвердить, нужно воспроизвести ошибку на «чистом» ueberzugpp, без yazi (официальная инструкция: https://yazi-rs.github.io/docs/image-preview#debug-ueberzug): 1. Установить ueberzugpp: # apt-get install ueberzugpp 2. В том же xfce4-terminal (на полный экран, как в сценарии бага) выполнить: $ mkfifo /tmp/ub-fifo $ ueberzugpp layer --socket /tmp/ub-fifo & $ sleep 1 $ ueberzugpp cmd -s /tmp/ub-fifo -p add -i test -x 5 -y 5 --max-width 40 --max-height 20 -f /путь/к/любой/картинке.jpg (вместо картинки можно указать и pdf-превью, но достаточно обычного изображения) 3. Оценить результат: - Если картинка рисуется смещённой, вылезает за пределы терминала или поверх других окон — баг в ueberzugpp (или в его взаимодействии с xfwm4), а не в yazi. - Если картинка рисуется ровно в указанных координатах (x=5, y=5) — тогда проблема на стороне yazi. Дополнительно полезно проверить: - отключить композитор xfwm4 (Настройки → Диспетчер окон (дополнительно) → Композитор) и повторить шаг 2; - проверить, не включено ли дробное масштабирование экрана (fractional scaling) — оно ломает координаты ueberzugpp. Пожалуйста, приложите к багу вывод yazi --debug и скриншот результата теста с ueberzugpp standalone. По результатам либо перевесим баг на ueberzugpp, либо будем смотреть дальше. Created attachment 22184 [details]
Результат yazi --debug
Created attachment 22185 [details]
Результат ueberzugpp layer
Спасибо за результаты, это очень информативно. Разбор:
1. Тест ueberzugpp standalone отработал корректно — картинка нарисовалась ровно в заданных координатах (x=5, y=5), без смещений и наложений. Значит, сам механизм отрисовки ueberzugpp под xfwm4 работает, и проблема, судя по всему, в том, как yazi вычисляет геометрию превью.
2. В выводе yazi --debug есть важная деталь:
Emulator.detect: csi_16t: (0, 0)
Adapter.matches : X11
Dimension.available: Dimension { rows: 37, columns: 157, width: 0, height: 0 }
yazi не смог получить пиксельный размер ячейки терминала (запрос CSI 16t вернул 0x0), поэтому width/height терминала в пикселях равны нулю. Без пиксельной геометрии yazi не может правильно рассчитать размер и положение превью в ячейках — отсюда и некорректное отображение (превью не масштабируется под панель и перекрывает её содержимое, видно на обоих скриншотах).
3. Дополнительно: в системе ueberzugpp 2.9.8 — это версия из p11, тогда как в Sisyphus уже 2.9.10. Похоже, стенд обновлён до Sisyphus не полностью. Просьба:
- обновить систему целиком (apt-get dist-upgrade) и убедиться, что ueberzugpp обновился до 2.9.10;
- после этого повторить проверку превью в yazi.
4. Также приложите, пожалуйста, лог yazi в режиме отладки:
$ YAZI_LOG=debug yazi .
(открыть превью любого изображения, выйти, лог будет в ~/.local/state/yazi/yazi.log)
Если после обновления ueberzugpp до 2.9.10 проблема сохранится, заведу issue в апстриме yazi по поводу обработки случая csi_16t=(0,0) на VTE-терминалах под X11.
Проверил ещё раз на ветке Sisyphus, команда yazi --debug выводит error: unexpected argument '--debug' found tip: to pass '--debug' as a value, use '-- --debug' Usage: yazi [OPTIONS] [ENTRIES]... For more information, try '--help'. результат $YAZI_LOG=debug yazi вместе с актуальной версией yazi и ueberzugpp прикладываю. Прикладываю результат ueberzugpp layer на sisyphus репозитории Created attachment 22189 [details]
Результат yazi --debug на Sisyphus
Created attachment 22190 [details]
Результат YAZI_LOG=debug yazi с версиями пакетов
Спасибо! Вижу, что система обновлена: yazi-26.9.1-alt1, ueberzugpp-2.9.10-alt1, и standalone-тест ueberzugpp на Sisyphus снова отработал корректно.
Пара замечаний:
1. В новых версиях yazi флаг --debug убрали из CLI — диагностический блок теперь выводится командой:
$ yazi --version
2. Из лога видно, что yazi отправляет в ueberzugpp корректный прямоугольник превью:
{"action":"add","identifier":"yazi","x":148,"y":1,"max_width":88,"max_height":51,...}
т.е. команды формируются штатно.
Но главный вопрос остался без ответа: воспроизводится ли сама ошибка отображения после обновления до yazi-26.9.1 + ueberzugpp-2.9.10? Пожалуйста:
- запустите yazi на обновлённой системе, выберите pdf/изображение и приложите свежий скриншот;
- приложите вывод yazi --version (нас интересует, по-прежнему ли csi_16t равен (0, 0) — именно из-за нулевой пиксельной геометрии yazi может неверно масштабировать превью).
Если ошибка воспроизводится и csi_16t по-прежнему (0, 0) — буду готовить репорт в апстрим yazi.
Небольшая поправка к моему предыдущему комментарию: полный диагностический блок (Emulator/Adapter/Dependencies) в новых версиях yazi выводится не через yazi --version (он теперь показывает только краткую версию), а отдельной командой: $ ya env Пожалуйста, приложите вывод `ya env`, запущенный в том же xfce4-terminal, где воспроизводится проблема. Нас в первую очередь интересует секция Emulator — значение csi_16t (в прежнем выводе оно было (0, 0), что лишает yazi пиксельной геометрии терминала). И главное: уточните, пожалуйста, воспроизводится ли сама ошибка отображения превью на текущих версиях yazi-26.9.1 + ueberzugpp-2.9.10? Если да — приложите свежий скриншот. Created attachment 22191 [details]
баг yazi на Sisyphus
Прикладываю ошибку yazi на Sisyphus
Created attachment 22192 [details]
Результат ya env
прикрепляю результат вывода команды ya env
Итог по последним данным (ya env + скриншот с Sisyphus):
Ошибка воспроизводится на актуальных yazi-26.9.1-alt1 + ueberzugpp-2.9.10-alt1. Диагностика подтверждает первоначальную гипотезу:
Emulator.probe: version "VTE(8003)", csi_16t: (0, 0)
TERM.dimension : Dimension { cols: 237, rows: 53, width: 0, height: 0 }
xfce4-terminal (VTE) не сообщает пиксельный размер ячейки: ни через escape-запрос CSI 16t (ответ 0x0), ни, судя по всему, через TIOCGWINSZ. Из-за этого ueberzugpp на X11 не может корректно пересчитать координаты/размеры из ячеек в пиксели — превью рисуется не того размера и не на своём месте (на скриншоте: картинка намного меньше панели превью и сдвинута).
Это известный класс проблем ueberzugpp — апстрим в похожих случаях видел в логах «ioctl sizes: COLS=0 ROWS=0 XPIXEL=0 YPIXEL=0» (https://github.com/jstkdng/ueberzugpp/issues/170). То есть это не дефект сборки пакета yazi в Sisyphus, а ограничение связки ueberzugpp + VTE-терминал без пиксельной геометрии.
Перевешиваю баг на компонент ueberzugpp.
Что можно сделать:
1. Для финального подтверждения приложите, пожалуйста, лог ueberzugpp в debug-режиме:
$ SPDLOG_LEVEL=debug yazi .
(открыть превью изображения, выйти; лог будет в /tmp/ueberzugpp-$USER.log — ищем там строку «ioctl sizes»)
2. Обходные пути (работают уже сейчас):
- использовать терминал с поддержкой kitty graphics protocol (kitty, wezterm, Konsole) — тогда ueberzugpp не нужен вовсе, yazi рисует превью нативно;
- скомпенсировать смещение вручную через ~/.config/yazi/yazi.toml:
[preview]
ueberzug_scale = <коэффициент>
ueberzug_offset = [x, y, width, height]
(https://yazi-rs.github.io/docs/configuration/yazi#preview.ueberzug_scale)
3. Дальнейшее исправление — в апстриме ueberzugpp (корректный фолбэк при нулевой пиксельной геометрии терминала). Заведу issue по результатам лога из п.1.
Проблема в отрисовке превью через ueberzugpp на X11 (терминал VTE не сообщает пиксельную геометрию), а не в yazi. Перевешиваю на ueberzugpp. После выполнения команды SPDLOG_LEVEL=debug yazi . в файле ueberzugpp-$USER.log появилось следующее:
_ _ _
| | | | | | _ _
| | | | ___| |__ ___ _ __ _____ _ __ _ _| |_ _| |_
| | | |/ _ \ '_ \ / _ \ '__|_ / | | |/ _` |_ _|_ _|
| |_| | __/ |_) | __/ | / /| |_| | (_| | |_| |_|
\___/ \___|_.__/ \___|_| /___|\__,_|\__, |
__/ |
|___/ v2.9.10
[2026-09-15 11:17:52.081] [terminal] [info] TERM = xterm-256color
[2026-09-15 11:17:52.081] [terminal] [info] PTY = /dev/pts/0
[2026-09-15 11:17:52.082] [X11] [info] Canvas created
[2026-09-15 11:17:52.082] [main] [info] Listening for commands on socket /tmp/.private/test/ueberzugpp-19958.socket
[2026-09-15 11:17:52.085] [main] [info] Command received: {"action":"add","identifier":"yazi","max_height":51,"max_width":88,"path":"/tmp/.private/test/yazi-1000/E27V7EDF3PWDMLBGNZ6E7BCPQU","x":148,"y":1}
[2026-09-15 11:17:52.087] [opencv] [info] loading file /tmp/.private/test/yazi-1000/E27V7EDF3PWDMLBGNZ6E7BCPQU
[2026-09-15 11:17:53.137] [main] [info] Command received: {"action":"remove","identifier":"yazi"}
[2026-09-15 11:17:53.169] [main] [info] Command received: {"action":"add","identifier":"yazi","max_height":51,"max_width":88,"path":"/tmp/.private/test/yazi-1000/7UHXZ6AGV4CXMEAIGWH26XLIOI","x":148,"y":1}
[2026-09-15 11:17:53.173] [opencv] [info] loading file /tmp/.private/test/yazi-1000/7UHXZ6AGV4CXMEAIGWH26XLIOI
[2026-09-15 11:17:54.237] [main] [info] Command received: {"action":"remove","identifier":"yazi"}
[2026-09-15 11:17:55.990] [main] [info] Exiting ueberzugpp
однако запуск YAZI_LOG=debug yazi . выдаёт ожидаемый результат
_ _ _
| | | | | | _ _
| | | | ___| |__ ___ _ __ _____ _ __ _ _| |_ _| |_
| | | |/ _ \ '_ \ / _ \ '__|_ / | | |/ _` |_ _|_ _|
| |_| | __/ |_) | __/ | / /| |_| | (_| | |_| |_|
\___/ \___|_.__/ \___|_| /___|\__,_|\__, |
__/ |
|___/ v2.9.10
[2026-09-15 11:27:31.653] [terminal] [info] TERM = xterm-256color
[2026-09-15 11:27:31.653] [terminal] [info] PTY = /dev/pts/0
[2026-09-15 11:27:31.653] [terminal] [debug] ioctl sizes: COLS=237 ROWS=53 XPIXEL=0 YPIXEL=0
[2026-09-15 11:27:31.653] [terminal] [debug] iterm2 is not supported
[2026-09-15 11:27:31.654] [terminal] [debug] X11 is supported
[2026-09-15 11:27:31.654] [terminal] [debug] Using fallback X11 window id 31457283
[2026-09-15 11:27:31.654] [terminal] [debug] X11 sizes: XPIXEL=1920 YPIXEL=1044
[2026-09-15 11:27:31.654] [terminal] [debug] Wayland is not supported
[2026-09-15 11:27:31.654] [terminal] [debug] padding_horiz=18 padding_vert=18
[2026-09-15 11:27:31.654] [terminal] [debug] font_width=7 font_height=19
[2026-09-15 11:27:31.654] [X11] [info] Canvas created
[2026-09-15 11:27:31.655] [main] [info] Listening for commands on socket /tmp/.private/test/ueberzugpp-20120.socket
[2026-09-15 11:27:31.657] [main] [info] Command received: {"action":"add","identifier":"yazi","max_height":51,"max_width":88,"path":"/tmp/.private/test/yazi-1000/E27V7EDF3PWDMLBGNZ6E7BCPQU","x":148,"y":1}
[2026-09-15 11:27:31.660] [opencv] [info] loading file /tmp/.private/test/yazi-1000/E27V7EDF3PWDMLBGNZ6E7BCPQU
[2026-09-15 11:27:31.666] [X11] [debug] Initializing canvas
[2026-09-15 11:27:31.666] [X11] [debug] Created child window 58720256 at (1054,37) with parent 31457283
[2026-09-15 11:27:31.666] [X11] [debug] Received expose event for window 58720256
[2026-09-15 11:27:31.666] [X11] [debug] Received expose event for window 58720256
[2026-09-15 11:27:33.497] [main] [info] Command received: {"action":"remove","identifier":"yazi"}
[2026-09-15 11:27:33.528] [main] [info] Command received: {"action":"add","identifier":"yazi","max_height":51,"max_width":88,"path":"/tmp/.private/test/yazi-1000/7UHXZ6AGV4CXMEAIGWH26XLIOI","x":148,"y":1}
[2026-09-15 11:27:33.531] [opencv] [info] loading file /tmp/.private/test/yazi-1000/7UHXZ6AGV4CXMEAIGWH26XLIOI
[2026-09-15 11:27:33.534] [X11] [debug] Initializing canvas
[2026-09-15 11:27:33.534] [X11] [debug] Created child window 58720258 at (1054,37) with parent 31457283
[2026-09-15 11:27:33.536] [X11] [debug] Received expose event for window 58720258
[2026-09-15 11:27:33.537] [X11] [debug] Received expose event for window 58720258
[2026-09-15 11:27:34.373] [main] [info] Command received: {"action":"remove","identifier":"yazi"}
[2026-09-15 11:27:36.164] [main] [info] Exiting ueberzugpp
Спасибо за лог — причина найдена с точностью до строки кода. Ключевые строки лога: [terminal] [debug] ioctl sizes: COLS=237 ROWS=53 XPIXEL=0 YPIXEL=0 [terminal] [debug] X11 sizes: XPIXEL=1920 YPIXEL=1044 [terminal] [debug] font_width=7 font_height=19 [X11] [debug] Created child window 58720256 at (1054,37) Что происходит: 1. xfce4-terminal не сообщает пиксельный размер через TIOCGWINSZ (XPIXEL=0 YPIXEL=0) — подтверждено. 2. ueberzugpp берёт размер окна X11 (1920x1044) и вычисляет ширину ячейки как floor((1920-2*18)/237) = 7 пикселей, хотя реальная ширина ячейки 1920/237 ≈ 8.1 пикселя. 3. Координата превью считается целочисленно: x * font_width. Ошибка ~1.1 px на каждую колонку накапливается: при x=5 (ручной тест) это 5 px и незаметно, а при x=148 (панель превью yazi) окно создаётся в точке 18+148*7=1054 вместо правильных ~1217 — сдвиг ~160 px влево, превью «вылезает» на соседнюю панель. Размер тоже занижается: max_width=88 ячеек → 616 px вместо ~713 px. Итого: это баг в ueberzugpp — при нулевой пиксельной геометрии терминала размер ячейки усекается до целого, и ошибка позиционирования растёт линейно с координатой. В KDE ошибка не воспроизводится, потому что там Konsole (kitty protocol, ueberzugpp не используется). Завёл issue в апстрим: https://github.com/jstkdng/ueberzugpp/issues/289 Обходные пути остаются актуальными: - терминал с kitty graphics protocol (kitty, wezterm, Konsole); - компенсация через ueberzug_scale/ueberzug_offset в ~/.config/yazi/yazi.toml. |

Description
Шатков Павел Вадимович 2026-09-14 12:47:39 MSKCreated attachment 22181 [details] Реальный результат Версия пакета: yazi-26.5.6-alt1 (x86_64) Стенды (Обновлённые до Sisyphus): ALT Education p11 xfce (x86_64) Шаги воспроизведения: 1. Установить пакет с необходимой библиотекой для отрисовки превью: # apt-get install yazi ueberzugpp 2. Открыть терминал в полный экран 3. Запустить программу: $ yazi . 4. Выбрать pdf файл или изображение Ожидаемый результат: Запуск программы и корректное отображение превью файлов. Реальный результат: Некорректное отображение превью файлов, превью вылезает на файловый менеджер Дополнительно: Воспроизводиться только в xfce Проверено на виртуальных машинах proxmox и реальном стенде В окружении kde ошибка не воспроизводится