문맥
저는 X11을 사용하여 Void Linux를 실행하고 있습니다. 데스크탑 환경이나 디스플레이 관리자를 사용하고 있지 않습니다. startx
tty에서 입력하기만 하면 X11을 시작할 수 있으며, 그러면 BSPWM ~/.xinitrc
, 폴리바 및 필요한 기타 모든 응용 프로그램이 시작됩니다.
질문
나는 파일 선택기를 제공하기 위해 xdg 데스크탑 포털에 의존하는 많은 flatpak 애플리케이션을 사용합니다. 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
스크립트입니다 . 또한 xdg 킬러 원라이너는 다음 내용이 포함된 별도의 파일에 있습니다.launch_de.sh
~/.xinitrc
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}')
계속되는 과정
자세한 내용은 다양한 단계의 출력입니다 ps aux | grep xdg
(스크립트를 실행하지 않음 kill_all_xdg_portals.sh
).
부팅 직후, X11 실행 전
renzev 1426 0.0 0.0 6560 2432 tty1 S+ 11:51 0:00 grep xdg
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
flatpak 앱(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
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
X11을 두 번째로 시작한 후
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
librewolf를 두 번째로 시작한 후(이제 파일 선택기가 깨졌습니다)
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