218 lines
6.7 KiB
Bash
218 lines
6.7 KiB
Bash
#!/bin/sh
|
|
# Copyright 1999, 2002 Patrick Volkerding, Moorhead, Minnesota USA
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use of this script, with or without modification, is
|
|
# permitted provided that the following conditions are met:
|
|
#
|
|
# 1. Redistributions of this script must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
|
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
|
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
|
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
#
|
|
# Modified by Phillip Warner <pc_warner@yahoo.com>
|
|
# for editing xrdp's xinit files (xrdp-xinitrc)
|
|
#
|
|
# $DWM under /etc/xrdp will be modified by this script if run by root.
|
|
# Otherwise, $UWM in the user's folder will be modified.
|
|
#
|
|
# $DWM represents the default xrdp-xinit file for xrdp under /etc/xrdp.
|
|
# $UWM is the xrdp-xinit file under $HOME that will be modified by this script.
|
|
# The values for DefaultWindowManager and UserWindowManager, respectively,
|
|
# in sesman.ini should match these.
|
|
DWM=xrdp-xinitrc
|
|
UWM=.xrdp-xinitrc
|
|
|
|
# First, let's bail if our being here doesn't make sense:
|
|
if [ ! -d /etc/X11/xinit ]; then
|
|
exit
|
|
fi
|
|
if [ "`cd /etc/X11/xinit ; echo *.*`" = '*.*' ]; then
|
|
exit
|
|
fi
|
|
if [ ! -d /etc/xrdp ]; then
|
|
exit
|
|
fi
|
|
if [ $(grep -w DefaultWindowManager /etc/xrdp/sesman.ini | cut -f2 -d"=") != $DWM ]
|
|
then
|
|
echo "DefaultWindowManager in sesman.ini MUST be set to $DWM to use this tool. Aborting..."
|
|
exit
|
|
fi
|
|
if [ $(grep -w UserWindowManager /etc/xrdp/sesman.ini | cut -f2 -d"=") != $UWM ]
|
|
then
|
|
echo "UserWindowManager in sesman.ini MUST be set to $UWM to use this tool. Aborting..."
|
|
exit
|
|
fi
|
|
|
|
if [ "$USER" = "root" ]; then
|
|
TMP=/var/log/setup/tmp
|
|
else
|
|
TMP=$HOME/.xrdp-xwmconfig
|
|
fi
|
|
|
|
if [ ! -d $TMP ]; then
|
|
mkdir -p $TMP
|
|
chmod 700 $TMP
|
|
fi
|
|
|
|
# Do we already have an existing default?
|
|
unset PRESELECT
|
|
if [ -L /etc/xrdp/$DWM ]; then
|
|
CURRENT="$(basename $(/bin/ls -l /etc/xrdp/$DWM | cut -f 2 -d '>'))"
|
|
PRESELECT=" --default-item $CURRENT "
|
|
fi
|
|
|
|
# Figure out who we are and set up some background information:
|
|
if [ "$USER" = "root" ]; then
|
|
BACKTITLE="--backtitle \"Setting system-wide default xrdp window manager at /etc/xrdp/$DWM\""
|
|
else
|
|
BACKTITLE="--backtitle \"Setting user default xrdp window manager in $HOME/$UWM\""
|
|
fi
|
|
|
|
# This stops --backtitle from cluttering the initial install:
|
|
if [ ! -r /proc/kcore ]; then
|
|
BACKTITLE=""
|
|
fi
|
|
|
|
# Remove any previous script:
|
|
rm -f $TMP/tmpscript.sh
|
|
|
|
# Add the top of the script:
|
|
cat << EOF > $TMP/tmpscript.sh
|
|
dialog $BACKTITLE --title "SELECT DEFAULT WINDOW MANAGER FOR XRDP" $PRESELECT --menu \\
|
|
"Please select the default window manager to use with XRDP. \\
|
|
This will define the style of graphical user interface the \\
|
|
client computer uses in remote X11rdp sessions." 0 0 0 \\
|
|
EOF
|
|
|
|
# Add KDE as the first and default entry:
|
|
if [ -r /etc/X11/xinit/xinitrc.kde ]; then
|
|
echo "\"xinitrc.kde\" \"KDE: K Desktop Environment\" \\" >> $TMP/tmpscript.sh
|
|
fi
|
|
|
|
# Then, we add GNOME:
|
|
if [ -r /etc/X11/xinit/xinitrc.gnome ]; then
|
|
echo "\"xinitrc.gnome\" \"GNU Network Object Model Environment\" \\" >> $TMP/tmpscript.sh
|
|
fi
|
|
|
|
# Add XFce:
|
|
if [ -r /etc/X11/xinit/xinitrc.xfce ]; then
|
|
echo "\"xinitrc.xfce\" \"The Cholesterol Free Desktop Environment\" \\" >> $TMP/tmpscript.sh
|
|
fi
|
|
|
|
# Add Enlightenment:
|
|
if [ -r /etc/X11/xinit/xinitrc.e ]; then
|
|
echo "\"xinitrc.e\" \"Enlightenment\" \\" >> $TMP/tmpscript.sh
|
|
fi
|
|
|
|
# Add Fluxbox:
|
|
if [ -r /etc/X11/xinit/xinitrc.fluxbox ]; then
|
|
echo "\"xinitrc.fluxbox\" \"The fluxbox window manager\" \\" >> $TMP/tmpscript.sh
|
|
fi
|
|
|
|
# Add Blackbox:
|
|
if [ -r /etc/X11/xinit/xinitrc.blackbox ]; then
|
|
echo "\"xinitrc.blackbox\" \"The blackbox window manager\" \\" >> $TMP/tmpscript.sh
|
|
fi
|
|
|
|
# Add WindowMaker:
|
|
if [ -r /etc/X11/xinit/xinitrc.wmaker ]; then
|
|
echo "\"xinitrc.wmaker\" \"WindowMaker\" \\" >> $TMP/tmpscript.sh
|
|
fi
|
|
|
|
# Add FVWM2:
|
|
if [ -r /etc/X11/xinit/xinitrc.fvwm2 ]; then
|
|
echo "\"xinitrc.fvwm2\" \"F(?) Virtual Window Manager (version 2.xx)\" \\" >> $TMP/tmpscript.sh
|
|
fi
|
|
|
|
# Add FVWM95:
|
|
if [ -r /etc/X11/xinit/xinitrc.fvwm95 ]; then
|
|
echo "\"xinitrc.fvwm95\" \"FVWM2 with a Windows look and feel\" \\" >> $TMP/tmpscript.sh
|
|
fi
|
|
|
|
# Add icewm:
|
|
if [ -r /etc/X11/xinit/xinitrc.icewm ]; then
|
|
echo "\"xinitrc.icewm\" \"ICE Window Manager\" \\" >> $TMP/tmpscript.sh
|
|
fi
|
|
|
|
# Add sawfish:
|
|
if [ -r /etc/X11/xinit/xinitrc.sawfish ]; then
|
|
echo "\"xinitrc.sawfish\" \"Sawfish without GNOME\" \\" >> $TMP/tmpscript.sh
|
|
fi
|
|
|
|
# Add twm:
|
|
if [ -r /etc/X11/xinit/xinitrc.twm ]; then
|
|
echo "\"xinitrc.twm\" \"Tab Window Manager (very basic)\" \\" >> $TMP/tmpscript.sh
|
|
fi
|
|
|
|
# Add mwm:
|
|
if [ -r /etc/X11/xinit/xinitrc.mwm ]; then
|
|
echo "\"xinitrc.mwm\" \"Motif WM\" \\" >> $TMP/tmpscript.sh
|
|
fi
|
|
|
|
# Now, add support for the other window managers:
|
|
( cd /etc/X11/xinit
|
|
for file in xinitrc.* ; do
|
|
if [ ! "$file" = "xinitrc.kde" -a ! "$file" = "xinitrc.gnome" \
|
|
-a ! "$file" = "xinitrc.e" -a ! "$file" = "xinitrc.wmaker" \
|
|
-a ! "$file" = "xinitrc.fvwm2" -a ! "$file" = "xinitrc.fvwm95" \
|
|
-a ! "$file" = "xinitrc.icewm" -a ! "$file" = "xinitrc.twm" \
|
|
-a ! "$file" = "xinitrc.mwm" -a ! "$file" = "xinitrc.xfce" \
|
|
-a ! "$file" = "xinitrc.blackbox" -a ! "$file" = "xinitrc.fluxbox" \
|
|
-a ! "$file" = "xinitrc.sawfish" ]; then
|
|
echo "\"$file\" \"$file\" \\" >> $TMP/tmpscript.sh
|
|
fi
|
|
done
|
|
)
|
|
|
|
# Then, the tail end:
|
|
cat << EOF >> $TMP/tmpscript.sh
|
|
2> $TMP/output
|
|
if [ ! \$? = 0 ]; then
|
|
rm -f $TMP/output
|
|
echo "Canceled."
|
|
exit
|
|
fi
|
|
EOF
|
|
|
|
sh $TMP/tmpscript.sh
|
|
|
|
if [ ! -r $TMP/output ]; then
|
|
rm -f $TMP/tmpscript.sh
|
|
exit
|
|
fi
|
|
|
|
OUTPUT=`cat $TMP/output`
|
|
|
|
# If xrdp-xwmconfig is run by root, it changes the system-wide default for users
|
|
# that do not have a $HOME/$UWM:
|
|
if [ "$USER" = "root" ]; then
|
|
if [ -r /etc/X11/xinit/$OUTPUT ]; then
|
|
( cd /etc/xrdp/ ; rm -f $DWM ; ln -sf /etc/X11/xinit/$OUTPUT $DWM )
|
|
fi
|
|
fi
|
|
|
|
# Also set up a new $HOME/$UWM:
|
|
if [ -r /etc/X11/xinit/$OUTPUT -a ! "$HOME" = "/" ]; then
|
|
if [ -r $HOME/$UWM ]; then
|
|
rm -f $HOME/${UWM}-backup
|
|
mv $HOME/$UWM $HOME/${UWM}-backup
|
|
chmod -x $HOME/${UWM}-backup
|
|
fi
|
|
cat /etc/X11/xinit/$OUTPUT > $HOME/$UWM
|
|
# Unlike .xinitrc, $UWM *MUST* be executable
|
|
chmod u+x $HOME/$UWM
|
|
fi
|
|
|
|
rm -f $TMP/tmpscript.sh $TMP/output
|
|
|