16
10月
2024
12:03

为什么需要XDG-DESKTOP-PORTAL包,如何使用它

16 10月 2024 12:03

Linux根据Linux SystemD和D -BUS服务,第三部分Flatpak和Snap具有多种软件媒体。

大概,每个人都知道Flatpak和Snap应用程序配电系统使用沙盒机构,在安全环境中启动应用程序。

为了使“沙箱”内启动的程序可以访问计算机资源,例如文件系统,相机,声音服务器 - 使用SNAP/FLATPAK和操作系统之间的“基于后的”组件(后端)。 该组件称为“ XDG桌面门户”。 从 Flatpak文档 :

_“门户是由于孤立的软件环境的限制,用于安全访问资源的框架。它们为应用程序提供了许多一般功能,包括:确定网络状态,使用文件选择工具,打开URI,创建屏幕图像并执行屏幕广播[...]

门户是为通过FlatPak隔离的应用程序而开发的,但是任何应用程序都可以使用门户网站来提供独立于桌面和工具的功能的单一访问权限。通常,例如,使用PipeWire来解决对Wayland屏幕的总体访问,或者使用Firefox中的开口和保存文件,这些文件使用与当前桌面环境相同的工具集。透明

什么时候需要XDG-DESKTOP-PORTAL的组件?

*使用Flatpak并捕捉时需要

如何安装XDG-DESKTOP-PORTAL?

sudo apt update
sudo apt install xdg-desktop-portal xdg-desktop-portal-gtk

如何启动XDG-Desktop-Portal.Service服务?

该服务是自动启动的,当与操作系统交互时,用户包围了用户。 如果需要,可以手动启动它以检查工作(条件,状态,错误),但仅被当前用户包围。 团队:

systemctl --user start xdg-desktop-portal.service

检查服务状况:

systemctl --user status xdg-desktop-portal.service

呢服务状态 xdg-desktop-portal.service должен быть зелёным - "active (running)". Предупреждения вида "Failed to load RealtimeKit property: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.RealtimeKit1 was not provided by any .service files " и "No skeleton to export" на работу службы xdg-desktop-portal.service не влияют, данные сообщения игнорируем.

XDG-DESKTOP-PORTAL.Service操作的原理是什么?

该组件使用DBUS协议与系统和Flatpak/Snap进行交互。

如何删除XDG-DESKTOP-PORTAL.Service?

如果与SNAP软件包的操作系统相互作用,则不需要Flatpak。 您可以删除这些软件包

sudo apt purge xdg-desktop-portal xdg-desktop-portal-gtk

在哪里

  • XDG-DESKTOP-PORTAL-主要软件包。
  • XDG-DESKTOP-PORTAL-GTK-A默认扩展程序包用于与OS关联的大多数功能(启动应用程序,文件选择,打印,OS设置,一堆Gnome-keyring键等)

呢在文档中 wiki.archlinux.org/title/xdg_desktop_portal сказано, что для каждого окружения рабочего стола есть свои пакеты. Например:
环境gnome->软件包xdg-desktop-portal-gnome
环境KDE->数据包XDG-DESKTOP-PORTAL-KDE
呢* intricated LXQT->软件包XDG-DESKTOP-PORTAL-LXQT

如何确保XDG-DESKTOP-PORTAL.Service的工作?

XDG-DESKTOP-PORTAL组件需要变量

  • XDG_RUNTIME_DIR
  • xdg_config_home
  • xdg_data_dirs
    *等。 看。描述XDG

检查桌面的当前随行语和XDG的其他变量:

env | grep XDG

XDG-DESKTOP-PORTAL配置文件在文件夹中 /usr/share/xdg-desktop-portal/。 他们不应改变。

此外,该组件需要文件中列出的文件夹的名称:
~/.config/user-dirs.dirs

示例 - 查看用户的文件夹列表:

cat ~/.config/user-dirs.dirs

结果:

#此文件由XDG-用户dirs-update编写 \#如果要更改或添加导演,只需编辑您的行 \#插入。 所有本地更改将保留在下一个运行中。 \#格式是xdg_xxx_dir =“ $ home/yyy”,yyy是一个壳牌 \#与归为相关的路径,或xdg_xxx_dir =“ /yyy”,什么 /yyy是 \#绝对路径。 不支持其他格式。 \# xdg_desktop_dir =“ $ home/桌面” xdg_download_dir =“ $ home/loading” XDG_TEMPLATES_DIR =“ $ HOME/模板” xdg_pulichirare_dir =“ $ home/public” xdg_documents_dir =“ $ home/documents” XDG_MUSIC_DIR =“ $ HOME/MUSIC” xdg_pictures_dir =“ $ home/images” xdg_videos_dir =“ $ home/video”

