cleanup: remove XDG_SESSION_TYPE, XDG_VTNR from global environment

This commit is contained in:
2024-07-25 15:26:24 +00:00
parent 07b55bb3ec
commit 2203d6db59
3 changed files with 35 additions and 36 deletions

View File

@@ -1,14 +1,14 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
sane.programs.komikku = { sane.programs.komikku = {
# packageUnwrapped = pkgs.komikku.overrideAttrs (upstream: { packageUnwrapped = pkgs.komikku.overrideAttrs (upstream: {
# preFixup = '' preFixup = ''
# # 2024/02/21: render bug which affects only moby: # 2024/07/25: Komikku uses XDG_SESSION_TYPE in the webkitgtk useragent, and errors if it's empty.
# # large images render blank in several gtk applications. # XDG_SESSION_DESKTOP is used similarly in debug_info.py.
# # may resolve itself as gtk or mesa are updated. # TODO: patch/upstream Komikku
# gappsWrapperArgs+=(--set GSK_RENDERER cairo) gappsWrapperArgs+=(--set-default XDG_SESSION_TYPE "unknown" --set-default XDG_SESSION_DESKTOP "unknown")
# '' + (upstream.preFixup or ""); '' + (upstream.preFixup or "");
# }); });
sandbox.method = "bwrap"; # TODO:sandbox untested sandbox.method = "bwrap"; # TODO:sandbox untested
sandbox.net = "clearnet"; sandbox.net = "clearnet";

View File

@@ -13,6 +13,19 @@ let
echo "warning: required directory not found (create it?): $(dirname "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY")" echo "warning: required directory not found (create it?): $(dirname "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY")"
test -e /tmp/.X11-unix || \ test -e /tmp/.X11-unix || \
echo "warning: required directory not found (create it?): /tmp/.X11-unix" echo "warning: required directory not found (create it?): /tmp/.X11-unix"
# sway needs to know which virtual TTY to render to
setVtnr() {
local ttyPath="$(tty)"
case $ttyPath in
(/dev/tty*)
export XDG_VTNR=''${ttyPath#/dev/tty}
;;
esac
}
if ! [ -v "$XDG_VTNR" ]; then
setVtnr
fi
# delete DISPLAY-related vars from env before launch, else sway will try to connect to a remote display. # delete DISPLAY-related vars from env before launch, else sway will try to connect to a remote display.
# (consider: nested sway sessions, where sway actually has a reason to read these) # (consider: nested sway sessions, where sway actually has a reason to read these)
exec env -u DISPLAY -u WAYLAND_DISPLAY "DESIRED_WAYLAND_DISPLAY=$WAYLAND_DISPLAY" ${configuredSway}/bin/sway 2>&1 exec env -u DISPLAY -u WAYLAND_DISPLAY "DESIRED_WAYLAND_DISPLAY=$WAYLAND_DISPLAY" ${configuredSway}/bin/sway 2>&1

View File

@@ -201,9 +201,12 @@ let
# - doesn't have to be numeric, could be "colin" # - doesn't have to be numeric, could be "colin"
# - XDG_SESSION_CLASS # - XDG_SESSION_CLASS
# - e.g. "user" # - e.g. "user"
# - XDG_SESSION_DESKTOP
# - e.g. "Phosh"
# - XDG_SESSION_TYPE # - XDG_SESSION_TYPE
# - e.g. "tty", "wayland" # - e.g. "tty", "wayland"
# - XDG_VTNR # - XDG_VTNR
# - e.g. `1`, or `2`. corresponds to some /dev/ttyN.
# - SYSTEMD_EXEC_PID # - SYSTEMD_EXEC_PID
# some of my program-specific environment variables depend on some of these being set, # some of my program-specific environment variables depend on some of these being set,
# hence do that early: # hence do that early:
@@ -247,34 +250,17 @@ let
done done
} }
setVTNR() { # this is *probably not necessary*.
# some desktops (e.g. sway) need to know which virtual TTY to render to # historically, Komikku needed to know if it was running under X or Wayland, and used XDG_SESSION_TYPE for that.
if [ -v "$XDG_VTNR" ]; then # but unless this is a super common idiom, managing it here is just ugly.
return # setXdgSessionType() {
fi # case $(tty) in
local ttyPath=$(tty) # (/dev/pts*)
case $ttyPath in # export XDG_SESSION_TYPE=tty
(/dev/tty*) # ;;
export XDG_VTNR=''${ttyPath#/dev/tty} # esac
;; # }
esac # sessionCommands+=('setXdgSessionType')
}
sessionCommands+=('setVTNR')
setXdgSessionType() {
# some apps (e.g. Komikku) require XDG_SESSION_TYPE to be set
if [ -v "$XDG_SESSION_TYPE" ]; then
return
fi
case $XDG_VTNR in
(1)
export XDG_SESSION_TYPE=wayland
;;
(*)
export XDG_SESSION_TYPE=tty
;;
esac
}
sessionCommands+=('setXdgSessionType')
sourceEnv() { sourceEnv() {
# source env vars and the like, as systemd would. `man environment.d` # source env vars and the like, as systemd would. `man environment.d`
for env in ~/.config/environment.d/*.conf; do for env in ~/.config/environment.d/*.conf; do