Выбор файлов для приложений GTK+ (например, Firefox) выглядит так:
Для приложений qt (например, nomacs) это выглядит так:
Есть ли способ использовать средство выбора файлов QT для приложений GTK и QT?
Я использую Arch 4.20 с установленным KDE.
Выбор файлов для приложений GTK+ (например, Firefox) выглядит так:
Для приложений qt (например, nomacs) это выглядит так:
Есть ли способ использовать средство выбора файлов QT для приложений GTK и QT?
Я использую Arch 4.20 с установленным KDE.
Как правило, нет. GTK и Qt имеют разные диалоговые окна файлового браузера, потому что диалоговое окно файлового браузера является неотъемлемой частью инструментария, это не какой-то внешний модуль, который вы можете просто заменить другим.
Тем не менее, это отчасти можно, но только для GTK 3.20 и позже. Это не повлияет на программы GTK 2. (На самом деле это не повлияет на все программы GTK 3, только на некоторые. Прежде всего, он не будет работать с приложениями, которые добавляют свои собственные элементы в диалог, а затем с большинством других, которые я не знаю почему. К счастью, он работает с Firefox, что, вероятно, составит 95% вашего варианта использования.)
Для этого вы можете заставить GTK-инструментарий использовать «порталы» - функцию интеграции с Flatpak, которая обычно позволяет программам с песочницей открывать различные средства выбора в хост-системе (вне песочницы) и получать результат. Это обязательно означает, что приложение / инструментарий должно каким-то образом вызывать внешний сборщик вместо того, чтобы использовать его встроенный, и указанный внешний сборщик может быть заменен.
В этой ситуации вы хотите принудительно включить эту функцию без использования Flatpak, и для этого есть скрытая опция (хотя предназначена только для разработчиков - и, как я уже упоминал, работает только для некоторых приложений).
Дополнительное предупреждение: это очень широкая опция, которая может привести к тому, что через портал будут проходить многие другие операции, такие как настройки рабочего стола, настройка прокси-сервера и т.д. Ваш пробег может отличаться. Гарантия не действует, если печать сломана.
Вам нужно будет установить два компонента:
Основной сервис портала (брокер), называется xdg-desktop-portal.
Реализация портала KDE (пользовательский интерфейс), называемая xdg-desktop-portal-kde.
Поскольку вы используете KDE, достаточно установить эти пакеты, и они будут автоматически запускаться при необходимости. Пропустите оставшуюся часть этой части и прыгните прямо к шагу 3.
Тем временем тем, кто пытается сделать это в GNOME, нужно будет запустить все вручную и добавить переменную среды, заставляющую оба компонента использовать поведение KDE. Сначала запустите специфичную для KDE реализацию, указав отключить обычную для Qt функцию "маскарад под GTK":
XDG_CURRENT_DESKTOP="KDE" /usr/lib/xdg-desktop-portal-kde &
Затем запустите посредник портала, используя ту же переменную среды, чтобы он выбрал ранее запущенную реализацию портала KDE, а не GNOME:
XDG_CURRENT_DESKTOP="KDE" /usr/lib/xdg-desktop-portal &
В качестве альтернативы, чтобы все автоматически запускалось через D-Bus, вы можете вместо этого передать эти переменные окружения в dbus-daemon и systemd:
dbus-update-activation-environment --systemd XDG_CURRENT_DESKTOP="KDE"
systemctl --user stop xdg-desktop-portal{,-gtk}
pkill -f xdg-desktop-portal
Наконец, запустите ваше приложение на основе GTK3, указав использовать порталы даже вне среды Flatpak:
GTK_USE_PORTAL="1" zenity --file-selection
GTK_USE_PORTAL="1" firefox
Из моих тестов это работает с Zenity, Firefox, GEdit, но не работает с Mousepad или Evince. (Я не тестировал Chromium, но в любом случае у него уже есть свои собственные переключатели файлов).