I found out that, in my system, `xrdp` runs the sesman protocol, and
/etc/xrdp/sesman.ini specifies to run a file /etc/xrdp/startwm.sh:

*$ *cat /etc/xrdp/startwm.sh

#!/bin/sh

. /etc/X11/Xsession

startxfce4


I found that /etc/X11/Xsession does not set $DISPLAY anyhow, although it
loads some quite a few files, both systemwide and user specific, which
could potentially define $DISPLAY. From what I checked, none of those files
define $DISPLAY as of now. So /usr/bin/startxfce4 is the one defining
$DISPLAY. Indeed, I found lines such as these:

if test "x$DISPLAY" = "x"

then

  echo "$0: Starting X server"

  prog=xinit

else

  echo "$0: X server already running on display $DISPLAY"

  prog=/bin/sh

fi


The webadmins to the servers told me that they'd rather not make
complex/big changes to the servers as they are production servers, and are
not quite open to testing out different setups. I proposed to edit the
/etc/xrdp/startwm.sh such that `startxfce4` is called *with* an option for
the $DISPLAY, which is calculated based on $UID. They disagree, as the
server has quite a lot of users and the users are all temporary (about a
year). Since $UID is simply an integer, that didn't seem a proper reason to
disagree to my proposal. Alas, it seems I should still be able to set
$DISPLAY in the files that /etc/X11/Xsession loads:

# initialize variables for use by all session scripts

OPTIONFILE=/etc/X11/Xsession.options

SYSRESOURCES=/etc/X11/Xresources

USRRESOURCES=$HOME/.Xresources

SYSSESSIONDIR=/etc/X11/Xsession.d

USERXSESSION=$HOME/.xsession

USERXSESSIONRC=$HOME/.xsessionrc

ALTUSERXSESSION=$HOME/.Xsession

ERRFILE=$HOME/.xsession-errors


Specifically, ~/.xsession or ~/.xsessionrc seems to be reasonable places.
However, none of these seems to have been loaded in /usr/bin/startxfce4.
Rather, it is running xfce4 specific xinitrc:

if [ -f $BASEDIR/xinitrc ]; then

  exec $prog $BASEDIR/xinitrc $CLIENTRC $SERVERRC

elif [ -f $HOME/.xfce4/xinitrc ]; then

  mkdir -p $BASEDIR

  cp $HOME/.xfce4/xinitrc $BASEDIR/

  exec $prog $BASEDIR/xinitrc $CLIENTRC $SERVERRC

else

  exec $prog /etc/xdg/xfce4/xinitrc $CLIENTRC $SERVERRC

fi


Neither $BASEDIR/xinitrc nor $HOME/.xfce4/xinitrc exists as of now, thus
/etc/xdg/xfce4/xinitrc is ran by default. This file is quite long (abou 200
lines) but defiens DISPLAY nowhere. The most notable thing is it runs
`xfce4-session` by itself, without any options.


I think I laid out my system configurations to the best of my abilities,
without adding too many useless information. I think I have three options
here, though am not quite sure which would be simplest and works:

A) I could try setting creating ~/.xsession or ~/.xsessionrc where I set a
DISPLAY number (setting it in ~/.xinitrc seems to have stopped X11 to open
connection next time I connect from another computer);

B) I could create my own ~/.config/xfce4/xinitrc, which will be executed by
startxfce4 as  $BASEDIR/xinitrc. There, I can copy the currently default
/etc/xdg/xfce4/xinitrc to there, and specify a DISPLAY option for
xfce4-sesion line;

C) Somehow, I could tell xfce4-session to always use the previous sessions
saved in ~/.cache/sessions/ for a user, regardless of whether some optional
parameters match, notably GEOMETRY etc. See contents of that file here:

cat ~/.cache/sessions/xfwm4-2e1965c2f-8b9b-4860-9173-6ba8cfa8cff1.state

[CLIENT] 0x3c00008

  [CLIENT_LEADER] 0x3c00001

  [WINDOW_ROLE] gnome-terminal-window-dc448239-c1b8-472f-9760-764c4b353700

  [RES_NAME] gnome-terminal-server

  [RES_CLASS] Gnome-terminal

  [WM_NAME] someuser@somewhere: ~

  [WM_COMMAND] (1) "gnome-terminal-server"

  [GEOMETRY] (3,60,926,482)

  [GEOMETRY-MAXIMIZED] (3,60,737,431)

  [SCREEN] 0

  [DESK] 0

  [FLAGS] 0x10000



Not sure which would work, though I can test the first two myself, and not
sure how to tell xfce4-session to always use previous session.

Best,
Hörmet
========================
He who is worthy to receive his days and nights is worthy to receive all
else from you (and me).
                                                 -- The Prophet, Gibran
Kahlil


On Wed, Nov 1, 2017 at 4:29 AM, deloptes <delop...@gmail.com> wrote:

> Hörmetjan Yiltiz wrote:
>
> > Seems like a very simple solution! Do you know if this works for RDP? And
> > what runs that vnc-run.sh? Is it executed upon SSH login, VNC login, or
> by
> > the admin?
>
> The vnc-run.sh is my own script
>
> To automate it, you need to modify the script starting the session on the
> server. Unfortunately I don't know what how exactly works in your setup.
> The RDP/VNC client needs a running vnc server, so I login to the server and
> execute this vnc-run.sh.
>
> The vncserver reads .vnc/xstartup which spawns the session and desktop.
>
> example:
> #!/bin/sh
> xsetroot -solid grey
> icewm &
>
> When you find a way to automate it, please post back here.
>
> regards
>
>

Reply via email to