.xsession exec 无法识别 $HOME 或参数?

.xsession exec 无法识别 $HOME 或参数?

基本场景是我在多台计算机上共享我的点文件,并希望我的会话定义也同步。

由于我使用具有显着不同 DPI 的不同笔记本电脑和显示器,我希望能够为每个会话手动指定所需的 DPI。

经过几次丑陋的s/y/ier/g黑客攻击后,我决定让 .xsession 运行一个包装器脚本,而不是直接调用xmonad-start(或gnome-session其他方式),并将所需的 DPI 传递给该包装器脚本。就像这样:

/usr/share/.xsessions/xmonad-standard.xsession

[Desktop Entry]
Name=Xmonad
Exec=/home/itsamemario/.xmonad/xmonad-start

/usr/share/.xsessions/xmonad-hidpi.xsession

[Desktop Entry]
Name=Xmonad HiDPI
Exec=/home/itsamemario/.xmonad/xmonad-start 192

/home/itsamemario/.xmonad/xmonad-start

#!/bin/sh

xrdb -merge "$HOME/.Xresources"

# For setting DPI by passing an argument from display manager
if [ ! -z "$1" ]; then
  TMPFILE=$(mktemp)
  echo "! Fonts {{{
Xft.dpi: $1
! }}}" > "$TMPFILE"
  xrdb -merge "$TMPFILE"
  notify-send "Setting DPI to $1"
  rm -f "$TMPFILE"
fi

# Other unimportant stuff here

exec /usr/bin/xmonad

在两次安装中,一切都运行良好,但在第三次安装中,除了没有传递参数的默认会话外,我无法运行任何会话。我刚刚在 .xsession-errors 中收到以下错误,并且它返回到 lightdm:

/etc/lightdm/Xsession: line 76: /home/itsamemario/.xmonad/xmonad-start 192: No such file or directory

在调试过程中,我还注意到,我通常也可以在其他两个安装上使用$HOME/.xmonad/xmonad-startand ,但在这一个安装上,它只有在我明确包含.这三个都运行 Arch,我看不出它们的安装或配置方式有任何相关差异。.xmonad/xmonad-start/home/itsamemario/

什么可能导致exec.xsessions 中的行无法正确传递参数,并且也可能无法扩展会话变量,例如$HOME

(我知道有更好的解决方法来解决 DPI 问题,但我的包装脚本方法可以满足其他要求。为了简单起见,我在这里只关注 DPI。)

答案1

摘自https://help.gnome.org/admin/system-admin-guide/stable/session-custom.html.en

在 Debian 上更改以下内容/etc/X11/Xsession.d/20x11-common_process-args

改成STARTUP_FULL_PATH=$(/usr/bin/which "$1"|| true)STARTUP_FULL_PATH=$(/usr/bin/which $1 || true)

改成STARTUP="$1"STARTUP=$1

相关内容