summaryrefslogblamecommitdiffstats
path: root/src/os-plugins/plugins/x11vnc/XX_x11vnc.sh
blob: 3970e4685d5e9813efe6e3df7bad65418c91efc5 (plain) (tree)
1
2
3
4
5
6
7
8
9
10

                                            







                                                                         
 


                                                                          

                                                                              
                                                               
 


                                                                              


                                                                                      












                                                                                         


             
                                                  


                                                                         
                                               
                                                                     








                                                    
                            
                















                                                               
                                          


                                                            








                                                           
 




                                                   
 




                                                    
 



                                                                       
 






                                                                      
                                             
        
 



                                                                       
 
                             
 
                                                                       
 

                                                             


                                                                               

                                                             
    


                                                         
  
# Copyright (c) 2007..2009 - RZ Uni Freiburg
# Copyright (c) 2009 - OpenSLX GmbH
#
# This program/file is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
#
# If you have any feedback please consult http://openslx.org/feedback and
# send your feedback to feedback@openslx.org
#
# General information about OpenSLX can be found at http://openslx.org
#
# script is included from init via the "." load function - thus it has all
# variables and functions available

# check if the plugin config directory is generally available or if the client
# configuration failed somehow
[ -d /initramfs/plugin-conf ] || error "${init_picfg}" nonfatal

# function to add vnc functionality to xorg server
addvnc2xorg () {
  sed -e '/^# autog/a# modified by x11vnc plugin (adding vnc module config)' \
      -e '/\"Module\"/a\\ \ Load         "vnc"' \
      -e '/n \"Device\"/a\\ \ Option       "usevnc"            "yes"' \
      -e '/n \"Device\"/a\\ \ Option       "rfbauth"           "/etc/X11/vncpasswd"' \
      -e '/e  \"Generic Mouse\"/a\\ \ InputDevice  "VNC Keyboard"      "ExtraKeyboard"' \
      -e '/e  \"Generic Mouse\"/a\\ \ InputDevice  "VNC Mouse"         "ExtraPointer"' \
      -e '/\"CorePointer\"/ {
a\
EndSection\
Section "InputDevice"\
  Identifier   "VNC Keyboard"\
  Driver       "rfbkeyb"\
EndSection\
Section "InputDevice"\
  Identifier   "VNC Mouse"\
  Driver       "rfbmouse"
}'    -i /mnt/etc/X11/xorg.conf
}

# main script
if [ -e /initramfs/plugin-conf/x11vnc.conf ]; then
  . /initramfs/plugin-conf/x11vnc.conf
  if [ $x11vnc_active -ne 0 ]; then
    [ $DEBUGLEVEL -gt 0 ] && echo "executing the 'x11vnc' os-plugin ...";
    # configure x11vnc user mode or framebuffer
    if [ "$x11vnc_mode" = "x11user" -o "$x11vnc_mode" = "fb" ] ; then
      # create config dir for stage 3
      mkdir -p /mnt/etc/x11vnc  
      # default parameters
      PARAMS="-bg -forever"
      # client restrictions
      if [ -z x11vnc_allowed_hosts ]; then
        PARAMS="$PARAMS -allow $x11vnc_allowd_hosts"
      fi
      # mode
      case "$x11vnc_mode" in
        x11user)
          PARAMS="$PARAMS -display :0"
          X11VNC_X11=1
        ;;
        fb)
          PARAMS="$PARAMS -rawfb console"
        ;;
      esac
      # auth type
      case "$x11vnc_auth_type" in
        passwd)
          # use x11vnc passwd style - recommended
          echo "$x11vnc_pass" > /mnt/etc/x11vnc/passwd
          echo "__BEGIN_VIEWONLY__" >> /mnt/etc/x11vnc/passwd
          echo "$x11vnc_viewonlypass" >> /mnt/etc/x11vnc/passwd
          # multiuser handling
          sed -i "s/,/\n/" /mnt/etc/x11vnc/passwd
          # add parameter to commandline  
          PARAMS="$PARAMS -passwdfile rm:/etc/x11vnc/passwd"
        ;;
        rfbauth)
          # use rfbauth
          vncpasswd "$x11vnc_pass" > /mnt/etc/x11vnc/passwd
          PARAMS="$PARAMS -rfbauth /etc/x11vnc/passwd"
        ;;
        *)
          # no password
          PARAMS="$PARAMS -nopw"
        ;;
      esac

      # force viewonly
      if [ "$x11vnc_force_viewonly" = "1" \
        -o "$x11vnc_force_viewonly" = "yes" ]; then
        PARAMS="$PARAMS -viewonly" 
      fi

      # force localhost
      if [ "$x11vnc_force_localhost" = "1" \
        -o "$x11vnc_force_localhost" = "yes" ]; then
        PARAMS="$PARAMS -localhost" 
      fi

      # enable logging
      if [ "$x11vnc_logging" = "1" -o "$x11vnc_logging" = "yes" ]; then
        PARAMS="$PARAMS -o /var/log/x11vnc.log" 
      fi

      # shared desktops
      if [ "$x11vnc_shared" = "1" -o  "$x11vnc_shared" = "yes" ]; then
        PARAMS="$PARAMS -shared" 
      fi

      # scale desktop
      if [ "$x11vnc_scale" != "" ]; then
        PARAMS="$PARAMS -scale $x11vnc_scale"
      fi

      # write config file
      echo "# parameters generated by $0" > /mnt/etc/x11vnc/x11vnc.conf
      echo "X11VNC_PARAMS=\"$PARAMS\"" >> /mnt/etc/x11vnc/x11vnc.conf
      echo "X11VNC_X11=\"$X11VNC_X11\"" >> /mnt/etc/x11vnc/x11vnc.conf

      rllinker "x11vnc" 30 10

      [ $DEBUGLEVEL -gt 0 ] && echo "done with 'x11vnc' os-plugin ...";

    # x11mod offers access to the running X server via module
    elif [ "$x11vnc_mode" = "x11mod" ]; then
      # password setting (use stage4 environment)
      echo -e "$x11vnc_pass\n$x11vnc_viewonlypass" | chroot /mnt vncpasswd -f \
        > /mnt/etc/X11/vncpasswd
      ( waitfor /mnt/etc/X11/xorg.conf 10000; addvnc2xorg ) &
    fi
  fi
else
  [ $DEBUGLEVEL -gt 2 ] && \
    echo "No configuration file found for x11vnc plugin."
fi