[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: xfce4-session launched from .xinitrc, clobbers xrandr settings



OK, so I thought I'd wait 3 weeks, and yeah, I know, it's only been
20 days, but hey, color me impatient.

What I ended up doing is just adding an xrandr entry to my xfce4
session, but this seems to slow the startup of the GUI starting -
i.e. it seems like XFCE4 does some internal default monitor (xrandr)
layout, then runs my script which sets my preferred xrandr config/
layout.

Although I can't really be sure - I'm not sure how to properly test
this, as it could just be a time/impatience illusion.

Thoughts?
Zenaan



On Wed, Aug 02, 2017 at 10:34:57PM +1000, Zenaan Harkness wrote:
> Does anyone here launch xfce4 from .xinitrc, or from console?
> 
> xfce4-session clobbers xrandr settings when run from .xinitrc (via
> .xinit from Linux console).
> 
> When starting from console, I know the monitor layout I want, and
> don't like the delay (and blanking between changes) of having to
> manually re-run my preferred layout script, so I'd like xfce4 to
> respect my "current" monitor layout as set by xrandr just prior to
> launching the xfce4 desktop - is this possible?
> 
> TIA,
> Zenaan
> 
> 
> 
> Further details:
> 
> After running a few tests, it seems that xfce4 has its own idea of
> the "current monitor configuration" and imposes this on each session
> start.
> 
> This kind of makes sense - normally one wants to begin a new xfce4
> login with the same monitor configuration/layout as the previous
> login.
> 
> Although sometimes that's not possible due to disconnection of
> monitors (common case when moving a laptop around, and where only one
> of the normal laptop locations has one or more external monitors).
> 
> 
> I have scriptified my xrandr settings, so that I can relatively
> easily configure keyboard shortcuts to swap between different monitor
> configurations/ layouts.
> 
> But .xinitrc is my ultimate startup script, not the opaque binary
> known as xfce4-xsession - even though I have to run this from
> .xinitrc to get my xfce4 desktop.
> 
> Good News ----------- xfce4-session respects other ".xinitrc"
> environment without clobbering:
>  - does not clobber .Xresources/xrdb loaded settings
>  - does not clobber current keyboard repeat rate (actually not
>    entirely sure, I may not be properly testing this one)
>  - environment vars ARE passed through (very handy!)
> 
> Bad News ---------- xrandr configuration is clobbered.
> 
> Potential other preference: respect setting of root window, e.g.
> xsetroot -gray -mod 5 5 # not very important
> 
> 
> This custom randr script is necessary for me to use - to e.g.
> establish some params for potential future xterm launches - another,
> dynamic, script, which lays out arbitrary xterms based on "current"
> monitor resolutions and of course orientations and offsets. Have not
> yet coded a script to dynamically determine number of monitors and
> their current rotation and offsets relative to one another, so I have
> to decide in advance what I want, and pack various env vars, then run
> xrandr, so that later I have the -full- parameters of the current
> monitor layout.
> 
> Also, scripting randr means I can more easily get precise monitor
> offsets (e.g. monitor 1 at y=646), which is useful to cause mouse
> movement between monitors to line up properly.
> 
> 
> 
> Here's my environment:
>  - Debian Stretch/9
>  - Linux 4.9.0-3-amd64
>  - oldish Core2Duo laptop
>  - two external monitors, each same size
>  - one monitor I normally rotate
> 
> 
> Steps to reproduce evidencing this limitation:
> 
> 
> 1) login to Linux console
> 
> 
> 2) set env vars, init xauth, assemble and launch xinit e.g.:
> 
> #!/bin/bash
> # "mystartx"
> export XDG_... env vars ...
> export DESKTOP_SESSION="xfce"
> export GLADE_CATALOG_PATH="$GLADE_CATALOG_PATH:"
> export GLADE_PIXMAP_PATH="$GLADE_PIXMAP_PATH:"
> export GLADE_MODULE_PATH="$GLADE_MODULE_PATH:"
> which xdg-user-dirs-update >/dev/null 2>&1 && xdg-user-dirs-update
> 
> export XAUTHORITY="$HOME"/.Xauthority
> mcookie="$(/usr/bin/mcookie)"
> xserverauthfile=`mktemp --tmpdir serverauth.XXXXXXX`
> xauth -q -f ...
> 
> # This is the important line:
> xinit $HOME/.xinitrc -- /usr/bin/X :0 vt1 -keeptty \
>  -logverbose 5 -auth $xserverauthfile
> 
> 
> 3) here's ~/.xinitrc :
> 
> #!/bin/bash
> xrdb -load $HOME/.Xresources # these are not clobbered by xfce
> xsetroot -gray -mod 5 5 # this is clobbered
> test -z "$DBUS_SESSION_BUS_ADDRESS" && {
>  eval `dbus-launch --sh-syntax`
>  dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS
> }
> dbus-update-activation-environment --systemd DISPLAY XAUTHORITY
> # disable laptop internal monitor:
> xrandr --output LVDS-1 --off
> # enable two external monitors:
> xrandr --verbose --output DP-1 --pos 0x646 --mode 1920x1200 --rotate \
>  normal --output DP-2 --pos 1920x0 --mode 1920x1200 --rotate left
> 
> #exec xterm -geometry 80x60+0+646 # this alternative runs successfully
> 
> # this alternative clobbers xrandr layout, disabling second monitor:
> exec ck-launch-session xfce4-session
> 


Reply to: