Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
linux_faq:настройка_xrdp_для_переподключения_сессии [2020/04/02 15:18] – admin | linux_faq:настройка_xrdp_для_переподключения_сессии [2020/04/02 15:19] (current) – admin | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Настройка xrdp на Ubuntu 18.04 ====== | ||
+ | Протестировано на **Ubuntu Server 18.04** + **KDE**. | ||
+ | sudo apt-get install -y xrdp | ||
+ | sudo service xrdp restart | ||
+ | В принципе всё - можно подключаться. \\ | ||
+ | В первом пункте меню при подключении нужно выбрать **Xorg** (выбран по дефолту). Переподключение к существующей сессии работает сразу. \\ | ||
+ | Чтобы убрать из меню при входе лишние пункты нужно отредактировать **/ | ||
+ | < | ||
+ | ini_version=1 | ||
+ | fork=true | ||
+ | port=3389 | ||
+ | use_vsock=false | ||
+ | tcp_nodelay=true | ||
+ | tcp_keepalive=true | ||
+ | # | ||
+ | # | ||
+ | security_layer=negotiate | ||
+ | crypt_level=high | ||
+ | certificate= | ||
+ | key_file= | ||
+ | ssl_protocols=TLSv1, | ||
+ | autorun= | ||
+ | allow_channels=true | ||
+ | allow_multimon=true | ||
+ | bitmap_cache=true | ||
+ | bitmap_compression=true | ||
+ | bulk_compression=true | ||
+ | hidelogwindow=true | ||
+ | max_bpp=32 | ||
+ | new_cursors=true | ||
+ | use_fastpath=both | ||
+ | blue=009cb5 | ||
+ | grey=dedede | ||
+ | ; Login Screen Window Title | ||
+ | ls_title=RDLEAS | ||
+ | |||
+ | ; top level window background color in RGB format | ||
+ | ls_top_window_bg_color=009cb5 | ||
+ | |||
+ | ; width and height of login screen | ||
+ | ls_width=350 | ||
+ | ls_height=430 | ||
+ | |||
+ | ; login screen background color in RGB format | ||
+ | ls_bg_color=dedede | ||
+ | |||
+ | ; optional background image filename (bmp format). | ||
+ | # | ||
+ | |||
+ | ; logo | ||
+ | ; full path to bmp-file or file in shared folder | ||
+ | ls_logo_filename= | ||
+ | ls_logo_x_pos=55 | ||
+ | ls_logo_y_pos=50 | ||
+ | |||
+ | ; for positioning labels such as username, password etc | ||
+ | ls_label_x_pos=30 | ||
+ | ls_label_width=60 | ||
+ | |||
+ | ; for positioning text and combo boxes next to above labels | ||
+ | ls_input_x_pos=110 | ||
+ | ls_input_width=210 | ||
+ | |||
+ | ; y pos for first label and combo box | ||
+ | ls_input_y_pos=220 | ||
+ | |||
+ | ; OK button | ||
+ | ls_btn_ok_x_pos=142 | ||
+ | ls_btn_ok_y_pos=370 | ||
+ | ls_btn_ok_width=85 | ||
+ | ls_btn_ok_height=30 | ||
+ | |||
+ | ; Cancel button | ||
+ | ls_btn_cancel_x_pos=237 | ||
+ | ls_btn_cancel_y_pos=370 | ||
+ | ls_btn_cancel_width=85 | ||
+ | ls_btn_cancel_height=30 | ||
+ | |||
+ | [Logging] | ||
+ | LogFile=xrdp.log | ||
+ | LogLevel=INFO | ||
+ | EnableSyslog=true | ||
+ | SyslogLevel=INFO | ||
+ | ; LogLevel and SysLogLevel could by any of: core, error, warning, info or debug | ||
+ | |||
+ | [Channels] | ||
+ | rdpdr=true | ||
+ | rdpsnd=true | ||
+ | drdynvc=true | ||
+ | cliprdr=true | ||
+ | rail=true | ||
+ | xrdpvr=true | ||
+ | tcutils=true | ||
+ | |||
+ | [Xorg] | ||
+ | name=Xorg | ||
+ | lib=libxup.so | ||
+ | username=ask | ||
+ | password=ask | ||
+ | ip=127.0.0.1 | ||
+ | port=-1 | ||
+ | code=20 | ||
+ | </ | ||
+ | |||
+ | ===== Если не переключается раскладка клавиатуры ===== | ||
+ | Также, чтобы нормально переключались раскладки клавиатуры после переподключения к уже запущенной сессии ([[https:// | ||
+ | Нужно отредактировать секцию **[default_layouts_map]** и пару строк привести к такому виду: | ||
+ | < | ||
+ | rdp_layout_us=us, | ||
+ | rdp_layout_ru=us, | ||
+ | а в конец файла добавить: | ||
+ | < | ||
+ | keyboard_type=4 | ||
+ | keyboard_subtype=1 | ||
+ | model=pc104 | ||
+ | options=grp: | ||
+ | rdp_layouts=default_rdp_layouts | ||
+ | layouts_map=layouts_map_ru | ||
+ | |||
+ | [layouts_map_ru] | ||
+ | rdp_layout_us=us, | ||
+ | rdp_layout_ru=us, | ||
+ | |||
+ | |||
+ | ===== Переподключение к сессии после рестарта сервиса xrdp ===== | ||
+ | В версии xrdp, которая поставляется с Ubuntu 18.04, если во время рестарта сервиса были подключены сессии - переподключиться к ним не удается!\\ | ||
+ | Проблема описана тут: https:// | ||
+ | А тут предложено решение: | ||
+ | |||
+ | ====== То что написано ниже - уже не актуально ====== | ||
+ | |||
+ | ===== Настраиваем xrdp с возможностью переподключения к существующей сессии ===== | ||
+ | |||
+ | Хорошая штука **xrdp** - дает возможность подключаться c windows машин к linux машине по протоколу RDP. | ||
+ | Однако, | ||
+ | |||
+ | Сначала ставим и удаляем штатный **xrdp**, чтобы создались конфирурационные файлы: | ||
+ | sudo apt-get install xrdp && sudo apt-get remove xrdp | ||
+ | Потом ставим зависимости для сборки последней версии: | ||
+ | sudo apt-get install autoconf libtool libpam0g-dev libx11-dev libxfixes-dev libssl-dev | ||
+ | И устанавливаем X11vnc: | ||
+ | sudo apt-get install x11vnc | ||
+ | Скачиваем и распаковываем последнюю версию **xrdp** с **sourceforge**: | ||
+ | wget http:// | ||
+ | tar -xvf ./ | ||
+ | cd xrdp-v0.6.1 | ||
+ | Собираем и устанавливаем: | ||
+ | sudo ./ | ||
+ | sudo ./configure | ||
+ | sudo make | ||
+ | sudo make install | ||
+ | Настраиваем **xrdp**: | ||
+ | cd /etc/xrdp/ | ||
+ | sudo mv startwm.sh startwm.sh.backup | ||
+ | sudo ln -s / | ||
+ | sudo mkdir / | ||
+ | sudo cp / | ||
+ | Также заменяем скрипт, | ||
+ | sudo cp / | ||
+ | sudo chmod a-x / | ||
+ | sudo nano / | ||
+ | И вставляем туда вот что: | ||
+ | < | ||
+ | # | ||
+ | # start/stop xrdp and sesman daemons | ||
+ | # | ||
+ | ### BEGIN INIT INFO | ||
+ | # Provides: | ||
+ | # Required-Start: | ||
+ | # Required-Stop: | ||
+ | # Default-Start: | ||
+ | # Default-Stop: | ||
+ | # Short-Description: | ||
+ | # Description: | ||
+ | # graphical login to a remote client allowing connection | ||
+ | # to a VNC server or another RDP server. | ||
+ | ### END INIT INFO | ||
+ | |||
+ | PATH=/ | ||
+ | DAEMON=/ | ||
+ | PIDDIR=/ | ||
+ | SESMAN_START=yes | ||
+ | USERID=xrdp | ||
+ | RSAKEYS=/ | ||
+ | NAME=xrdp | ||
+ | DESC=" | ||
+ | |||
+ | test -x $DAEMON || exit 0 | ||
+ | |||
+ | . / | ||
+ | |||
+ | check_root() | ||
+ | if [ "$(id -u)" != " | ||
+ | log_failure_msg "You must be root to start, stop or restart $NAME." | ||
+ | exit 4 | ||
+ | fi | ||
+ | } | ||
+ | |||
+ | if [ -r / | ||
+ | . / | ||
+ | fi | ||
+ | |||
+ | # Tasks that can only be run as root | ||
+ | if [ "$(id -u)" = " | ||
+ | # Check for pid dir | ||
+ | if [ ! -d $PIDDIR ] ; then | ||
+ | mkdir $PIDDIR | ||
+ | fi | ||
+ | chown $USERID: | ||
+ | |||
+ | # Check for rsa key | ||
+ | if [ ! -f $RSAKEYS ] || cmp $RSAKEYS / | ||
+ | log_action_begin_msg " | ||
+ | (umask 077 ; xrdp-keygen xrdp $RSAKEYS) | ||
+ | chown $USERID: | ||
+ | if [ ! -f $RSAKEYS ] ; then | ||
+ | log_action_end_msg 1 "could not create $RSAKEYS" | ||
+ | exit 1 | ||
+ | fi | ||
+ | log_action_end_msg 0 " | ||
+ | fi | ||
+ | fi | ||
+ | |||
+ | case " | ||
+ | start) | ||
+ | check_root | ||
+ | exitval=0 | ||
+ | log_daemon_msg " | ||
+ | if pidofproc -p $PIDDIR/ | ||
+ | log_progress_msg "$NAME apparently already running" | ||
+ | log_end_msg 0 | ||
+ | exit 0 | ||
+ | fi | ||
+ | log_progress_msg $NAME | ||
+ | start-stop-daemon --start --quiet --oknodo | ||
+ | --chuid $USERID: | ||
+ | exitval=$? | ||
+ | if [ " | ||
+ | log_progress_msg " | ||
+ | start-stop-daemon --start --quiet --oknodo --pidfile $PIDDIR/ | ||
+ | | ||
+ | value=$? | ||
+ | [ $value -gt 0 ] && exitval=$value | ||
+ | fi | ||
+ | # Make pidfile readables for all users (for status to work) | ||
+ | [ -e $PIDDIR/ | ||
+ | [ -e $PIDDIR/ | ||
+ | # Note: Unfortunately, | ||
+ | # the pidffile unless properly patched | ||
+ | log_end_msg $exitval | ||
+ | ;; | ||
+ | stop) | ||
+ | check_root | ||
+ | [ -n " | ||
+ | echo " | ||
+ | exit 0 | ||
+ | } | ||
+ | exitval=0 | ||
+ | log_daemon_msg " | ||
+ | log_progress_msg " | ||
+ | if pidofproc -p $PIDDIR/ | ||
+ | start-stop-daemon --stop --quiet --oknodo --pidfile $PIDDIR/ | ||
+ | --chuid $USERID: | ||
+ | exitval=$? | ||
+ | else | ||
+ | log_progress_msg " | ||
+ | fi | ||
+ | log_progress_msg $NAME | ||
+ | if pidofproc -p $PIDDIR/ | ||
+ | start-stop-daemon --stop --quiet --oknodo --pidfile $PIDDIR/ | ||
+ | --exec $DAEMON | ||
+ | value=$? | ||
+ | [ $value -gt 0 ] && exitval=$value | ||
+ | else | ||
+ | log_progress_msg " | ||
+ | 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 " | ||
+ | log_warning_msg " | ||
+ | ;; | ||
+ | status) | ||
+ | exitval=0 | ||
+ | log_daemon_msg " | ||
+ | if pidofproc -p $PIDDIR/ | ||
+ | log_progress_msg " | ||
+ | log_end_msg 0 | ||
+ | else | ||
+ | log_progress_msg " | ||
+ | log_end_msg 1 || true | ||
+ | exitval=1 | ||
+ | fi | ||
+ | if [ " | ||
+ | log_daemon_msg " | ||
+ | if pidofproc -p $PIDDIR/ | ||
+ | log_progress_msg " | ||
+ | log_end_msg 0 | ||
+ | else | ||
+ | log_progress_msg " | ||
+ | log_end_msg 1 || true | ||
+ | exitval=1 | ||
+ | fi | ||
+ | fi | ||
+ | exit $exitval | ||
+ | ;; | ||
+ | *) | ||
+ | N=/ | ||
+ | echo " | ||
+ | exit 1 | ||
+ | ;; | ||
+ | esac | ||
+ | |||
+ | exit 0 | ||
+ | </ | ||
+ | Редактируем **/ | ||
+ | sudo nano / | ||
+ | и приводим его к такому виду: | ||
+ | < | ||
+ | bitmap_cache=yes | ||
+ | bitmap_compression=yes | ||
+ | port=3389 | ||
+ | crypt_level=low | ||
+ | channel_code=1 | ||
+ | max_bpp=24 | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | #red=ff0000 | ||
+ | # | ||
+ | # | ||
+ | |||
+ | [xrdp1] | ||
+ | name=sesman-Xvnc | ||
+ | lib=libvnc.so | ||
+ | username=ask | ||
+ | password=ask | ||
+ | ip=127.0.0.1 | ||
+ | port=-1 | ||
+ | </ | ||
+ | |||
+ | Если на вашей **Ubuntu** используется **KDE**, то | ||
+ | echo " | ||
+ | |||
+ | Если на вашей **Ubuntu** используется **gnome**, то надо отключить богатую графику: | ||
+ | sudo apt-get install gnome-session-fallback | ||
+ | echo " | ||
+ | |||
+ | Теперь запускаем xrdp, подключаемся и радуемся | ||
+ | sudo / |