#!/usr/dt/bin/dtksh # # accept dialog script for x11vnc # 2004-07-13 stefan.radman@ctbto.org # should work in any CDE environment (Sun,HP,IBM,...) # # when called without parameters shows a CDE question dialog: # Do you want to accept a VNC connection # from IP address $RFB_CLIENT_IP to your desktop? # Note: # After 30 seconds the screen will # be locked and the connection will be # accepted automatically." # [Yes} {__No__] [View/Only] # and counts down a timer in the dialog title bar # when the timer is down to 0, it locks the display and returns 0 # (if the screenlock was successful or if the login prompt was active) # # buttons=retcode: # Yes = 0 # No = 1 (same as closing the dialog windows) # View/Only = 3 # # usage: x11vnc -forever -shared -accept "yes:0,no:*,view:3 dtVncPopup" -gone "dtVncPopup lock" # # security considerations: when you return to your console and unlock the display # you can never know if enyone else is connected to your display # # timeout until accept timeout=30 # dialog message test -z "${RFB_CLIENT_IP}" && unknown="an unknown " || ip="$RFB_CLIENT_IP " message="\ Do you want to accept a VNC connection from ${unknown}IP address ${ip}to your desktop? Note: After $timeout seconds the screen will be locked and the connection will be accepted automatically." # action functions accept () { exit 0 } reject () { exit 1 } view () { exit 3 } lock () { # lock only if dtsession active xrdb -query | grep -c '^dtsession*' || accept # accept only if lock succeeds /usr/dt/bin/dtaction LockDisplay && accept || reject } # main # actions can be called directly test $# -gt 0 && $@ # initialize the display XtInitialize TOPLEVEL vncPopup VncPopup "$0" "$@" # create a message dialog containing the contents of the specified file XmCreateQuestionDialog DIALOG $TOPLEVEL dialog \ dialogTitle:"$DTKSH_APPNAME" \ messageString:"$message" \ unmapCallback:reject \ # symbolPixmap:/usr/dt/appconfig/icons/C/DtFlag.m.pm # change the OK button to "Yes" XmMessageBoxGetChild OK_BUTTON $DIALOG DIALOG_OK_BUTTON XtSetValues $OK_BUTTON \ labelString:"Yes" \ activateCallback:accept # change the Cancel Button to "No" XmMessageBoxGetChild CANCEL_BUTTON $DIALOG DIALOG_CANCEL_BUTTON XtSetValues $CANCEL_BUTTON \ labelString:"No" \ activateCallback:reject # change Help button to View-Only, set focus and make it the default XmMessageBoxGetChild HELP_BUTTON $DIALOG DIALOG_HELP_BUTTON XtSetValues $HELP_BUTTON \ labelString:"View\nOnly" \ activateCallback:view # make "No" the default (for unmap as well) XtSetValues $DIALOG \ defaultButton:$CANCEL_BUTTON initialFocus:$CANCEL_BUTTON \ # create the ticker ticker () { test $timeout -eq 0 && lock XtSetValues $DIALOG dialogTitle:"accepting in $timeout seconds" XtAddTimeOut TICKER 1000 ticker timeout=`expr $timeout - 1` } # display dialog and activate ticker XtAddTimeOut TICKER 1000 ticker XtManageChild $DIALOG XtMainLoop