Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

When I use my PC A to log into remote desktop of the server, which runs Ubuntu, run some program (say MATLAB), close the connection and re-log into the server, the MATLAB still runs.

However, if I use my PC B to re-log into the server, it seems a new session and no MATLAB window can be seen. But top shows the MATLAB is running.

How can I log into the same session I started using PC A?

share|improve this question

1 Answer 1

Theoretically, there are 2 ways to do this:

  1. [Source] Editing xrdp.ini to add a custom local login

    • Make sure you have xrdp and vino installed

      sudo apt-get install xrdp vino
      
    • Edit /etc/xrdp/xrdp.ini

      sudo gedit /etc/xrdp/xrdp.ini
      
    • copy xrdp1 block and change its number to something else which is not already there in the ini file. Basically the number here decides the dropdown order. Add this

      [xrdp1] 
      name=MyLocalLogin 
      lib=libvnc.so 
      username= password=ask
      ip=127.0.0.1 
      port=5900
      
    • Now just try rdp'ing and choose your custom session MyLocalLogin

  2. [Source] I haven't tried this yet. It looks somewhat painful as it involves modifying and re-compiling the xrdp source.

    • Install basic stuff needed.

      sudo apt-get install autoconf libtool libpam0g-dev libx11-dev libxfixes-dev libssl-dev
      sudo apt-get install gnome-session-fallback
      echo  ”gnome-session --session=gnome-fallback” > ~/.xsession   
      sudo apt-get install x11vnc
      
    • Download the xrdp source from here. Now extract it anywhere, lets call it root. Go to root/xrdp-master and :

      sudo ./bootstrap
      sudo ./configure
      sudo make
      sudo make install
      
    • Now we need to configure our system in order to have xrdp using X11Vnc package and have the xrdp service started automatically when the Ubuntu computer is restarted.

      sudo apt-get install xrdp 
      sudo apt-get remove xrdp
      sudo mv startwm.sh startwm.sh.backup 
      sudo ln -s /etc/X11/Xsession /etc/xrdp/startwm.sh 
      sudo mkdir /usr/share/doc/xrdp 
      sudo cp /etc/xrdp/rsakeys.ini /usr/share/doc/xrdp/rsakeys.ini
      
    • Now we need to update the /etc/init.d/xrdp. Simply copy the content of the modified xrdp script file into your /etc/init.d/xrdp

      <-------   Begin of the Script -------->
      
      #!/bin/sh -e
      #
      # start/stop xrdp and sesman daemons
      #
      ### BEGIN INIT INFO
      # Provides:          xrdp
      # Required-Start:    $network $remote_fs
      # Required-Stop:     $network $remote_fs
      # Default-Start:     2 3 4 5
      # Default-Stop:      0 1 6
      # Short-Description: Start xrdp and sesman daemons
      # Description:       XRDP uses the Remote Desktop Protocol to present a
      #                    graphical login to a remote client allowing connection
      #                    to a VNC server or another RDP server.
      ### END INIT INFO
      
      PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
      DAEMON=/usr/local/sbin/xrdp
      PIDDIR=/var/run
      SESMAN_START=yes
      USERID=xrdp
      RSAKEYS=/etc/xrdp/rsakeys.ini
      NAME=xrdp
      DESC="Remote Desktop Protocol server"
      
      test -x $DAEMON || exit 0
      
      . /lib/lsb/init-functions
      
      check_root()  {
          if [ "$(id -u)" != "0" ]; then
              log_failure_msg "You must be root to start, stop or restart $NAME."
              exit 4
          fi
      }
      
      if [ -r /etc/default/$NAME ]; then
         . /etc/default/$NAME
      fi
      
      # Tasks that can only be run as root
      if [ "$(id -u)" = "0" ]; then
          # Check for pid dir
          if [ ! -d $PIDDIR ] ; then
              mkdir $PIDDIR
          fi
          chown $USERID:$USERID $PIDDIR
      
          # Check for rsa key 
          if [ ! -f $RSAKEYS ] || cmp $RSAKEYS /usr/share/doc/xrdp/rsakeys.ini > /dev/null; then
              log_action_begin_msg "Generating xrdp RSA keys..."
              (umask 077 ; xrdp-keygen xrdp $RSAKEYS)
              chown $USERID:$USERID $RSAKEYS
              if [ ! -f $RSAKEYS ] ; then
                  log_action_end_msg 1 "could not create $RSAKEYS"
                  exit 1
              fi
              log_action_end_msg 0 "done"
          fi
      fi
      
      case "$1" in
        start)
              check_root
              exitval=0
              log_daemon_msg "Starting $DESC " 
              if pidofproc -p $PIDDIR/$NAME.pid $DAEMON > /dev/null; then
                  log_progress_msg "$NAME apparently already running"
                  log_end_msg 0
                  exit 0
              fi
              log_progress_msg $NAME
              start-stop-daemon --start --quiet --oknodo  --pidfile $PIDDIR/$NAME.pid \
              --chuid $USERID:$USERID --exec $DAEMON
              exitval=$?
          if [ "$SESMAN_START" = "yes" ] ; then
                  log_progress_msg "sesman"
                  start-stop-daemon --start --quiet --oknodo --pidfile $PIDDIR/xrdp-sesman.pid \
                 --exec /usr/local/sbin/xrdp-sesman
                  value=$?
                  [ $value -gt 0 ] && exitval=$value
              fi
              # Make pidfile readables for all users (for status to work)
              [ -e $PIDDIR/xrdp-sesman.pid ] && chmod 0644 $PIDDIR/xrdp-sesman.pid
              [ -e $PIDDIR/$NAME.pid ] && chmod 0644 $PIDDIR/$NAME.pid
              # Note: Unfortunately, xrdp currently takes too long to create
              # the pidffile unless properly patched
              log_end_msg $exitval
          ;;
        stop)
              check_root
          [ -n "$XRDP_UPGRADE" -a "$RESTART_ON_UPGRADE" = "no" ] && {
              echo "Upgrade in progress, no restart of xrdp."
              exit 0
          }
              exitval=0
              log_daemon_msg "Stopping RDP Session manager " 
              log_progress_msg "sesman"
              if pidofproc -p  $PIDDIR/xrdp-sesman.pid /usr/local/sbin/xrdp-sesman  > /dev/null; then
                  start-stop-daemon --stop --quiet --oknodo --pidfile $PIDDIR/xrdp-sesman.pid \
                      --chuid $USERID:$USERID --exec /usr/local/sbin/xrdp-sesman
                  exitval=$?
              else
                  log_progress_msg "apparently not running"
              fi
              log_progress_msg $NAME
              if pidofproc -p  $PIDDIR/$NAME.pid $DAEMON  > /dev/null; then
                  start-stop-daemon --stop --quiet --oknodo --pidfile $PIDDIR/$NAME.pid \
              --exec $DAEMON
                  value=$?
                  [ $value -gt 0 ] && exitval=$value
              else
                  log_progress_msg "apparently not running"
              fi
              log_end_msg $exitval
          ;;
        restart|force-reload)
              check_root
          $0 stop
              # Wait for things to settle down
              sleep 1
          $0 start
          ;;
        reload)
              log_warning_msg "Reloading $NAME daemon: not implemented, as the daemon"
              log_warning_msg "cannot re-read the config file (use restart)."
              ;;
        status)
              exitval=0
              log_daemon_msg "Checking status of $DESC" "$NAME"
              if pidofproc -p  $PIDDIR/$NAME.pid $DAEMON  > /dev/null; then
                  log_progress_msg "running"
                  log_end_msg 0
              else
                  log_progress_msg "apparently not running"
                  log_end_msg 1 || true
                  exitval=1
              fi
          if [ "$SESMAN_START" = "yes" ] ; then
                  log_daemon_msg "Checking status of RDP Session Manager" "sesman"
                  if pidofproc -p  $PIDDIR/xrdp-sesman.pid /usr/local/sbin/xrdp-sesman  > /dev/null; then
                      log_progress_msg "running"
                      log_end_msg 0
                  else
                      log_progress_msg "apparently not running"
                      log_end_msg 1 || true
                      exitval=1
                  fi
              fi
              exit $exitval
              ;;
        *)
          N=/etc/init.d/$NAME
          echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
          exit 1
          ;;
      esac
      
      exit 0
      
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.