Correct way to launch xdg desktop portal under bare WM setup?

Correct way to launch xdg desktop portal under bare WM setup?

语境

我正在使用 X11 运行 Void Linux。我没有使用任何桌面环境或显示管理器。我只需startx从 tty 键入即可启动 X11,然后~/.xinitrc启动 BSPWM、polybar 以及我需要的所有其他应用程序。

问题

我使用很多 flatpak 应用程序,它们依赖 xdg 桌面门户来提供文件选择器。当我第一次启动 X11 时,一切正常。但是,如果我退出 X11 并再次从 tty 重新启动它,则所有 Flatpak 应用程序中的文件选择器都会损坏。例如,CTRL+O在 Librewolf 中按调出文件选择器,但它拒绝实际打开我选择的任何文件。同样,尝试下载文件会调出文件选择器,但此后,永远不会真正下载该文件。简而言之:

  1. 我推出X11
  2. 一切正常
  3. 我决定杀死 X11 并退出到 tty
  4. 我再次启动X11
  5. 文件选择器现在在所有 Flatpak 应用程序中均已损坏

目前的解决方案

我的直觉告诉我,一定有一些进程从 X11 开始,但在 X11 退出时没有正确终止。我的解决方案是将这个重磅炸弹放在我的开头和结尾,~/.xinitrc这基本上破坏了与桌面门户相关的所有内容:

kill $(ps aux | grep '/usr/libexec/xdg-' | awk '{print $2}')

这似乎可以解决问题。现在,即使重新启动 X11 后,文件选择器也可以正常工作。

我的问题

我目前的解决方案感觉像是完全破解。通过 grep 名字来杀死进程,真的吗?感觉就像我做错了什么。当然,退出 X11 时必须有一个明确的进程列表,我需要杀死这些进程,或者某种应该自动杀死它们的主管?简而言之,在无 DE / 无 DM 设置中运行 xdg 桌面门户的正确方法是什么,重启X11时不会导致损坏吗?

更多背景信息

我实际上有两个文件负责启动X11。第一个是传统的~/.xinitrc,第二个是我编写的脚本launch_de.sh,由 执行~/.xinitrc。另外,xdg杀手单行词也在一个名为的单独文件中,kill_all_xdg_processes.sh内容如下:

# file: ~/.xinitrc

#!/bin/sh

set -e

kill_all_xdg_portals.sh || true

