Re: xfce4-session launched from .xinitrc, clobbers xrandr settings
On Wed, Aug 22, 2018 at 07:21:55PM +1000, Zenaan Harkness wrote: > 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. > Here's my complete .xinitrc, which I am currently using and gives me no problems. xinput set-button-map "Logitech Unifying Device. Wireless PID:1028" 1 2 3 4 5 8 9 6 7 xinput set-button-map "Logitech Unifying Device. Wireless PID:1025" 1 2 3 4 5 8 9 6 7 . /home/dsr/bin/xadjust exec xfce4-session Here's xadjust: #!/bin/sh xrandr --addmode VGA1 1920x1200 xrandr --addmode HDMI1 1920x1200 xrandr --output VGA1 --mode 1920x1200 xrandr --output VGA1 --rotate normal xrandr --output HDMI1 --mode 1920x1200 xrandr --output HDMI1 --left-of VGA1 xrandr --output HDMI1 --rotate left xfce's Settings -> Display shows the config consistent with this, and if I make changes there, they are adopted until the session ends. -dsr-
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.XXX` > 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-
xfce4-session launched from .xinitrc, clobbers xrandr settings
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.XXX` 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