run-nxproxy2nxagent-over-sockets 5 KB
Newer Older
1 2 3 4 5 6 7 8
#!/bin/bash

#/**************************************************************************/
#/*                                                                        */
#/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/.         */
#/* Copyright (c) 2015-2016 Mike Gabriel <mike.gabriel@das-netzwerkteam.de>*/
#/*                                                                        */
#/* NXSCRIPTS, NX protocol compression and NX extensions to this software  */
9
#/* are copyright of the aforementioned persons and companies.             */
10
#/*                                                                        */
11 12 13
#/* Redistribution and use of the present software is allowed according    */
#/* to terms specified in the file LICENSE.nxcomp which comes in the       */
#/* source distribution.                                                   */
14 15 16
#/*                                                                        */
#/* All rights reserved.                                                   */
#/*                                                                        */
17 18 19 20 21
#/* NOTE: This software has received contributions from various other      */
#/* contributors, only the core maintainers and supporters are listed as   */
#/* copyright holders. Please contact us, if you feel you should be listed */
#/* as copyright holder, as well.                                          */
#/*                                                                        */
22 23 24 25 26 27 28 29
#/**************************************************************************/

#
# Uncomment this to enable echo.
#
#set -x
#

30
ulimit -c "unlimited"
31

32 33
NXPROXYBIN="nxproxy"
NXAGENTBIN="nxagent"
34 35


36
NX_PORT="7"
37

38
NX_SYSTEM="${HOME}/.nx"
39

40
NX_ROOT="${HOME}/.nx"
41 42

#
43
# This should be randomly generated.
44
#
45 46
#NX_COOKIE="$(xauth list |grep "${HOSTNAME}/unix:\<${NX_PORT}\>" | grep 'MIT' | cut -f '5' -d ' ')"
NX_COOKIE="123efa980d2cba234ef6f73deac810ff"
47 48 49 50 51

#
# Create the directories for the NX session.
#

52 53
rm -rf "${NX_ROOT}/C-${NX_PORT}" || exit
mkdir -p "${NX_ROOT}/C-${NX_PORT}" || exit
54

55 56
rm -rf "${NX_ROOT}/S-${NX_PORT}" || exit
mkdir -p "${NX_ROOT}/S-${NX_PORT}" || exit
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

#
# Set the path to libraries and NX executables.
#

LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${HOME}/NX/nxcomp:${HOME}/NX/nxcompext:${HOME}/NX/nx-X11/exports/lib"
export LD_LIBRARY_PATH

PATH="${PATH}:${HOME}/NX/nxclient/nxclient:${HOME}/NX/nx-X11/programs/Xserver/"
export PATH

#
# Create the fake cookie for this display.
#

72
echo "Creating the X authorization cookie."
73

74 75
xauth add "${HOSTNAME}/unix:${NX_PORT}" "MIT-MAGIC-COOKIE-1" "${NX_COOKIE}"
xauth add "${HOSTNAME}:${NX_PORT}" "MIT-MAGIC-COOKIE-1" "${NX_COOKIE}"
76 77 78 79 80 81 82 83 84 85 86

function urlencode() {
  echo "$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "$1")"
}

#
# Options are written in a file 'options' in the session
# directory. The agent will use the DISPLAY settings, so
# we pass in the DISPLAY the name of the options file.
#
# cache=8M,images=32M,link=modem,type=unix-kde,cleanup=0,
87
# accept=62.98.198.1,cookie=${NX_COOKIE},
88 89 90 91
# id=giulietta.nomachine.com-1098-6A4649FD0FCA57FAC275AF3F1C45B10F,
# media=1:1098
#

92 93
NX_HOST="nx/nx,cache=8192k,link=modem,menu=1,keybd=1,samba=0,cups=0,limit=0,\
listen=$(urlencode "unix:${NX_SYSTEM}/C-${NX_PORT}/proxy.socket"),cookie=${NX_COOKIE},errors=${NX_ROOT}/C-${NX_PORT}/session"
94

95
echo "${NX_HOST}:${NX_PORT}" >"${NX_ROOT}/C-${NX_PORT}/options"
96 97 98 99 100 101

#
# Run the agent. if you don't have a font server running,
# remove the argument "-fp unix/:7100"
#

102
NX_AGENT=":${NX_PORT}"
103

104
echo "Running the X client side NX agent."
105

106
SAVED_DISPLAY="${DISPLAY}"
107

108
DISPLAY="nx/nx,options=${NX_ROOT}/C-${NX_PORT}/options:${NX_PORT}"
109 110 111 112
export DISPLAY

#valgrind -v --num-callers=8 --error-limit=no --trace-children=no \
#valgrind --num-callers=8 --tool=memcheck --leak-check=yes --show-reachable=yes --track-fds=yes \
113 114 115
#ldd "${NXAGENTBIN}"
"${NXAGENTBIN}" -name 'NX' -geometry '800x600+100+100' "${@}" \
"${NX_AGENT}" 2>>"${NX_ROOT}/C-${NX_PORT}/session" &
116 117 118 119 120 121

#
# The X server side proxy will forward the connection
# to the original DISPLAY.
#

122
DISPLAY="${SAVED_DISPLAY}"
123 124 125 126 127
export DISPLAY

#
# These are the nxproxy options used to run a typical session.
#
128
# cookie=${NX_COOKIE},root=/home/pinzari/.nx,media=32824,
129 130 131 132
# session=kde_on_giulietta,id=giulietta.nomachine.com-1098-6A4649FD0FCA57FAC275AF3F1C45B10F,
# connect=giulietta.nomachine.com:1098
#

133 134
#NX_HOST="nx/nx,keybd=1,samba=1,cups=1,connect=localhost,cookie=${NX_COOKIE},errors=${NX_ROOT}/S-${NX_PORT}/session"
NX_HOST="nx/nx,keybd=1,samba=0,cups=0,connect=$(urlencode "unix:${NX_SYSTEM}/C-${NX_PORT}/proxy.socket"),cookie=${NX_COOKIE},errors=${NX_ROOT}/S-${NX_PORT}/session"
135

136
echo "${NX_HOST}:${NX_PORT}" >"${NX_ROOT}/S-${NX_PORT}/options"
137

138
echo "Running the X server side NX proxy."
139 140 141

#valgrind -v --num-callers=8 --error-limit=no --trace-children=no \
#valgrind --num-callers=8 --tool=memcheck --leak-check=yes --show-reachable=yes --track-fds=yes \
142 143 144
#ldd "${NXPROXYBIN}"
"${NXPROXYBIN}" -S "nx/nx,options=${NX_ROOT}/S-${NX_PORT}/options:${NX_PORT}" \
2>>"${NX_ROOT}/S-${NX_PORT}/session" &
145

146
echo "Session running on display :${NX_PORT}."