if [ -d /etc/X11/xinit/xinitrc.d ]; then
  for f in /etc/X11/xinit/xinitrc.d/*; do
    [ -x "$f" ] && . "$f"
  done
  unset f
fi

export GTK_IM_MODULE=fcitx 
export XMODIFIERS=@im=fcitx 
export QT_IM_MODULE=fcitx 
export XIM_PROGRAM=/usr/bin/fcitx 

export _JAVA_AWT_WM_NONREPARENTING=1

xrdb -merge ~/.config/X11/Xresources
xsetroot -cursor_name left_ptr

exec dbus-launch launch_de.sh

# file: launch_de.sh

#!/bin/sh

kill_all_xdg_portals.sh

fcitx5 &

pipewire &
pipewire-pulse &
wireplumber &

polybar &
sxhkd &
nm-applet &
mpd --no-daemon &
xss-lock lock_noblank.sh &

xmodmap ~/.config/X11/Xmodmap

bspwm

kill_all_xdg_portals.sh
# file: kill_all_xdg_portals.sh

#!/bin/sh
kill $(ps aux | grep '/usr/libexec/xdg-' | awk '{print $2}')

挥之不去的进程

For more information, here is the output of ps aux | grep xdg at various stages (this is WITHOUT running the kill_all_xdg_portals.sh script)

Immediately after boot, before launching X11

renzev  1426  0.0  0.0   6560  2432 tty1     S+   11:51   0:00 grep xdg

Having launched X11

renzev  1598  0.0  0.1 470404 12672 ?        Sl   11:51   0:00 /usr/libexec/xdg-desktop-portal
renzev  1610  0.0  0.0 529392  5632 ?        Sl   11:51   0:00 /usr/libexec/xdg-document-portal
renzev  1615  0.0  0.0 305608  5248 ?        Sl   11:51   0:00 /usr/libexec/xdg-permission-store
renzev  1630  0.1  0.2 412324 22564 ?        Sl   11:51   0:00 /usr/libexec/xdg-desktop-portal-gtk
renzev  1776  0.0  0.0   6560  2560 pts/1    S+   11:52   0:00 grep xdg

Having lanuched a flatpak app (librewolf)

renzev  1598  0.0  0.1 470404 12672 ?        Sl   11:51   0:00 /usr/libexec/xdg-desktop-portal
renzev  1610  0.0  0.0 529392  5632 ?        Sl   11:51   0:00 /usr/libexec/xdg-document-portal
renzev  1615  0.0  0.0 305608  5248 ?        Sl   11:51   0:00 /usr/libexec/xdg-permission-store
renzev  1630  0.1  0.2 412324 22564 ?        Sl   11:51   0:00 /usr/libexec/xdg-desktop-portal-gtk
renzev  1899  0.0  0.0   2568  1664 ?        S    11:52   0:00 bwrap --args 43 xdg-dbus-proxy --args=45
renzev  1900  0.1  0.0 231984  4992 ?        Sl   11:52   0:00 xdg-dbus-proxy --args=45
renzev  2176  0.0  0.0   6560  2560 pts/1    S+   11:52   0:00 grep xdg

After exiting X11

renzev  1598  0.0  0.1 739376 12116 ?        Sl   11:51   0:00 /usr/libexec/xdg-desktop-portal
renzev  1610  0.0  0.0 751620  5888 ?        Sl   11:51   0:00 /usr/libexec/xdg-document-portal
renzev  1615  0.0  0.0 306348  6272 ?        Sl   11:51   0:00 /usr/libexec/xdg-permission-store
renzev  3243  0.0  0.0   6560  2432 tty1     S+   11:55   0:00 grep xdg

After launching X11 a second time

renzev  1598  0.0  0.1 740744 13012 ?        Sl   11:51   0:00 /usr/libexec/xdg-desktop-portal
renzev  1610  0.0  0.0 751620  5888 ?        Sl   11:51   0:00 /usr/libexec/xdg-document-portal
renzev  1615  0.0  0.0 306348  6272 ?        Sl   11:51   0:00 /usr/libexec/xdg-permission-store
renzev  3382  0.1  0.1 470404 12800 ?        Sl   11:56   0:00 /usr/libexec/xdg-desktop-portal
renzev  3395  0.0  0.0 305608  5120 ?        Sl   11:56   0:00 /usr/libexec/xdg-permission-store
renzev  3412  0.1  0.2 412324 22276 ?        Sl   11:56   0:00 /usr/libexec/xdg-desktop-portal-gtk
renzev  3556  0.0  0.0   6560  2432 pts/1    S+   11:56   0:00 grep xdg

After launching librewolf a second time (now the filechooser is broken)

renzev  1598  0.0  0.1 740744 13012 ?        Sl   11:51   0:00 /usr/libexec/xdg-desktop-portal
renzev  1610  0.0  0.0 751620  5888 ?        Sl   11:51   0:00 /usr/libexec/xdg-document-portal
renzev  1615  0.0  0.0 306348  6272 ?        Sl   11:51   0:00 /usr/libexec/xdg-permission-store
renzev  3382  0.0  0.1 470404 12928 ?        Sl   11:56   0:00 /usr/libexec/xdg-desktop-portal
renzev  3395  0.0  0.0 305608  5120 ?        Sl   11:56   0:00 /usr/libexec/xdg-permission-store
renzev  3412  0.1  0.2 412324 22276 ?        Sl   11:56   0:00 /usr/libexec/xdg-desktop-portal-gtk
renzev  3674  0.0  0.0   2568  1664 ?        S    11:56   0:00 bwrap --args 43 xdg-dbus-proxy --args=45
renzev  3675  0.3  0.0 231980  4992 ?        Sl   11:56   0:00 xdg-dbus-proxy --args=45
renzev  4055  0.0  0.0   6560  2304 pts/1    S+   11:56   0:00 grep xdg

相关内容