基本场景是我在多台计算机上共享我的点文件,并希望我的会话定义也同步。
由于我使用具有显着不同 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-start
and ,但在这一个安装上,它只有在我明确包含.这三个都运行 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