执行命令时创建此文件

xdg-user-dirs-update

OS中的用户文件夹被称为用户配置文件中当前的区域语言设置。 语言参数的本地化还确定了使用命令 可以查看的环境变量locale :

locale

在俄语上安装:

sudo update-locale LANG=ru_RU.UTF-8

如果在安装操作系统时选择俄罗斯语言,则不需要配置。

如何确保XDG-DESKTOP-PORTAL PORTAL的操作如果不启动?

使用用户包围的系统变量的导入:

大多数操作系统都已经足够了:

systemctl --user import-environment XDG_CURRENT_DESKTOP

在Wayland:

systemctl --user import-environment WAYLAND_DISPLAY  XDG_CURRENT_DESKTOP

重新发布并检查门户网站是否有效:

systemctl --user start xdg-desktop-portal.service
systemctl --user status xdg-desktop-portal.service

如何检查XDG-DESKTOP-PORTAL.Service服务的工作?

1)您需要安装Flatpak应用程序,在其中安装另一个应用程序,例如,如书面的铬浏览器 在上一篇文章中

2)首先,检查安装的FlatPak应用程序列表中是否存在浏览器。

flatpak list

3)发射

flatpak run org.chromium.Chromium

4)选择项目“打开文件” - 按下键 ctrl+o 。 应该出现系统对话,其中显示主文件夹的内容。 这意味着门户网站可以工作。

调试

dbus-monitor --session

并在另一个窗口中启动应用程序

flatpak run org.chromium.Chromium

并按 ctrl+o :

在窗口中 dbus-monitor будет выведено много текста:

String“ org.freedesktop.impl.portal.request” 错误时间= 1729069549.930735发件人=:1.49->目标=:1.46 error_name = org.freedesktop.dbus.rror.rror.unknownmethod reploy_serial = 163 string "Объект по пути «/org/freedesktop/portal/desktop/request/1_88/handle_0» не существует" 方法调用时间= 1729069549.931375发件人=:1.46->目标=:1.49序列= 164路径=/org/freedesktop/portal/desktop;接口= org.freedesktop.impl.portal.filechooser;成员= OpenFile object path "/org/freedesktop/portal/desktop/request/1_88/handle_0" string "org.chromium.Chromium" string "x11:0x3a00019" string "Открытие файла" array [ dict entry( string "modal" variant boolean true ) dict entry( string "filters" variant array [ ] ) ] ### 使用XDG-OPEN启动URL或文档的查看 您可以使用一个简单命令,而不是启动应用程序并打开文档 `xdg-open` "имя файла" или URL. 例如: xdg-open https://bfm.ru 或者 xdg-open 388643rus.pdf 用于测试的PDF文件 - “联合国教科文组织首席执行官的消息*[奥德尔azule](https://www.unesco.org/ru/director-general) по случаю Всемирного дня радио 13 февраля 2024 года": [388643rus.pdf](388643rus.pdf) *联合国教科文组织 - 联合国教育,科学和文化。 呢XDG-OPEN实用程序包含在XDG-Utils软件包中,默认情况下在Linux中安装。她的工作在Flatpak容器中发起的过程。还有一个包裹 `flatpak-xdg-utils`, в котором есть особая версия xdg-open, и приложение flatpak-spawn, которое позволяет действия в системе _за пределами_ контейнера. Эта специальная версия `xdg-open` устанавливается по другому пути: `/usr/libexec/flatpak-xdg-utils/` вместо `/usr/bin/xdg-open`. Установка пакета `flatpak-xdg-utils`,通常不需要。 !!!!为了管理Flatpak容器应用程序的权利(许可),有一个图形应用程序FlatSeal(com.github.tchx84.flatseal)。 sudo flatpak install com.github.tchx84.Flatseal flatpak run com.github.tchx84.Flatseal ** FlatSeal ** 允许您限制应用程序许可,例如Android设置“应用程序和通知” - “应用程序许可”: 例如,flatpak的分辨率_dl浏览器铬:_ *网络 - 是 *交流 - 是的 *窗口系统X11-是。 *声音服务器pulseaudio-是的 *打印系统 - 是 * gpu加速度(device = dri) - 默认情况下 - >可以更改为是 *所有设备(网络摄像头) - 是 *所有用户文件(文件系统= home) - 是 *背景(可以在后台工作) - 否 *通知(可能发送通知) - 否 ----- **链接到文档:** *[Flatpak桌面集成](https://docs.flatpak.org/en/latest/desktop-integration.html) *[XDG桌面门户](https://flatpak.github.io/xdg-desktop-portal/) *[flatpak-xdg-utils](https://packages.debian.org/ru/sid/flatpak-xdg-utils)

相关出版物