语境
我正在使用 X11 运行 Void Linux。我没有使用任何桌面环境或显示管理器。我只需startx
从 tty 键入即可启动 X11,然后~/.xinitrc
启动 BSPWM、polybar 以及我需要的所有其他应用程序。
问题
我使用很多 flatpak 应用程序,它们依赖 xdg 桌面门户来提供文件选择器。当我第一次启动 X11 时,一切正常。但是,如果我退出 X11 并再次从 tty 重新启动它,则所有 Flatpak 应用程序中的文件选择器都会损坏。例如,CTRL+O
在 Librewolf 中按做调出文件选择器,但它拒绝实际打开我选择的任何文件。同样,尝试下载文件会调出文件选择器,但此后,永远不会真正下载该文件。简而言之:
- 我推出X11
- 一切正常
- 我决定杀死 X11 并退出到 tty
- 我再次启动X11
- 文件选择器现在在所有 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