[FreeNX-kNX] Working Cups printing with Fedora core5

Marcel kraan marcel at kraan.net
Mon Nov 27 17:56:29 UTC 2006


Yes we must change a vew things.
But the nxnode script is also working on fedora core 6
with cups 1.1 and nxclient 1.5 running




Alastair Johnson wrote:
> Thanks for getting this all together in one post. I have a couple of 
> clarifications that might save somebody some trouble.
> 
> 1. You need cups 1.1.x for this to work. Many FC5 users will now have cups 
> 1.2.x because yum will have updated it. These users will need to downgrade to 
> 1.1.x and add cups* to the exclude line in /etc/yum.conf until we can work 
> out how to support cups 1.2.x. This applies to other distros too.
> 
> 2. The method of determining $printhost described below is fedora-specific. 
> Using 'hostname' or 'uname -n' should work more generally. Unfortunately the 
> hostname is sometimes present in /etc/hosts against the localhost address, so 
> the name may still resolve to localhost. To cover this I think we should have 
> $printhost as an option in node.conf and only use the hostname if this isn't 
> set.
> 
> I don't like the 'kill all processes for this user' idea, but I don't have a 
> better solution at the moment.
> 
> On Monday 27 November 2006 13:59, Marcel kraan wrote:
>> changed nxnode:
>> NXNODE - Version 1.5.0-50 OS (GPL)
>>
>>
>> I have here a complete working nxnode script for fedora core5.
>> I have added many extras and changed some functions
>>
>>
>> 1.
>> This is add on the end of the node_terminate_session function:
>> This will clean up the userspace on the server.
>> All processes will be killed. not clean but very efective
>>
>>          # quickkill script by marcel at kraan.net
>>          if [ "$USER" != "root" ]; then
>>                  /bin/kill -9 `ps axuw |grep $USER | /bin/awk '{print $2}'`
>>
>>          fi
>>
>>
>>
>> 2.
>> At the srat of the session i have added the IPP_PORT section
>> This is for printing NON kde applications
>>
>>         # ok, lets make the session dir first:
>>
>>          sess_id="$SERVER_NAME-$display-$uniqueid"
>>          [ "$EXPORT_SESSIONID" = "1" ] && export NXSESSIONID="$sess_id"
>>
>>         
>> ###########################################################################
>> ############## # added by  marcel at kraan.net added to the environment for
>> printing non kde applications # this is not working in the add_printer
>> function
>>          IPP_PORT=$(node_cupsd_get_port)
>>          export IPP_PORT
>>         
>> ###########################################################################
>> ##############
>>
>> 3.
>> I have added this part for the cups printing
>> Cups printing works only when you print to your hostname on the server and
>> not to localhost
>>
>> Alastair thinks the change from localhost to actual hostname is needed
>> because CUPS uses token-based authentication for localhost instead of the
>> usual challenge-response methods. Normally this is fine, but since we are
>> port-forwarding to a non-local cups we need the challenge-response, so we
>> need something that resolves to the local machine but isn't localhost (or
>> 127.0.0.1 for that matter)
>>
>>
>>         #################################################################
>>          # by marcel at kraan.net and Alastair Johnson
>>          # get the server hostname cups printing could not via localhost
>>
>>          if [ -f /etc/sysconfig/network ] ; then
>>                  . /etc/sysconfig/network
>>                  if [ "$NETWORKING" = "yes" ] ; then
>>                          printhost="$HOSTNAME"
>>                  else
>>                          printhost="localhost"
>>                  fi
>>          fi
>>
>>          if [ "$type" = "smb" ]
>>          then
>>                 
>> DEVICE_URI="smb://$username:$password@$printhost:$port/$share"
>> NAME="$share"
>>          else
>>                 
>> DEVICE_URI="ipp://$username:$password@$printhost:$port/printers/$printer"
>> NAME="$printer"
>>          fi
>>
>>          MODEL=$($PATH_BIN/nxclient -printer "$NAME" -display :$display)
>>          [ -z "$MODEL" -o "$MODEL" = "cancel: aborted" ] && return
>>
>>          PUBLIC="-u allow:$USER"
>>          [ "$public" == "1" ] && PUBLIC=""
>>          /usr/sbin/lpadmin -p "$NAME" -E -v "$DEVICE_URI" -m "$MODEL"
>> $PUBLIC [ "$defaultPrinter" = "1" ] && /usr/sbin/lpadmin -d "$NAME"
>>
>>          #################################################################
>>
>>
>>
>>
>> 4.
>> At his place i post the entire nxnode script.
>> The smbmounting is still not working well and clean.
>>
>>
>> #!/bin/bash
>>
>> # Free implementation of nxserver components
>> #
>> # nxnode does accept (for now):
>> #
>> #	--startsession
>> #	--terminate
>> #	--smbmount
>> #		(smbmount is not implemented yet)
>> #
>> # Copyright (c) 2004 by Fabian Franz.
>> #
>> # License: GNU GPL, version 2
>> #
>> # CVS: $Id: nxnode,v 1.77 2005/08/02 15:20:18 fabianx Exp $
>> #
>> # 21.06.2004: - Full reconnection support
>>
>> # Read the config file
>> . $(PATH=$(cd $(dirname $0) && pwd):$PATH which nxloadconfig) --userconf
>>
>> echo "NX> 1000 NXNODE - Version $NX_VERSION $NX_LICENSE"
>>
>> if [ "$1" != "--check" -a "$1" != "--setkey" -a "$1" != "--agent" ]
>> then
>> 	read CMDLINE
>>
>> 	CMDLINE="a=b&$CMDLINE"
>> fi
>>
>> # --------
>>
>> # following two functions are Copyright by Klaus Knopper
>>
>> # same for strings
>> stringinstring(){
>> case "$2" in *$1*) return 0;; esac
>> return 1
>> }
>>
>> # Reread boot command line; echo last parameter's argument or return false.
>> getparam(){
>> stringinstring "&$1=" "$CMDLINE" || return 1
>> echo "$CMDLINE" |  tr "&" "\n" | egrep "^"$1"=" | awk -F= '{ VAL=$2 } END {
>> print VAL }' return 0
>> }
>>
>> find_app()
>> {
>> 	set -- $*
>> 	which $1 2>/dev/null
>> }
>>
>> getparam_user()
>> {
>> 	[ $UID -eq 0 ] && echo $(getparam user)
>> 	[ $UID -eq 0 ] || $(whoami)
>> }
>>
>> node_abort()
>> {
>> 	echo "$@" 1>&2
>> 	exit 1
>> }
>>
>> getparam_sessionid()
>> {
>> 	sessionid=$(getparam sessionid)
>>
>> 	[ -n "$sessionid" ] || sessionid=$(getparam session_id)
>> 	[ -n "$sessionid" ] || node_abort "NX> 500 Error: missing parameter
>> session id" echo $sessionid
>> }
>>
>>
>> node_terminate_agent()
>> {
>> 	AGENT_PID=$(cat $USER_FAKE_HOME/.nx/C-$1/pids/agent 2>/dev/null)
>> 	[ -n "$AGENT_PID" ] && kill $AGENT_PID 2>/dev/null
>> }
>>
>> node_terminate_session()
>> {
>> 	[ -d "$USER_FAKE_HOME/.nx/C-$1/" ] || return
>> 	AGENT_PID=$(cat $USER_FAKE_HOME/.nx/C-$1/pids/agent 2>/dev/null)
>> 	if [ -n "$AGENT_PID" ]
>> 	then
>> 		kill $AGENT_PID 2>/dev/null
>> 		if ! [ "$virtualdesktop" = "0" -a "$rootless" != "1" ]
>> 		then
>> 			sleep 1
>> 			kill -0 $AGENT_PID 2>/dev/null && kill -9 $AGENT_PID 2>/dev/null
>> 		fi
>> 	fi
>> 	# remove possible leftover display ...
>> 	display=$(echo $1 | rev | cut -d"-" -f2 | rev)
>> 	rm -f /tmp/.X$display-lock
>> 	rm -f /tmp/.X11-unix/X$display
>>
>> 	# remove cookie
>> 	$COMMAND_XAUTH -v source $USER_FAKE_HOME/.nx/C-$1/scripts/authority
>>> /dev/null 2>&1 [ "$SESSION_LOG_CLEAN" = "1" ] && rm -rf
>> $USER_FAKE_HOME/.nx/C-$1/ [ "$SESSION_LOG_CLEAN" = "0" -a "$2" = "failed" ]
>> && mv $USER_FAKE_HOME/.nx/C-$1/ $USER_FAKE_HOME/.nx/F-C-$1/ [
>> "$SESSION_LOG_CLEAN" = "0" -a "$2" != "failed" ] && mv
>> $USER_FAKE_HOME/.nx/C-$1/ $USER_FAKE_HOME/.nx/T-C-$1/
>>
>> 	# quickkill script by marcel at kraan.net
>> 	if [ "$USER" != "root" ]; then
>>          	/bin/kill -9 `ps axuw |grep $USER | /bin/awk '{print $2}'`
>>
>> 	fi
>>
>>
>> }
>>
>> node_fail_restore_session()
>> {
>> 	echo "NX> 1004 Error: Could not resume session. nxagent process could not
>> be found." node_terminate_session "$sess_id" "failed"
>> 	exit 1
>> }
>>
>> node_suspend_session()
>> {
>> 	AGENT_PID=$(cat $USER_FAKE_HOME/.nx/C-$1/pids/agent 2>/dev/null)
>> 	if [ -n "$AGENT_PID" ]
>> 	then
>> 		kill -0 $AGENT_PID || return 1
>> 		kill -HUP $AGENT_PID && return 0
>> 	fi
>> 	return 1
>> }
>>
>> # ---------
>> #stringinstring "$CMD"
>>
>> node_start_applications()
>> {
>> 	# close input and output file descriptors
>> 	exec 0<&-
>> 	exec 1>&-
>> 	exec 2>&-
>>
>> 	. /etc/profile
>> 	[ -f ~/.bash_profile ] && . ~/.bash_profile
>>
>> 	mkdir -p $USER_FAKE_HOME/.nx/C-$sess_id/pids/
>>
>> 	STARTX=""
>> 	case $type in
>> 		unix-kde)
>> 			STARTX=$COMMAND_START_KDE
>> 		;;
>> 		unix-gnome)
>> 			STARTX=$COMMAND_START_GNOME
>> 		;;
>> 		unix-cde)
>> 			STARTX=$COMMAND_START_CDE
>> 		;;
>> 		unix-application)
>> 			[ "$application" = "xterm" ] && application="$COMMAND_XTERM"
>> 			STARTX=$application
>> 		;;
>> 		unix-default)
>> 			if [ -x "$HOME/$USER_X_STARTUP_SCRIPT" ]; then
>> 				STARTX="$HOME/$USER_X_STARTUP_SCRIPT"
>> 			elif which "$DEFAULT_X_SESSION" >/dev/null 2>&1 ; then
>> 				STARTX="$DEFAULT_X_SESSION"
>> 			fi
>> 		;;
>> 	esac
>> 	[ -n "$STARTX" ] || return
>>
>> 	if [ "$mediahelper" = "esd" ]
>> 	then
>> 		# Set Espeaker variable
>> 		let ESPEAKER=$display+7000
>> 		export ESPEAKER="127.0.0.1:$ESPEAKER"
>>
>> 		# Do not spawn new ESD daemons
>> 		export ESD_NO_SPAWN="yes"
>>
>> 		# Check for config file directive
>> 		if [ "$ENABLE_ESD_PRELOAD" = "1" -a -x "$(find_app $ESD_BIN_PRELOAD)" ]
>> 		then
>> 			STARTX="$ESD_BIN_PRELOAD $STARTX"
>>
>> 			echo "Info: NXNODE - Using $ESD_BIN_PRELOAD wrapper script." >>
>> $USER_FAKE_HOME/.nx/C-$sess_id/session fi
>> 	elif [ "$mediahelper" = "artsd" ]
>> 	then
>> 		# Overwrite users mcoprc
>> 		echo -n "GlobalComm=Arts::X11GlobalComm" > $HOME/.mcoprc
>> 		if [ "$ENABLE_ARTSD_PRELOAD" = "1" -a -x "$(find_app $ARTSD_BIN_PRELOAD)"
>> ] then
>> 			STARTX="$ARTSD_BIN_PRELOAD $STARTX"
>> 			echo "Info: NXNODE - Using $ARTSD_BIN_PRELOAD wrapper script." >>
>> $USER_FAKE_HOME/.nx/C-$sess_id/session fi
>> 	fi
>>
>> 	[ "$virtualdesktop" = "0" -a "$rootless" != "1" ] && export
>> LD_PRELOAD="$APPLICATION_LIBRARY_PRELOAD:$LD_PRELOAD" if [
>> "$virtualdesktop" = "1" -a "$type" = "unix-application" -a "$DEFAULT_X_WM"
>> != "" -a -x "$(find_app $DEFAULT_X_WM)" ] then
>> 		DISPLAY=unix:$display $DEFAULT_X_WM
>>>> $USER_FAKE_HOME/.nx/C-$sess_id/session 2>&1 & WM_PID=$!
>> 	fi
>> 	DISPLAY=unix:$display $STARTX >>$USER_FAKE_HOME/.nx/C-$sess_id/session
>> 2>&1 & APP_PID=$!
>> 	mkdir -p $USER_FAKE_HOME/.nx/C-$sess_id/pids/
>> 	echo "$APP_PID" > $USER_FAKE_HOME/.nx/C-$sess_id/pids/applications
>> 	wait $APP_PID
>> 	if [ -n "$WM_PID" ]
>> 	then
>> 		# kill the WM after application is finished?
>> 		[ "$KILL_DEFAULT_X_WM" = "1" ] && kill $WM_PID 2>/dev/null
>> 		# or just wait until it finishes?
>> 		[ "$KILL_DEFAULT_X_WM" = "1" ] || wait $WM_PID
>> 	fi
>> 	rm -f $USER_FAKE_HOME/.nx/C-$sess_id/pids/applications
>>
>> 	# Do not terminate agent in case of rootless agent mode.
>> 	# The agent times out after a while by itself anyway.
>> 	[ "$virtualdesktop" = "1" -o "$rootless" != "1" ] && node_terminate_agent
>> $sess_id }
>>
>> node_start_agent()
>> {
>> 	# Ok, now we do some wicked fd magic.
>> 	#
>> 	# first part:
>> 	#
>> 	# nxagent's fd #2 -> fd #3
>>
>> 	# second part:
>> 	#
>> 	# fd #1 -> #4
>> 	# fd #3 -> #1
>> 	# tee | node_start_monitor
>>
>> 	# third part
>> 	# fd #4 -> #1
>>
>> 	# => all output of nxagent goes to tee | node_start_monitor, while
>> 	#    leaving all other output flow through like normally.
>>
>> 	# preparations
>> 	exec 3>&2
>> 	exec 4>&1
>>
>> 	{
>>
>> 	{
>>
>> 	export
>> DISPLAY="nx/nx,options=$USER_FAKE_HOME/.nx/C-$sess_id/options:$display"
>> export XAUTHORITY="$USER_FAKE_HOME/.nx/C-$sess_id/authority"
>> 	export HOME="$USER_FAKE_HOME"
>>
>> 	# backwards compatibility
>> 	K=""
>> 	[ -n "$keyboard" ] && K="-keyboard $keyboard"
>> 	[ -n "$kbtype" ] && K="-kbtype $kbtype"
>> 	B=""
>> 	[ -n "$backingstore" -a "$ENABLE_2_0_0_BACKEND" != "1" ] && B="-bs
>> $backingstore" G=""
>> 	[ -n "$geometry" ] && G="-geometry $geometry"
>> 	R="-D"
>> 	[ "$rootless" = "1" ] && R="-R"
>> 	vncfullscreen=""
>> 	[ "$geometry" = "fullscreen" -a "$type" = "vnc" ] &&
>> vncfullscreen="-fullscreen" && G="" [ "$geometry" = "fullscreen" -a "$type"
>> = "windows" ] && G="-geometry `echo $screeninfo | cut -d"x" -f1,2`"
>>
>> 	if [ "$type" = "windows" ]
>> 	then
>> 		# nxdesktop session (Windows RDP)
>> 		[ "$SET_LD_LIBRARY_PATH" = "1" ] && export
>> LD_LIBRARY_PATH="$AGENT_LIBRARY_PATH:$LD_LIBRARY_PATH" U=""
>> 		P=""
>> 		D=""
>> 		[ -n "$agent_user" ] && U="-u $agent_user"
>> 		[ -n "$agent_password" ] && P="-p -"
>> 		[ -n "$agent_domain" ] && D="-d $agent_domain"
>> 		echo "$agent_password" | $PATH_BIN/nxdesktop -name "NX -
>> $user@$SERVER_NAME:$display - $session (GPL Edition)" -option
>> "$USER_FAKE_HOME/.nx/C-$sess_id/options" $K $G $U $P $D $agent_server
>> $AGENT_EXTRA_OPTIONS_RDP 2>&3 & elif [ "$type" = "vnc" ]
>> 	then
>> 		# nxviewer session (VNC RFP)
>> 		[ "$SET_LD_LIBRARY_PATH" = "1" ] && export
>> LD_LIBRARY_PATH="$AGENT_LIBRARY_PATH:$LD_LIBRARY_PATH" mkdir -p
>> $USER_FAKE_HOME/.nx/C-$sess_id/scripts/
>> 		echo "$agent_password" | $PATH_BIN/nxpasswd
>> $USER_FAKE_HOME/.nx/C-$sess_id/scripts/.passwd doit $PATH_BIN/nxviewer
>> -encodings tight hextile copyrect raw -passwd
>> $USER_FAKE_HOME/.nx/C-$sess_id/scripts/.passwd -name "NX -
>> $user@$SERVER_NAME:$display - $session (GPL Edition)" -option
>> "$USER_FAKE_HOME/.nx/C-$sess_id/options" $vncfullscreen $G $K $agent_server
>> $AGENT_EXTRA_OPTIONS_RFB 2>&3 &
>> 	elif [ "$R" = "-R" -a "$rootless" != "1" ]
>> 	then
>> 		# nxproxy single application mode session
>> 		[ "$SET_LD_LIBRARY_PATH" = "1" ] && export
>> LD_LIBRARY_PATH="$PROXY_LIBRARY_PATH:$LD_LIBRARY_PATH" $PATH_BIN/nxproxy -C
>> :$display $PROXY_EXTRA_OPTIONS 2>&3 &
>> 	else
>> 		# nxagent session (X11)
>> 		[ "$SET_LD_LIBRARY_PATH" = "1" ] && export
>> LD_LIBRARY_PATH="$AGENT_LIBRARY_PATH:$LD_LIBRARY_PATH" P="-nopersistent"
>> 		OLD_IFS=$IFS
>> 		IFS=","
>> 		[ "$ENABLE_PERSISTENT_SESSION" = "all" ] && P="-persistent"
>> 		[ "$ENABLE_PERSISTENT_SESSION" = "all" ] || for USERNAME in
>> $ENABLE_PERSISTENT_SESSION; do [ "${USERNAME:0:1}" != "@" ] && [ "$USER" =
>> "$USERNAME" ] && P="-persistent" && break ; [ "${USERNAME:0:1}" = "@" ] &&
>> [ -z $(groups "$USER" | egrep "^${USERNAME:1}:") ] && P="-persistent" &&
>> break ; done
>> 		for USERNAME in $DISABLE_PERSISTENT_SESSION; do
>> 			[ "${USERNAME:0:1}" != "@" ] && [ "$USER" = "$USERNAME" ] &&
>> P="-nopersistent" && break ; [ "${USERNAME:0:1}" = "@" ] && [ -z $(groups
>> "$USER" | egrep "^${USERNAME:1}:") ] && P="-nopersistent" && break ; done
>> 		IFS=$OLD_IFS
>> 		FP=""
>> 		[ -n "$AGENT_FONT_SERVER" ] && FP="-fp $AGENT_FONT_SERVER"
>> 		PATH="$PATH_BIN:$PATH" $PATH_BIN/nxagent $P $R -name "NX -
>> $user@$SERVER_NAME:$display - $session (GPL Edition)" -option
>> "$USER_FAKE_HOME/.nx/C-$sess_id/options" $K $G $B $FP :$display
>> $AGENT_EXTRA_OPTIONS_X 2>&3 & fi
>> 	PID=$!
>> 	mkdir -p $USER_FAKE_HOME/.nx/C-$sess_id/pids/
>> 	echo "$PID" > $USER_FAKE_HOME/.nx/C-$sess_id/pids/agent
>> 	wait $PID
>> 	AGENT_EXIT_STATUS=$?
>> 	failed=""
>> 	if [ $AGENT_EXIT_STATUS -ne 0 ]
>> 	then
>> 		echo "NX> 1004 Error: NX Agent exited with exit status 1."
>> 		failed="failed"
>> 	fi
>> 	echo "NX> 1006 Session status: closed"
>>
>> 	rm -f $USER_FAKE_HOME/.nx/C-$sess_id/pids/agent
>> 	node_terminate_session "$sess_id" $failed
>>
>> 	# remove possible leftovers of nxagent
>> 	rm -f /tmp/.X$display-lock
>> 	rm -f /tmp/.X11-unix/X$display
>> 	} 3>&1 1>&4 | tee $USER_FAKE_HOME/.nx/C-$sess_id/session |
>> node_start_monitor; } 4>&1 }
>>
>> node_kill_proxy()
>> {
>> 	# Info: Proxy running in server mode with pid '5279'.
>> 	PROXY_PID=$(grep "Info: Proxy running in server mode with pid"
>> $USER_FAKE_HOME/.nx/C-$1/session | cut -d"'" -f2) sleep 2
>> 	[ -n "$PROXY_PID" ] && kill $PROXY_PID 2>/dev/null
>> }
>>
>> node_cupsd_stop()
>> {
>> 	[ -e "$USER_FAKE_HOME/.nx/C-$sess_id/pids/cupsd" ] || return
>> 	NODE_CUPSD_PID=$(cat "$USER_FAKE_HOME/.nx/C-$sess_id/pids/cupsd")
>> 	# Check for a running userspace cupsd, look if its still active
>> 	# and kill it if so
>> 	( [ -n "$NODE_CUPSD_PID" ] && kill -0 $NODE_CUPSD_PID && kill
>> $NODE_CUPSD_PID && sleep 2 && kill -0 $NODE_CUPSD_PID && kill -9
>> $NODE_CUPSD_PID ) 2>/dev/null
>> 	# delete pid file
>> 	rm -f "$USER_FAKE_HOME/.nx/C-$sess_id/pids/cupsd"
>> 	# remove all printers
>> 	echo >"$USER_FAKE_HOME/.nx/C-$sess_id/cups/printers.conf"
>> }
>>
>> node_cupsd_setup()
>> {
>> 	let NODE_CUPSD_PORT=$display+9000 # offset 9000 for userspace cupsd's
>> 	export NODE_CUPSD_PORT
>> 	mkdir -p "$USER_FAKE_HOME/.nx/C-$sess_id/pids/"
>> 	[ -e "$USER_FAKE_HOME/.nx/C-$sess_id/pids/cupsd" ] && return
>> 	touch "$USER_FAKE_HOME/.nx/C-$sess_id/pids/cupsd"
>>
>> 	mkdir -p $USER_FAKE_HOME/.nx/C-$sess_id/cups/spool/tmp
>> $USER_FAKE_HOME/.nx/C-$sess_id/cups/spool/certs
>> $USER_FAKE_HOME/.nx/C-$sess_id/cups/ppd ln -sf spool/certs
>> $USER_FAKE_HOME/.nx/C-$sess_id/cups/certs
>> cat <<EOF > $USER_FAKE_HOME/.nx/C-$sess_id/cups/cupsd.conf
>> AccessLog /dev/null
>> ErrorLog error_log
>> PageLog page_log
>> LogLevel info
>> TempDir $USER_FAKE_HOME/.nx/C-$sess_id/cups/spool/tmp
>> RequestRoot $USER_FAKE_HOME/.nx/C-$sess_id/cups/spool
>> ServerRoot $USER_FAKE_HOME/.nx/C-$sess_id/cups/
>> Port $NODE_CUPSD_PORT
>> Browsing Off
>> ServerName localhost
>>
>> <Location />
>> Order Deny,Allow
>> Deny From All
>> Allow from 127.0.0.1
>> </Location>
>> EOF
>> 	touch $USER_FAKE_HOME/.nx/C-$sess_id/cups/printers.conf
>> $USER_FAKE_HOME/.nx/C-$sess_id/cups/classes.conf
>>
>> 	# copy mime.* files
>> 	cp "$CUPS_ETC"/mime.* "$USER_FAKE_HOME/.nx/C-$sess_id/cups/"
>>
>> 	# start cupsd
>> 	$COMMAND_CUPSD -f -c "$USER_FAKE_HOME/.nx/C-$sess_id/cups/cupsd.conf"
>> &>/dev/null </dev/null & CUPSD_PID=$!
>> 	sleep 3
>> 	echo $CUPSD_PID >"$USER_FAKE_HOME/.nx/C-$sess_id/pids/cupsd"
>> 	# setup KDE
>> 	if [ "$ENABLE_KDE_CUPS" = "1" -a -e "$KDE_PRINTRC" ]
>> 	then
>> 		if egrep -q "^Port=" "$KDE_PRINTRC"
>> 		then
>> 			perl -pi -e 's/^Port=.*/Port='"$NODE_CUPSD_PORT"'/g' "$KDE_PRINTRC"
>> 		else
>> 			echo "[CUPS]" >> "$KDE_PRINTRC"
>> 			echo "Port=$NODE_CUPSD_PORT" >> "$KDE_PRINTRC"
>> 		fi
>> 	fi
>>
>> }
>>
>> node_cupsd_reload()
>> {
>> 	[ -e "$USER_FAKE_HOME/.nx/C-$sess_id/pids/cupsd" ] || return
>> 	NODE_CUPSD_PID=$(cat "$USER_FAKE_HOME/.nx/C-$sess_id/pids/cupsd")
>> 	[ -n "$NODE_CUPSD_PID" ] && kill -0 $NODE_CUPSD_PID && kill -HUP
>> $NODE_CUPSD_PID }
>>
>> node_cupsd_get_port()
>> {
>> 	node_cupsd_setup
>> 	echo $NODE_CUPSD_PORT
>> }
>>
>> node_umount_smb()
>> {
>> 	[ -e "$USER_FAKE_HOME/.nx/C-$sess_id/scripts/mpoint" ] || return
>> 	cat "$USER_FAKE_HOME/.nx/C-$sess_id/scripts/mpoint" | while read mpoint
>> 	do
>> 		$COMMAND_SMBUMOUNT "$mpoint" >/dev/null 2>/dev/null
>> 	done
>> }
>>
>>
>> node_stop_services()
>> {
>> 	node_umount_smb
>> 	node_cupsd_stop
>> }
>>
>> node_emergency_exit()
>> {
>> 	# umount shares & stop printers
>> 	node_stop_services
>>
>> 	# kill the session
>> 	node_terminate_session "$sess_id" "failed"
>>
>> 	echo "NX> 1004 Error: Emergency exit due to kill signal."
>> }
>>
>> #
>> # Monitoring the nxagent: Its also kind of a "state-machine"
>> #                         as it has to keep track of different
>> #                         connection states and react differently.
>> #
>>
>> node_start_monitor_2_0_0()
>> {
>> 	TAIL_PID=""
>> 	SUSPEND_STATUS="$2"
>> 	SESSION_STATUS=""
>>
>> 	while read line
>> 	do
>> 		#
>> 		# Catch tail pid
>> 		#
>>
>> 		if stringinstring "Info: tail -f running with pid" "$line"
>> 		then
>> 			TAIL_PID=$(echo $line | cut -d"'" -f2)
>> 		fi
>>
>> 		#
>> 		# Session messages
>> 		#
>>
>> 		if stringinstring "Session: Starting session at" "$line"
>> 		then
>> 			echo "NX> 1009 Session status: starting"
>> 		fi
>>
>> 		if stringinstring "Session: Suspending session at" "$line"
>> 		then
>> 			echo "NX> 1009 Session status: suspending"
>> 		fi
>>
>> 		if stringinstring "Session: Terminating session at" "$line"
>> 		then
>> 			echo "NX> 1009 Session status: terminating"
>> 		fi
>>
>> 		if stringinstring "Session: Resuming session at" "$line"
>> 		then
>> 			echo "NX> 1009 Session status: resuming"
>> 		fi
>>
>>
>> 		#
>> 		# Session suspend
>> 		#
>>
>> 		if stringinstring "Session: Session suspended at" "$line"
>> 		then
>> 			echo "NX> 1005 Session status: suspended"
>> 			# umount shares & stop printers
>>
>> 			if [ "$SUSPEND_STATUS" = "Running" ]
>> 			then
>> 				node_suspend_session $sess_id
>> 				SUSPEND_STATUS=""
>> 			else
>> 				node_stop_services
>> 			fi
>> 		fi
>>
>> 		#
>> 		# Watchdog termination
>> 		#
>>
>> 		if stringinstring "Info: Watchdog running with pid" "$line"
>> 		then
>> 			WATCHDOG_PID=$(echo $line | cut -d"'" -f2)
>> 		fi
>>
>> 		if stringinstring "Info: Waiting the watchdog process to complete."
>> "$line" then
>> 			# Kill the watchdog
>> 			kill $WATCHDOG_PID 2>/dev/null
>> 		fi
>>
>> 		#
>> 		# Session is running
>> 		#
>>
>> 		if stringinstring "Info: Waiting for connection from" "$line"
>> 		then
>> 			echo "NX> 710 Session status: running"
>> 			echo "NX> 1002 Commit"
>> 			echo "NX> 1006 Session status: running"
>> 		fi
>>
>> 		#
>> 		# Reconnection success!
>> 		#
>>
>> 		if stringinstring "Session: Session resumed at" "$line"
>> 		then
>> 			echo "NX> 718 Session restore succeded"
>> 			if [ "$1" = "restore" ]
>> 			then
>> 				kill $TAIL_PID
>> 				break
>> 			fi
>> 		fi
>>
>> 		#
>> 		# Reconnection failure
>> 		#
>>
>> 		if stringinstring "Session: Display failure detected at" "$line"
>> 		then
>> 			echo "NX> 596 Error: Session $1 failed. Reason was: $line"
>> 			if [ "$1" = "restore" ]
>> 			then
>> 				kill $TAIL_PID
>> 				break
>> 			fi
>> 		fi
>> 	done
>>
>> 	trap "" EXIT
>>
>> 	[ "$1" = "restore" ] ||	node_stop_services
>> 	# close all open file descriptors
>> 	exec 0<&-
>> 	exec 1>&-
>> 	exec 2>&-
>> 	exit 0
>> }
>>
>> node_start_monitor_1_5_0()
>> {
>> 	RUNNING=0
>> 	TAIL_PID=""
>> 	SUSPEND_STATUS="$2"
>>
>> 	while read line
>> 	do
>> 		#
>> 		# Catch tail pid
>> 		#
>>
>> 		if stringinstring "Info: tail -f running with pid" "$line"
>> 		then
>> 			TAIL_PID=$(echo $line | cut -d"'" -f2)
>> 		fi
>>
>> 		#
>> 		# Detect nxagent syntax errors
>> 		#
>>
>> 		#SYNTAX=""
>>
>> 		#stringinstring "Unrecognized option:" "$line" && SYNTAX="yes"
>> 		#stringinstring "NXAGENT: Fatal IO error on display" "$line" &&
>> SYNTAX="yes" #stringinstring "NXAGENT: Unable to open display" "$line" &&
>> SYNTAX="yes" #if [ -n "$SYNTAX" ]
>> 		#then
>> 		#	kill $TAIL_PID 2>/dev/null
>> 		#	echo "NX> 1004 Error: nxagent failed to start with: $line"
>> 		#	[ "$SESSION_LOG_CLEAN" = "1" ] && rm -rf
>> $USER_FAKE_HOME/.nx/C-$sess_id/ #	[ "$SESSION_LOG_CLEAN" = "1" ] || mv
>> $USER_FAKE_HOME/.nx/C-$sess_id/ $USER_FAKE_HOME/.nx/F-C-$sess_id/ #	break
>> 		#fi
>>
>> 		#
>> 		# Session suspend
>> 		#
>>
>> 		if stringinstring "Info: Session suspended." "$line"
>> 		then
>> 			echo "NX> 1005 Session status: suspended"
>> 			# umount shares & stop printers
>>
>> 			if [ "$SUSPEND_STATUS" = "Running" ]
>> 			then
>> 				node_suspend_session $sess_id
>> 				SUSPEND_STATUS=""
>> 			else
>> 				node_stop_services
>> 			fi
>> 		fi
>>
>> 		#
>> 		# Proxy termination
>> 		#
>>
>> 		if stringinstring "Info: Waiting for a further signal to complete."
>> "$line" then
>> 			# Kill the proxy
>> 			kill -HUP $PROXY_PID 2>/dev/null
>> 		fi
>>
>> 		#
>> 		# Session end
>> 		#
>>
>> 		if stringinstring "Info: End of session requested by " "$line" && [
>> "$RECONNECT" = "0" ] && ! stringinstring "'SIGHUP'" "$line" then
>> 			echo "NX> 1009 Session status: terminating"
>> 			kill -HUP $PROXY_PID 2>/dev/null
>> 		fi
>>
>> 		#
>> 		# Session is running
>> 		#
>>
>> 		if stringinstring "Info: Waiting for connection from" "$line"
>> 		then
>> 			echo "NX> 710 Session status: running"
>> 			echo "NX> 1002 Commit"
>> 			echo "NX> 1006 Session status: running"
>> 		fi
>>
>> 		#
>> 		# Status = Running - Do _not_ fail anymore.
>> 		#
>>
>> 		if stringinstring "Info: Connection with remote proxy established."
>> "$line" then
>> 			RUNNING=1
>> 		fi
>>
>> 		#
>> 		# Catch proxy pid
>> 		#
>>
>> 		if stringinstring "Info: Proxy running in server mode with pid" "$line"
>> 		then
>> 			PROXY_PID=$(echo $line | cut -d"'" -f2)
>> 		fi
>>
>> 		#
>> 		# Reconnection success!
>> 		#
>>
>> 		if stringinstring "Info: Reconnection succeded." "$line"
>> 		then
>> 			echo "NX> 718 Session restore succeded"
>> 			if [ "$1" = "restore" ]
>> 			then
>> 				kill $TAIL_PID
>> 				break
>> 			fi
>> 		fi
>>
>> 		#
>> 		# Reconnection failure
>> 		#
>>
>> 		if stringinstring "Info: Reconnection failed:" "$line"
>> 		then
>> 			echo "NX> 1005 Session status: suspended"
>> 			echo "NX> 596 Error: Session restore failed. Reason was: $line"
>> 			if [ "$1" = "restore" ]
>> 			then
>> 				kill $TAIL_PID
>> 				break
>> 			fi
>> 		fi
>>
>> 		#
>> 		# Error handling.
>> 		#
>>
>> 		#if stringinstring "Error: Connection with remote host" "$line" && [
>> "$RUNNING" = "0" ] #then
>> 		#	kill $TAIL_PID 2>/dev/null
>> 		#	echo "NX> 1004 Error:"
>> 		#	echo "Session '$sess_id' has failed after reaching usable state."
>> 		#	[ "$SESSION_LOG_CLEAN" = "1" ] && rm -rf
>> $USER_FAKE_HOME/.nx/C-$sess_id/ #	[ "$SESSION_LOG_CLEAN" = "1" ] || mv
>> $USER_FAKE_HOME/.nx/C-$sess_id/ $USER_FAKE_HOME/.nx/F-C-$sess_id/ #	break
>> 		#fi
>> 	done
>>
>> 	trap "" EXIT
>>
>> 	[ "$1" = "restore" ] ||	node_stop_services
>> 	# close all open file descriptors
>> 	exec 0<&-
>> 	exec 1>&-
>> 	exec 2>&-
>> 	exit 0
>> }
>>
>> node_start_monitor()
>> {
>> 	[ "$ENABLE_2_0_0_BACKEND" = "1" ] && node_start_monitor_2_0_0 "$@"
>> 	[ "$ENABLE_2_0_0_BACKEND" = "1" ] || node_start_monitor_1_5_0 "$@"
>> }
>>
>> node_startsession()
>> {
>>
>> 	#
>> user=knoppix&userip=192.168.1.66&uniqueid=6A8269CC467264EAEF6349D062689755&
>> display=1000&session=lappi%5ffull&type=unix%2dkde&cache=8M&images=32M&cookie
>> =84765070afee043cf83f85d21130145f&link=lan&render=1&backingstore=when_reques
>> ted&imagecompressionmethod=0&geometry=fullscreen&keyboard=fr&media=0&samba=1
>> &agent_server=&agent_user=&agent_password=
>>
>> 	user=$(getparam user)
>> 	userip=$(getparam userip)
>> 	uniqueid=$(getparam uniqueid)
>> 	display=$(getparam display)
>> 	session=$(getparam session)
>> 	type=$(getparam type | sed 's/%2d/-/g')
>> 	application=$(getparam application)
>> 	cache=$(getparam cache)
>> 	images=$(getparam images)
>> 	cookie=$(getparam cookie)
>> 	link=$(getparam link)
>> 	virtualdesktop=$(getparam virtualdesktop)
>> 	render=$(getparam render)
>> 	backingstore=$(getparam backingstore)
>> 	imagecompressionmethod=$(getparam imagecompressionmethod)
>> 	imagecompressionlevel=$(getparam imagecompressionlevel)
>> 	geometry=$(getparam geometry)
>> 	keyboard=$(getparam keyboard)
>> 	kbtype=$(getparam kbtype)
>> 	media=$(getparam media)
>> 	mediahelper=$(getparam mediahelper)
>> 	sync=$(getparam sync)
>> 	samba=$(getparam samba)
>> 	cups=$(getparam cups)
>> 	agent_server=$(getparam agent_server)
>> 	agent_user=$(getparam agent_user)
>> 	agent_password=$(getparam agent_password)
>> 	agent_domain=$(getparam agent_domain)
>> 	screeninfo=$(getparam screeninfo)
>> 	nodelay=$(getparam nodelay)
>> 	[ "$PROXY_TCP_NODELAY" = "0" ] && nodelay=0
>>
>> 	# 1.5.0 options
>> 	rdpcolors=$(getparam rdpcolors)
>> 	rdpcache=$(getparam rdpcache)
>> 	http=$(getparam http)
>>
>> 	# nxclient > 1.5.0-106 variables
>> 	resize=$(getparam resize)
>> 	keybd=$(getparam keybd)
>> 	kbload=$(getparam kbload)
>> 	keymap=$(getparam keymap)
>>
>> 	rootless=0
>> 	# Its still the clients decision
>> 	[ "$ENABLE_ROOTLESS_MODE" = "1" ] &&  rootless=$(getparam rootless)
>>
>> 	# FreeNX specific variables
>> 	clientproto=$(getparam clientproto)
>> 	status=$(getparam status)
>> 	host=$(getparam host)
>>
>> 	fullscreen=""
>> 	[ "$geometry" = "fullscreen" ] && fullscreen="1"
>>
>> 	[ "$EXPORT_USERIP" = "1" ] && export NXUSERIP="$userip"
>>
>> 	ssl_tunnel=$(getparam encryption)
>> 	[ -z "$ssl_tunnel" ] && ssl_tunnel=0
>>
>> 	if [ "$ssl_tunnel" = "1" ]
>> 	then
>> 		# we need to use the IP of the "calling" server now
>> 		userip=$(echo $SSH_CLIENT $SSH2_CLIENT | cut -d" " -f1 | sed
>> 's/::ffff://g') [ -z "$userip" ] && userip="127.0.0.1"
>> 		[ -z "$userip" -a "$host" != "127.0.0.1" ] && userip="*"
>> 	fi
>>
>> 	# ok, lets make the session dir first:
>>
>> 	sess_id="$SERVER_NAME-$display-$uniqueid"
>> 	[ "$EXPORT_SESSIONID" = "1" ] && export NXSESSIONID="$sess_id"
>>
>> 	##########################################################################
>> ############### # added by  marcel at kraan.net added to the environment for
>> printing non kde applications # this is not working in the add_printer
>> function
>> 	IPP_PORT=$(node_cupsd_get_port)
>> 	export IPP_PORT
>> 	##########################################################################
>> ###############
>>
>> 	OLD_UMASK=$(umask)
>> 	umask 0022
>> 	mkdir -p $USER_FAKE_HOME
>> 	umask 0077
>> 	mkdir -p $USER_FAKE_HOME/.nx/C-$sess_id
>> 	umask $OLD_UMASK
>>
>> 	#
>> cache=8M,images=32M,pack=nopack,link=lan,type=unix-kde,cleanup=0,accept=192
>> .168.1.66,cookie=E38A94A77F975443AF04EC911881B120,id=Knoppix-1000-6A8269CC46
>> 7264EAEF6349D062689755,samba=1,render=1:1000
>>
>> 	PACK=""
>> 	[ -z "$imagecompressionlevel" ] && imagecompressionlevel="9"
>>
>> 	[ "$imagecompressionmethod" = "0" ] && PACK="pack=nopack,"
>> 	[ "$imagecompressionmethod" = "1" ] &&
>> PACK="pack=16m-jpeg-$imagecompressionlevel," [ "$imagecompressionmethod" =
>> "2" ] && PACK="pack=16m-png-9,"
>>
>> 	proxy_cookie=$(echo $[$RANDOM*$RANDOM] | $COMMAND_MD5SUM | cut -d" " -f1)
>>
>> 	if [ "$clientproto" = "1.5.0" ]
>> 	then
>> 		# enable fake cookie authentication
>> 		cookie=$proxy_cookie
>> 	fi
>>
>> 	# write options file
>> 	[ -z "$samba" ] && samba=0
>> 	[ -z "$media" ] && media=0
>> 	[ -z "$nodelay" ] && nodelay=1
>>
>> 	CACHE="cache=$cache,"
>> 	[ -z "$cache" ] && CACHE=""
>> 	IMAGES="images=$images,"
>> 	[ -z "$images" ] && IMAGES=""
>>
>> 	ACCEPT="accept=$userip,"
>> 	[ "$userip" = "*" ] && ACCEPT=""
>>
>> 	OLD_UMASK=$(umask)
>> 	umask 0077
>>
>> cat << EOF > $USER_FAKE_HOME/.nx/C-$sess_id/options
>> ${kbtype:+kbtype=$kbtype,}${kbload:+kbload=$kbload,}${keymap:+keymap=$keyma
>> p,}${resize:+resize=$resize,}${CACHE}${IMAGES}${PACK}link=$link,nodelay=$nod
>> elay,type=$type,cleanup=0,${ACCEPT}cookie=$proxy_cookie,id=$sess_id,samba=$s
>> amba,media=$media${sync:+,sync=$sync}${cups:+,cups=$cups}${keybd:+,keybd=$ke
>> ybd}${http:+,http=$http}${rdpcolors:+,rdpcolors=$rdpcolors}${rdpcache:+,rdpc
>> ache=$rdpcache}${fullscreen:+,fullscreen=1}:$display EOF
>> 	umask $OLD_UMASK
>> #samba=$samba,
>> 	#cache=$cache,images=$images,pack=nopack,link=$link,type=$type,cleanup=0,a
>> ccept=$userip,cookie=$proxy_cookie,id=$sess_id
>> #samba=$samba,media=$media,render=$render:$display
>>
>> 	# write xauth script file
>>
>> $COMMAND_XAUTH >/dev/null 2>&1 <<EOF
>> add localhost:$display MIT-MAGIC-COOKIE-1 $cookie
>> add unix:$display MIT-MAGIC-COOKIE-1 $cookie
>> exit
>> EOF
>>
>> $COMMAND_XAUTH -f "$USER_FAKE_HOME/.nx/C-$sess_id/authority" >/dev/null
>> 2>&1 <<EOF add localhost:$display MIT-MAGIC-COOKIE-1 $cookie
>> add unix:$display MIT-MAGIC-COOKIE-1 $cookie
>> exit
>> EOF
>>
>> 	mkdir -m700 $USER_FAKE_HOME/.nx/C-$sess_id/scripts/ 2>/dev/null || chmod
>> 700 $USER_FAKE_HOME/.nx/C-$sess_id/scripts/
>>
>> cat << EOF >$USER_FAKE_HOME/.nx/C-$sess_id/scripts/authority
>> remove localhost:$display
>> remove unix:$display
>> exit
>> EOF
>>
>> if [ "$1" = "restore" ]
>> then
>> 	echo > $USER_FAKE_HOME/.nx/C-$sess_id/session
>> 	sh -c 'echo "Info: tail -f running with pid '\'\$$\''."; exec tail -n1 -f
>> '$USER_FAKE_HOME'/.nx/C-'$sess_id'/session' | node_start_monitor "$1"
>> "$status" &
>>
>> 	MONITOR_PID=$!
>> 	export MONITOR_PID
>>
>> 	mkdir -p $USER_FAKE_HOME/.nx/C-$sess_id/pids/
>> 	echo "$MONITOR_PID" > $USER_FAKE_HOME/.nx/C-$sess_id/pids/monitor
>>
>> 	node_suspend_session $sess_id || { echo "Info: Reconnection failed: NX
>> Agent process could not be found."
>>
>>  >>$USER_FAKE_HOME'/.nx/C-'$sess_id'/session'; node_fail_restore_session; }
>>
>> else
>> 	node_start_agent &
>> 	node_start_applications &
>> fi
>>
>> if which "$NODE_AUTOSTART" >/dev/null 2>&1
>> then
>> 	sess_id="$SERVER_NAME-$display-$uniqueid"
>> 	# go into background immediately
>> 	NXSESSIONID="$sess_id" DISPLAY=unix:$display "$NODE_AUTOSTART" "$1"
>>> /dev/null 2>&1 & # dont't wait for this child!
>> 	disown $!
>> fi
>>
>> cat << EOF
>> NX> 700 Session id: $sess_id
>> NX> 705 Session display: $display
>> NX> 703 Session type: $type
>> NX> 701 Proxy cookie: $proxy_cookie
>> NX> 702 Proxy IP: $userip
>> NX> 706 Agent cookie: $cookie
>> NX> 704 Session cache: $type
>> NX> 707 SSL tunneling: $ssl_tunnel
>> EOF
>>
>> # collection ...
>>
>> # NX> 1004 Error:
>> #Session 'Knoppix-1000-40EFB9F64FA55C64C41C72CA39EBD720' has failed after
>> reaching usable state. Session directory
>> '/home/knoppix/.nx/F-C-Knoppix-1000-40EFB9F64FA55C64C41C72CA39EBD720' will
>> be not deleted to allow for further investigation.
>>
>> if [ -n "$MONITOR_PID" ]
>> then
>> 	wait "$MONITOR_PID"
>> 	rm -f $USER_FAKE_HOME/.nx/C-$sess_id/pids/monitor
>> fi
>> wait # for all children
>> }
>>
>> cmd_node_terminate()
>> {
>> 	sessionid=$(getparam_sessionid)
>> 	echo "NX> 716 Terminating session $sessionid on user request."
>> 	display=$(cd $USER_FAKE_HOME/.nx/; echo C-$SERVER_NAME-*-$sessionid | rev
>> |cut -d"-" -f2 |rev) node_terminate_session
>> "$SERVER_NAME-$display-$sessionid"
>> }
>>
>>
>> cmd_node_suspend()
>> {
>> 	sessionid=$(getparam_sessionid)
>> 	echo "NX> 716 Suspending session $sessionid on user request."
>> 	display=$(cd $USER_FAKE_HOME/.nx/; echo C-$SERVER_NAME-*-$sessionid | rev
>> | cut -d"-" -f2 |rev) node_suspend_session
>> "$SERVER_NAME-$display-$sessionid"
>> }
>>
>> cmd_node_smbmount()
>> {
>> 	sessionid=$(getparam_sessionid)
>> 	port=$(getparam port)
>> 	username=$(getparam username)
>> 	password=$(getparam password)
>> 	share=$(getparam share)
>> 	computername=$(getparam computername)
>> 	dir=$(getparam dir | sed 's|$(SHARES)|MyShares|g')
>> 	rdir=$(getparam dir | sed 's|$(SHARES)/||g')
>> 	display=$(cd $USER_FAKE_HOME/.nx/; echo C-$SERVER_NAME-*-$sessionid |
>> rev|cut -d"-" -f2| rev) mkdir -p "$HOME/$dir"
>>
>> 	##################### begin ##############
>> 	sleep 7
>> 	ERROR=$(PASSWD="$password" "$COMMAND_SMBMOUNT" "//$computername/$rdir"
>> "$HOME/$dir" -o user="$username,ip=127.0.0.1,port=$port" 2>&1)
>> #TEST="$COMMAND_SMBMOUNT //$computername/$rdir $HOME/$dir -o
>> user=$username,pass=$password,ip=127.0.0.1,port=$port" 2>&1
>> #$PATH_BIN/nxclient -dialog ok -caption "NXServer Message" -message "This
>> command to mount: $TEST" -noautokill -display :$display & #exec $TEST;
>> 	##################### end #################
>>
>>
>> 	if [ $? -eq 0 ]
>> 	then
>> 		$PATH_BIN/nxclient -dialog ok -caption "NXServer Message" -message "Info:
>> Share: '//$computername/$rdir' mounted on: '$HOME/$dir'" -noautokill
>> -display :$display &
>> 		echo "$HOME/$dir" >>
>> "$USER_FAKE_HOME/.nx/C-$SERVER_NAME-$display-$sessionid/scripts/mpoint"
>> else
>> 		$PATH_BIN/nxclient -dialog ok -caption "NXServer Message" -message "Info:
>> Share: '//$computername/$rdir' failed to mount: $ERROR" -noautokill
>> -display :$display &
>> 	fi
>> }
>>
>> cmd_node_addprinter()
>> {
>> 	sessionid=$(getparam_sessionid)
>> 	type=$(getparam type)
>> 	port=$(getparam port)
>> 	username=$(getparam username)
>> 	password=$(getparam password)
>> 	share=$(getparam share)
>> 	printer=$(getparam printer)
>> 	computername=$(getparam computername)
>> 	public=$(getparam public)
>> 	model=$(getparam model)
>> 	defaultPrinter=$(getparam defaultPrinter)
>> 	display=$(cd $USER_FAKE_HOME/.nx/; echo C-$SERVER_NAME-*-$sessionid | rev
>> | cut -d"-" -f2 | rev) sess_id="$SERVER_NAME-$display-$sessionid"
>> 	# this will also setup the userspace cupsd
>> 	IPP_PORT=$(node_cupsd_get_port)
>> 	export IPP_PORT
>>
>> 	#################################################################
>> 	# by marcel at kraan.net
>>          # get the server hostname cups printing could not via localhost
>>
>> 	if [ -f /etc/sysconfig/network ] ; then
>> 	        . /etc/sysconfig/network
>> 		if [ "$NETWORKING" = "yes" ] ; then
>> 			printhost="$HOSTNAME"
>> 		else
>> 			printhost="localhost"
>> 		fi
>> 	fi
>>
>> 	if [ "$type" = "smb" ]
>> 	then
>> 		DEVICE_URI="smb://$username:$password@$printhost:$port/$share"
>> 		NAME="$share"
>> 	else
>> 		#DEVICE_URI="ipp://localhost:$port/printers/$printer"
>> 		DEVICE_URI="ipp://$username:$password@$printhost:$port/printers/$printer"
>> 		NAME="$printer"
>> 	fi
>> 	#MODEL=$($PATH_BIN/nxclient -printer "$NAME" -noautokill -display
>> :$display) MODEL=$($PATH_BIN/nxclient -printer "$NAME" -display :$display)
>> 	[ -z "$MODEL" -o "$MODEL" = "cancel: aborted" ] && return
>>
>> 	PUBLIC="-u allow:$USER"
>> 	[ "$public" == "1" ] && PUBLIC=""
>> 	/usr/sbin/lpadmin -p "$NAME" -E -v "$DEVICE_URI" -m "$MODEL" $PUBLIC
>> 	[ "$defaultPrinter" = "1" ] && /usr/sbin/lpadmin -d "$NAME"
>>
>>          #################################################################
>> }
>>
>>
>> case "$1" in
>> 	--startsession)
>> 		node_startsession
>> 	;;
>> 	--resumesession)
>> 		node_startsession "restore"
>> 	;;
>> 	--terminate)
>> 		cmd_node_terminate
>> 	;;
>> 	--suspend)
>> 		cmd_node_suspend
>> 	;;
>> 	--smbmount)
>> 		cmd_node_smbmount &>/dev/null </dev/null &
>> 	;;
>> 	--addprinter)
>> 		cmd_node_addprinter &>/dev/null </dev/null &
>> 	;;
>> 	--check)
>> 		echo "NX> 716 finished"
>> 	;;
>> 	--agent)
>> 		echo "NX> 716 Starting NX Agent ..."
>> 		shift
>> 		[ "$SET_LD_LIBRARY_PATH" = "1" ] && export
>> LD_LIBRARY_PATH="$AGENT_LIBRARY_PATH:$LD_LIBRARY_PATH"
>> PATH="$PATH:$PATH_BIN" $PATH_BIN/nxagent -name "NX Agent Test - Args: $@"
>> $@ echo "NX> 716 NX Agent exited with status: $?"
>> 	;;
>> 	--setkey)
>> 		mkdir -m 700 -p $HOME/.ssh
>> 		if ! grep -q "$(cat $NX_ETC_DIR/users.id_dsa.pub)"
>> $HOME/.ssh/$SSH_AUTHORIZED_KEYS 2>/dev/null then
>> 			cat $NX_ETC_DIR/users.id_dsa.pub >> $HOME/.ssh/$SSH_AUTHORIZED_KEYS
>> 			chmod 600 $HOME/.ssh/$SSH_AUTHORIZED_KEYS
>> 			echo "NX> 716 Public key added to: $HOME/.ssh/$SSH_AUTHORIZED_KEYS"
>> 		else
>> 			echo "NX> 716 Public key is already present in:
>> $HOME/.ssh/$SSH_AUTHORIZED_KEYS" fi
>> 	;;
>> 	*)
>> 		echo "NX> 500 Error: Command not found"
>> 	;;
>> esac
>> echo "NX> 1001 Bye."
> 
> ________________________________________________________________
>      Were you helped on this list with your FreeNX problem?
>     Then please write up the solution in the FreeNX Wiki/FAQ:
>   http://openfacts.berlios.de/index-en.phtml?title=FreeNX_FAQ
>          Don't forget to check the NX Knowledge Base:
>                  http://www.nomachine.com/kb/ 
> 
> ________________________________________________________________
>        FreeNX-kNX mailing list --- FreeNX-kNX at kde.org
>       https://mail.kde.org/mailman/listinfo/freenx-knx
> ________________________________________________________________



More information about the FreeNX-kNX mailing list