O cenário básico é que eu estou compartilhando meus arquivos de pontos em várias máquinas e quero que minhas definições de sessão sejam sincronizadas também.
Como uso laptops e monitores diferentes com DPIs significativamente diferentes, quero poder especificar manualmente o DPI desejado para cada sessão.
Depois de alguns hacks feios ( s/y/ier/g
), decidi que o .xsession estava executando um script wrapper em vez de chamar diretamente xmonad-start
(ou gnome-session
ou qualquer outro) e passar o DPI desejado para esse script wrapper. Assim:
[Desktop Entry]
Name=Xmonad
Exec=/home/itsamemario/.xmonad/xmonad-start
[Desktop Entry]
Name=Xmonad HiDPI
Exec=/home/itsamemario/.xmonad/xmonad-start 192
#!/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
Tudo funciona bem em duas instalações, mas na terceira não posso executar nenhuma sessão, exceto a padrão, sem argumentos. Acabei de receber o seguinte erro em .xsession-errors e ele retorna ao lightdm:
/etc/lightdm/Xsession: line 76: /home/itsamemario/.xmonad/xmonad-start 192: No such file or directory
No decorrer da depuração, também percebi que também posso usar normalmente $HOME/.xmonad/xmonad-start
e .xmonad/xmonad-start
nas outras duas instalações, mas nesta, só funciona se eu incluir explicitamente /home/itsamemario/
. Todos os três estão executando o Arch e não vejo nenhuma diferença relevante em como eles foram instalados ou configurados.
O que poderia fazer com que exec
lines em .xsessions não transmitisse argumentos corretamente e possivelmente também não expandisse variáveis de sessão como $HOME
?
(Eu sei que há soluções melhores para o problema de DPI, mas minha abordagem de script de wrapper atende a outros requisitos. Estou focando apenas em DPI apenas aqui por uma questão de simplicidade.)