1

Выбор файлов для приложений GTK+ (например, Firefox) выглядит так:

Для приложений qt (например, nomacs) это выглядит так:

Есть ли способ использовать средство выбора файлов QT для приложений GTK и QT?

Я использую Arch 4.20 с установленным KDE.

1 ответ1

2

Как правило, нет. GTK и Qt имеют разные диалоговые окна файлового браузера, потому что диалоговое окно файлового браузера является неотъемлемой частью инструментария, это не какой-то внешний модуль, который вы можете просто заменить другим.


Тем не менее, это отчасти можно, но только для GTK 3.20 и позже. Это не повлияет на программы GTK 2. (На самом деле это не повлияет на все программы GTK 3, только на некоторые. Прежде всего, он не будет работать с приложениями, которые добавляют свои собственные элементы в диалог, а затем с большинством других, которые я не знаю почему. К счастью, он работает с Firefox, что, вероятно, составит 95% вашего варианта использования.)

Для этого вы можете заставить GTK-инструментарий использовать «порталы» - функцию интеграции с Flatpak, которая обычно позволяет программам с песочницей открывать различные средства выбора в хост-системе (вне песочницы) и получать результат. Это обязательно означает, что приложение / инструментарий должно каким-то образом вызывать внешний сборщик вместо того, чтобы использовать его встроенный, и указанный внешний сборщик может быть заменен.

В этой ситуации вы хотите принудительно включить эту функцию без использования Flatpak, и для этого есть скрытая опция (хотя предназначена только для разработчиков - и, как я уже упоминал, работает только для некоторых приложений).

Дополнительное предупреждение: это очень широкая опция, которая может привести к тому, что через портал будут проходить многие другие операции, такие как настройки рабочего стола, настройка прокси-сервера и т.д. Ваш пробег может отличаться. Гарантия не действует, если печать сломана.

  1. Вам нужно будет установить два компонента:

    • Основной сервис портала (брокер), называется xdg-desktop-portal.

    • Реализация портала KDE (пользовательский интерфейс), называемая xdg-desktop-portal-kde.

  2. Поскольку вы используете 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
    
  3. Наконец, запустите ваше приложение на основе GTK3, указав использовать порталы даже вне среды Flatpak:

    GTK_USE_PORTAL="1" zenity --file-selection
    GTK_USE_PORTAL="1" firefox
    

Из моих тестов это работает с Zenity, Firefox, GEdit, но не работает с Mousepad или Evince. (Я не тестировал Chromium, но в любом случае у него уже есть свои собственные переключатели файлов).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .