Bug 48211 - xdg-desktop-portal-gtk для XFCE
Summary: xdg-desktop-portal-gtk для XFCE
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: xdg-desktop-portal (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Yuri N. Sedunov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-10-26 21:24 MSK by Ivan A. Melnikov
Modified: 2023-10-27 22:24 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ivan A. Melnikov 2023-10-26 21:24:04 MSK
Простите за длинное описание.

TL;DR: Есть ли возможность создать *portals.conf так, чтобы он использовался только под XFCE?

== Проблема ==

Какое-то время назад xdg-desktop-portal-gtk перестал работать на Сизифе под XFCE.

Так сложилось, что я использую XFCE, и у меня есть программа (Cardinal), использующая xfce-desktop-portal для переносимых диалогов выбора файлов (Open и Save).

Недавно эти диалоги сломались: при нажатии соответсвующих пунктов в меню ничего не происходит, при этом в dbus-monitor можно увидеть:

error time=1698343267.248000 sender=:1.56 -> destination=:1.55 error_name=org.freedesktop.DBus.Error.UnknownMethod reply_serial=11
   string "No such interface “org.freedesktop.portal.FileChooser” on object at path /org/freedesktop/portal/desktop"

Откат до xdg-desktop-portal 1.16 [1] исправляет проблему.

[1] https://git.altlinux.org/tasks/archive/done/_315/323426/build/100/x86_64/rpms/xdg-desktop-portal-1.16.0-alt1.1.x86_64.rpm

Однако это не спортивно, поэтому продолжаем искать.

== portals.conf ==

В гугле и man portals.conf было найдено другое решение -- создать файл /usr/share/xdg-desktop-portal/xfce-portals.conf следующего содержания:

[preferred]
# Use xdg-desktop-portal-gtk for every portal interface
default=gtk

Такой файл был создан и то, что он помогает, было проверено отладочным запуском
/usr/libexec/xdg-desktop-portal --verbose --replace

Однако при стандартном запуске xdg-desktop-portal (через systemd, с помощью активируемого d-bus user serviыe unit'а) этот файл не помогал. Оказывается, при таком запуске переменная $XDG_CURRENT_DIR не попадает в окружение процесса, и поэтому специфичные для окружения конфигурационные файлы игнорируются:

$ xargs -0L1 echo <  /proc/$(pidof /usr/libexec/xdg-desktop-portal)/environ | grep XDG
XDG_DATA_DIRS=/home/iv/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share/:/usr/share/
XDG_RUNTIME_DIR=/run/user/500
XDG_SEAT=seat0
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0


Для себя создал /home/iv/.config/xdg-desktop-portal/portals.conf всё того же содержания:

[preferred]
# Use xdg-desktop-portal-gtk for every portal interface
default=gtk

И это сработало.

Однако хотелось бы дистрибутивного решения. Есть ли сейчас возможность, например, запаковать в какой-нибудь пакет portals.conf так, чтобы он использовался только под XFCE?
Comment 1 Ivan A. Melnikov 2023-10-26 21:25:09 MSK
> использующая xfce-desktop-portal для переносимых диалогов выбора файлов 

Очепятка, xdg-desktop-portal конечно.
Comment 2 Yuri N. Sedunov 2023-10-27 13:42:20 MSK
Тут еще одна история, решение в которой, хоть и с привлечением xdg-desktop-portal-xapp, по сути такое же, как и ваше.

https://forum.artixlinux.org/index.php/topic,6031.0.html

У меня нет понимания в настоящий момент, как можно помочь xfce на системном уровне. Наверное, этому DE нужно самому побеспокоится о себе.
Comment 3 Ivan A. Melnikov 2023-10-27 13:52:00 MSK
(In reply to Yuri N. Sedunov from comment #2)
> Тут еще одна история, решение в которой, хоть и с привлечением
> xdg-desktop-portal-xapp, по сути такое же, как и ваше.
> 
> https://forum.artixlinux.org/index.php/topic,6031.0.html

Интересно, здесь у людей работает XFCE-portals.conf, а у меня нет, XDG_CURRENT_DESKTOP в окружение запущенного systemd xdg-desktop-portal'а не попадает.
Comment 4 Ivan A. Melnikov 2023-10-27 22:24:25 MSK
(In reply to Ivan A. Melnikov from comment #3)
> Интересно, здесь у людей работает XFCE-portals.conf, а у меня нет,
> XDG_CURRENT_DESKTOP в окружение запущенного systemd xdg-desktop-portal'а не
> попадает.

Видимо, где-то должны запускаться подобные команды:

systemctl --user import-environment DESKTOP_SESSION XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE
dbus-update-activation-environment --systemd DESKTOP_SESSION XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE

Интересно, кто этим должен заниматься? Display manager? Или в каждом DE по своему?