| #ifndef _TKX11VNC_H |
| #define _TKX11VNC_H |
| #ifdef NOGUI |
| char gui_code[] = ""; |
| #else |
| /* |
| * tkx11vnc.h: generated by 'tkx11vnc -spit' |
| * Abandon all hope, ye who enter here... |
| * ...edit tkx11vnc instead. |
| */ |
| char gui_code[] = |
| "#!/bin/sh\n" |
| "# the next line restarts using wish. \\\n" |
| "exec wish \"$0\" \"$@\"\n" |
| "catch {rename send {}}\n" |
| "#\n" |
| "# Copyright (C) 2004-2009 Karl J. Runge <runge@karlrunge.com>\n" |
| "# All rights reserved.\n" |
| "#\n" |
| "# This is free software; you can redistribute it and/or modify\n" |
| "# it under the terms of the GNU General Public License as published by\n" |
| "# the Free Software Foundation; either version 2 of the License, or\n" |
| "# (at your option) any later version.\n" |
| "#\n" |
| "# This software is distributed in the hope that it will be useful,\n" |
| "# but WITHOUT ANY WARRANTY; without even the implied warranty of\n" |
| "# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" |
| "# GNU General Public License for more details.\n" |
| "#\n" |
| "# You should have received a copy of the GNU General Public License\n" |
| "# along with this software; if not, write to the Free Software\n" |
| "# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n" |
| "# USA.\n" |
| "\n" |
| "#\n" |
| "# tkx11vnc v0.2\n" |
| "# This is a simple frontend to x11vnc. It uses the remote control\n" |
| "# and query features (-remote/-query aka -R/-Q) to interact with it. \n" |
| "# It is just a quick-n-dirty hack (it parses -help output, etc), but\n" |
| "# it could be of use playing with or learning about the (way too) many\n" |
| "# parameters x11vnc has.\n" |
| "# \n" |
| "# It can be used to interact with a running x11vnc (see the x11vnc\n" |
| "# -gui option), or to set the parameters and then start up x11vnc. \n" |
| "# \n" |
| "\n" |
| "#\n" |
| "# Below is a simple picture of how the gui should be laid out and how\n" |
| "# the menus should be organized. Most menu items correspond to remote\n" |
| "# control commands. A trailing \":\" after the item name means it is a string\n" |
| "# to be set rather than a boolean that can be toggled (e.g. the entry\n" |
| "# box must be used).\n" |
| "#\n" |
| "# Some tweak options may be set in the prefix \"=\" string.\n" |
| "# A means it is an \"Action\" (not a true variable)\n" |
| "# R means it is an action only valid in remote mode.\n" |
| "# S means it is an action only valid in startup mode.\n" |
| "# Q means it is an action worth querying after running.\n" |
| "# P means the string can be +/- appended/deleted (string may not\n" |
| "# be the same after the remote command)\n" |
| "# G means gui internal item\n" |
| "# F means can be set via file browse\n" |
| "# D means for simple gui\n" |
| "# -C:val1,... means it will be a checkbox (radio button)\n" |
| "# the \"-\" means no other options follow\n" |
| "# 0 means to skip the item.\n" |
| "# -- means add a separator\n" |
| "#\n" |
| "# The =GAL ... =GAL LOFF stuff is to provide submenus.\n" |
| "#\n" |
| "\n" |
| "global env started time_count\n" |
| "set started \"\"\n" |
| "proc dtime {{msg \"\"}} {\n" |
| " global started time_count\n" |
| " if {$started == \"\"} {\n" |
| " return\n" |
| " }\n" |
| " set diff [expr \"[exec gtod.bin] - $started\"]\n" |
| " set diff [format \"%.2f\" $diff]\n" |
| " incr time_count\n" |
| " if {$msg == \"\"} {\n" |
| " set msg $time_count\n" |
| " }\n" |
| " puts -nonewline stderr \"$msg $diff \" \n" |
| " puts stderr [clock format [clock seconds]]\n" |
| "}\n" |
| "\n" |
| "if [info exists env(X11VNC_GUI_TIME)] {\n" |
| " global started time_count\n" |
| " set started [exec gtod.bin]\n" |
| " set time_count 0\n" |
| " dtime \"S\"\n" |
| "}\n" |
| "\n" |
| "proc set_template {} {\n" |
| " global template\n" |
| " set template \"\n" |
| "Row: Actions Clients Permissions Keyboard Pointer Help\n" |
| "Row: Displays Screen Tuning Debugging Misc\n" |
| "\n" |
| "Actions\n" |
| " =SA start\n" |
| " =RA stop\n" |
| " --\n" |
| " =DSA attach\n" |
| " =DRA detach\n" |
| " --\n" |
| " =RA ping\n" |
| " =RA update-all\n" |
| " =GAL Settings::\n" |
| " =GA save-settings\n" |
| " =SFA load-settings:\n" |
| " =SA defaults-all\n" |
| " =0SA clear-all\n" |
| " --\n" |
| " =F rc:\n" |
| " norc\n" |
| " =GAL LOFF\n" |
| " -- D\n" |
| " =DRA stop+quit \n" |
| " =DGA Quit \n" |
| "\n" |
| "Help\n" |
| " =DGA gui\n" |
| " =DGA all\n" |
| "\n" |
| "Clients\n" |
| " =DRQA current:\n" |
| " =DF connect:\n" |
| " =DRQA disconnect:\n" |
| " --\n" |
| " accept:\n" |
| " afteraccept:\n" |
| " gone:\n" |
| " vncconnect\n" |
| " zeroconf\n" |
| " -- D\n" |
| " tightfilexfer\n" |
| " ultrafilexfer\n" |
| " proxy:\n" |
| " =GAL Chat::\n" |
| " chatwindow\n" |
| " =DRA chaton\n" |
| " =DRA chatoff\n" |
| " =GAL LOFF\n" |
| " =GAL Java-applet::\n" |
| " =D http\n" |
| " httpdir:\n" |
| " httpport:\n" |
| " https:\n" |
| " httpsredir:\n" |
| " enablehttpproxy\n" |
| " =GAL LOFF\n" |
| "\n" |
| "Displays\n" |
| " =D display:\n" |
| " =F auth:\n" |
| " =S reflect:\n" |
| " =D desktop:\n" |
| " =D rfbport:\n" |
| " =S autoport:\n" |
| " =0 gui:\n" |
| "\n" |
| "Screen\n" |
| " =DRA refresh\n" |
| " =RA reset\n" |
| " =RA blacken\n" |
| " -- D\n" |
| " =D scale:\n" |
| " scale_cursor:\n" |
| " --\n" |
| " =D solid\n" |
| " solid_color:\n" |
| " --\n" |
| " =GAL OverlayVisuals::\n" |
| " overlay\n" |
| " overlay_nocursor\n" |
| " 8to24\n" |
| " 8to24_opts:\n" |
| " =GAL LOFF\n" |
| " =GAL 8-Bit-Color::\n" |
| " flashcmap\n" |
| " shiftcmap:\n" |
| " notruecolor\n" |
| " =GAL LOFF\n" |
| " =GAL SubWindow::\n" |
| " id:\n" |
| " sid:\n" |
| " =RA id_cmd:\n" |
| " =GAL LOFF\n" |
| " =GAL ResizeRotate::\n" |
| " = xrandr\n" |
| " =-C:resize,newfbsize,exit xrandr_mode:\n" |
| " rotate:\n" |
| " padgeom:\n" |
| " =GAL LOFF\n" |
| " =GAL Clipping::\n" |
| " =P blackout:\n" |
| " xinerama\n" |
| " clip:\n" |
| " =GAL LOFF\n" |
| " =GAL Misc-Screen::\n" |
| " fixscreen:\n" |
| " visual:\n" |
| " rawfb:\n" |
| " pipeinput:\n" |
| " uinput_accel:\n" |
| " uinput_reset:\n" |
| " uinput_always:\n" |
| " 24to32\n" |
| " =GAL LOFF\n" |
| "\n" |
| "Keyboard\n" |
| " =D norepeat\n" |
| " =D add_keysyms\n" |
| " modtweak\n" |
| " xkb\n" |
| " --\n" |
| " capslock\n" |
| " skip_lockkeys\n" |
| " --\n" |
| " skip_keycodes:\n" |
| " skip_dups\n" |
| " sloppy_keys\n" |
| " --\n" |
| " =FP remap:\n" |
| " clear_mods\n" |
| " clear_keys\n" |
| " clear_all\n" |
| " =RA clear_locks\n" |
| "\n" |
| "Pointer\n" |
| " =D-C:none,arrow,X,some,most cursor:\n" |
| " =-C:1,2,3,4,5,6 arrow:\n" |
| " --\n" |
| " cursorpos\n" |
| " =D nocursorshape\n" |
| " --\n" |
| " noxfixes\n" |
| " cursor_drag\n" |
| " =GAL AlphaBlending::\n" |
| " noalphablend\n" |
| " alphacut:\n" |
| " alphafrac:\n" |
| " alpharemove\n" |
| " =GAL LOFF\n" |
| " --\n" |
| " buttonmap:\n" |
| " --\n" |
| " xwarppointer\n" |
| " always_inject\n" |
| "\n" |
| "Misc\n" |
| " =GD-C:full,icon,tray WindowView:\n" |
| " =GD simple-gui\n" |
| " -- D\n" |
| " =GA all-settings\n" |
| " =RA remote-cmd:\n" |
| " =GAL Selection::\n" |
| " =D nosel\n" |
| " noprimary\n" |
| " nosetprimary\n" |
| " noclipboard\n" |
| " nosetclipboard\n" |
| " seldir:\n" |
| " =GAL LOFF\n" |
| " =GAL X-ext::\n" |
| " xtrap\n" |
| " noxrecord\n" |
| " =RQA reset_record\n" |
| " =GAL LOFF\n" |
| " =GAL MacOSX::\n" |
| " macnosaver\n" |
| " macnowait\n" |
| " macwheel:\n" |
| " macnoswap\n" |
| " macnoresize\n" |
| " maciconanim:\n" |
| " macmenu\n" |
| " =GAL LOFF\n" |
| " --\n" |
| " 6\n" |
| " noipv6\n" |
| " noipv4\n" |
| " --\n" |
| " nofb\n" |
| " =D nobell\n" |
| " nolookup\n" |
| " rfbversion:\n" |
| " bg\n" |
| " =S loop\n" |
| " =S loopbg\n" |
| " =S sleepin:\n" |
| " =-C:ignore,exit sigpipe:\n" |
| " =0 inetd\n" |
| "\n" |
| "Debugging\n" |
| " debug_pointer\n" |
| " debug_keyboard\n" |
| " =F logfile:\n" |
| " =GA show-logfile\n" |
| " =GA tail-logfile\n" |
| " quiet\n" |
| " --\n" |
| " =GA show-start-cmd\n" |
| " =DG debug_gui\n" |
| " =GAL Misc-Debug::\n" |
| " debug_xevents\n" |
| " debug_xdamage\n" |
| " =-C:0,1,2,3 debug_wireframe:\n" |
| " debug_scroll\n" |
| " debug_tiles\n" |
| " debug_grabs\n" |
| " debug_sel\n" |
| " debug_ncache\n" |
| " dbg\n" |
| " =GAL LOFF\n" |
| "\n" |
| "Permissions\n" |
| " =DRQA lock\n" |
| " =DRQA unlock\n" |
| " =D shared\n" |
| " =D forever\n" |
| " --\n" |
| " =DFP allow:\n" |
| " =D localhost\n" |
| " =RA allowonce:\n" |
| " listen:\n" |
| " -- D\n" |
| " =D viewonly\n" |
| " input:\n" |
| " --\n" |
| " =GAL Passwords::\n" |
| " passwd:\n" |
| " viewpasswd:\n" |
| " =F passwdfile:\n" |
| " =F rfbauth:\n" |
| " usepw\n" |
| " --\n" |
| " unixpw\n" |
| " unixpw_list:\n" |
| " unixpw_nis\n" |
| " unixpw_nis_list:\n" |
| " =0 storepasswd\n" |
| " =GAL LOFF\n" |
| " =GAL SSL::\n" |
| " ssl\n" |
| " =F ssl_pem:\n" |
| " stunnel\n" |
| " =F stunnel_pem:\n" |
| " =F ssldir:\n" |
| " =F sslverify:\n" |
| " ssltimeout:\n" |
| " --\n" |
| " enc:\n" |
| " =GAL LOFF\n" |
| " =GAL Misc-Perms::\n" |
| " safer\n" |
| " unsafe\n" |
| " =RA noremote\n" |
| " =0S alwaysshared\n" |
| " =0S nevershared\n" |
| " =0S dontdisconnect\n" |
| " =SQA deny_all\n" |
| " timeout:\n" |
| " grabkbd\n" |
| " grabptr\n" |
| " grabalways\n" |
| " grablocal:\n" |
| " forcedpms\n" |
| " clientdpms\n" |
| " noserverdpms\n" |
| " noultraext\n" |
| " =GAL LOFF\n" |
| "\n" |
| "Tuning\n" |
| " =D-C:0,1,2,3,4 pointer_mode:\n" |
| " input_skip:\n" |
| " allinput\n" |
| " =D nodragging\n" |
| " -- D\n" |
| " speeds:\n" |
| " =D wait:\n" |
| " defer:\n" |
| " =D nap\n" |
| " screen_blank:\n" |
| " --\n" |
| " =GAL WireFrame::\n" |
| " wireframe\n" |
| " wireframe_mode:\n" |
| " =-C:never,top,always wirecopyrect:\n" |
| " =GAL LOFF\n" |
| " =GAL ScrollCopyRect::\n" |
| " =-C:never,keys,mouse,always scrollcopyrect:\n" |
| " scr_area:\n" |
| " scr_skip:\n" |
| " scr_inc:\n" |
| " scr_keys:\n" |
| " scr_term:\n" |
| " scr_keyrepeat:\n" |
| " scr_parms:\n" |
| " =GAL LOFF\n" |
| " =GAL XDAMAGE::\n" |
| " xdamage\n" |
| " xd_area:\n" |
| " xd_mem:\n" |
| " =GAL LOFF\n" |
| " =GAL Ncache::\n" |
| " ncache\n" |
| " ncache_size:\n" |
| " ncache_cr\n" |
| " ncache_no_moveraise\n" |
| " ncache_no_dtchange\n" |
| " ncache_old_wm\n" |
| " ncache_no_rootpixmap\n" |
| " ncache_keep_anims\n" |
| " ncache_pad:\n" |
| " =RA ncache_reset_rootpixmap\n" |
| " =GAL LOFF\n" |
| " --\n" |
| " =GAL SharedMemory::\n" |
| " noshm\n" |
| " flipbyteorder\n" |
| " onetile\n" |
| " =GAL LOFF\n" |
| " =GAL Misc-Tuning::\n" |
| " progressive:\n" |
| " fs:\n" |
| " gaps:\n" |
| " grow:\n" |
| " fuzz:\n" |
| " extra_fbur:\n" |
| " wait_ui:\n" |
| " setdefer:\n" |
| " nowait_bog\n" |
| " slow_fb:\n" |
| " xrefresh:\n" |
| " readtimeout:\n" |
| " snapfb\n" |
| " threads\n" |
| " wmdt:\n" |
| " rfbwait:\n" |
| " nodpms\n" |
| " nofbpm\n" |
| " =GAL LOFF\n" |
| "\"\n" |
| "}\n" |
| "\n" |
| "proc set_internal_help {} {\n" |
| " global helptext helpall\n" |
| "\n" |
| " # set some internal item help here:\n" |
| " set helptext(start) \"\n" |
| "Launch x11vnc with the settings you have prescribed in the gui.\n" |
| "The x11vnc process is started in an xterm window so you can see the\n" |
| "output, kill it, etc.\n" |
| "\n" |
| "By viewing this help item, the command built so far will be displayed\n" |
| "in the gui text area. Have a look. If you Press start it will be shown\n" |
| "as well and you will be asked to confirm running it.\n" |
| "\n" |
| "If you want to use a saved profile \\\"rc file\\\" you can do \\\"Misc -> rc\\\" and\n" |
| "select the file and simply start x11vnc using the rc file. Alternatively,\n" |
| "you could first use the \\\"Actions -> load-settings\\\" action to load in\n" |
| "an \\\"rc file\\\" and then press \\\"Actions -> start\\\" to start up x11vnc\n" |
| "based on those values.\n" |
| "\"\n" |
| " set helptext(stop) \"\n" |
| "The \\\"Actions -> stop\\\" action sends a signal to the running x11vnc\n" |
| "server indicating it should shutdown all connections and exit.\n" |
| "\n" |
| "The GUI stays running in case you want to start a new x11vnc or attach\n" |
| "to another one. Use \\\"Actions -> Quit\\\" if you then want to have the\n" |
| "gui exit. Use \\\"Actions -> stop+quit\\\" to have both exit at once.\n" |
| "\"\n" |
| "\n" |
| " set helptext(show-start-cmd) \"\n" |
| "Displays in the text area what the x11vnc start command (i.e. the command\n" |
| "run by \\\"Actions -> start\\\") looks like for the current values of the\n" |
| "settings. This can be done even in the attached state. Intended for\n" |
| "debugging the gui. The help item for \\\"Actions -> start\\\" gives the\n" |
| "same info.\n" |
| "\n" |
| "If you want to load in a saved profile \\\"rc file\\\" use \\\"Misc -> rc\\\"\n" |
| "and select the file. \\\"Actions -> load-settings\\\" does a similar thing\n" |
| "with an rc-file, but reading the file and setting the gui variables to\n" |
| "its values.\n" |
| "\"\n" |
| "\n" |
| " set helptext(debug_gui) \"\n" |
| "Set debug_gui to get more output printed in the text area.\n" |
| "\"\n" |
| "\n" |
| " set helptext(detach) \"\n" |
| "No longer be associated with the x11vnc server. Switch to the\n" |
| "non-connected state. The x11vnc server keeps running: it does not exit.\n" |
| "\n" |
| "You can either later reattach to it \\\"Actions -> attach\\\", or start\n" |
| "up a new x11vnc \\\"Actions -> start\\\", or exit \\\"Actions -> Quit\\\".\n" |
| "\"\n" |
| "\n" |
| " set helptext(attach) \"\n" |
| "Attach to a running x11vnc server, if possible. Switches to connected\n" |
| "state if successful. Usually the channel used to attach is via the X\n" |
| "display (VNC_CONNECT rootwin property) being polled by the x11vnc server.\n" |
| "To change or set the X display to use do \\\"Displays -> display\\\".\n" |
| "\n" |
| "Sometimes the \\\"-connect /path/to/filename\\\" is used as the communcation\n" |
| "channel. The running x11vnc has to know that \\\"/path/to/filename\\\"\n" |
| "is the communication channel (i.e. it is using the same -connect option).\n" |
| "\"\n" |
| "\n" |
| " set helptext(ping) \"\n" |
| "Check if x11vnc still responds to \\\"ping\\\" remote command.\n" |
| "\"\n" |
| "\n" |
| " set helptext(update-all) \"\n" |
| "Query the x11vnc server for the current values of all variables.\n" |
| "Populate the values into the gui's database.\n" |
| "\n" |
| "Normally the gui will refresh this info every time it interacts with\n" |
| "the x11vnc server (including after a few minutes of inactivity), so one\n" |
| "doesn't need to use this action very often (unless something else is\n" |
| "changing the state of the x11vnc server, or new clients have connected,\n" |
| "etc).\n" |
| "\"\n" |
| "\n" |
| " set helptext(clear-all) \"\n" |
| "Forget any variable settings either entered in by you or set at the\n" |
| "default. Basically sets everything to 0 or the string (unset).\n" |
| "\n" |
| "This action is only available in \\\"startup\\\" mode, not when connected\n" |
| "to a running x11vnc server (in that case the variable settings reflect\n" |
| "the state of the running x11vnc). To detach from a running x11vnc\n" |
| "server use \\\"Actions -> detach\\\"; to completely stop the x11vnc server\n" |
| "use \\\"Actions -> stop\\\".\n" |
| "\"\n" |
| "\n" |
| " set helptext(defaults-all) \"\n" |
| "Reset all variable settings to the default values. Basically sets\n" |
| "everything to the default queries \\\"x11vnc -QD var\\\" retrieved at startup.\n" |
| "\n" |
| "This action is only available in \\\"startup\\\" mode, not when connected\n" |
| "to a running x11vnc server (in that case the variable settings reflect\n" |
| "the state of the running x11vnc). To detach from a running x11vnc\n" |
| "server use \\\"Actions -> detach\\\"; to completely stop the x11vnc server\n" |
| "use \\\"Actions -> stop\\\".\n" |
| "\"\n" |
| "\n" |
| " set helptext(load-settings) \"\n" |
| "Read in the \\\"rc file\\\" you prescribe in the dialog and then set the\n" |
| "variables to those in the rc-file. Any variables not mentioned in the\n" |
| "rc-file are set to their default value.\n" |
| "\n" |
| "You could then do \\\"Actions -> start\\\" to start x11vnc with these\n" |
| "parameters. Or you could make some further changes to variables\n" |
| "using the gui before starting x11vnc.\n" |
| "\n" |
| "This action is only available in \\\"startup\\\" mode, not when connected\n" |
| "to a running x11vnc server (in that case the variable settings reflect\n" |
| "the state of the running x11vnc). To detach from a running x11vnc\n" |
| "server use \\\"Actions -> detach\\\"; to completely stop the x11vnc server\n" |
| "use \\\"Actions -> stop\\\".\n" |
| "\"\n" |
| "\n" |
| " set helptext(save-settings) \"\n" |
| "Construct a ~/.x11vncrc file based on the current settings and\n" |
| "offer to save it in a file (default ~/.x11vncrc). If saved in a\n" |
| "file other than the default, you can access the profile by using\n" |
| "the \\\"-rc <filename>\\\" option when starting x11vnc.\n" |
| "\n" |
| "If an rc file entry begins with \\\"#d\\\" that means the current\n" |
| "setting is at the Default value and so you probably want to leave\n" |
| "it commented out with the \\\"#\\\" character.\n" |
| "\n" |
| "If an rc file entry begins with \\\"#?\\\" that means we think\n" |
| "you probably do not really want to force the value to this setting.\n" |
| "\n" |
| "In either case, feel free to uncomment the line and/or change any\n" |
| "of the parameter values in the file. \n" |
| "\"\n" |
| "\n" |
| " set helptext(all-settings) \"\n" |
| "Displays the gui's database of all of the x11vnc server's current\n" |
| "settings. Use \\\"Actions -> update-all\\\" or \\\"Control+R\\\" to\n" |
| "refresh this list if it ever gets out of sync.\n" |
| "\"\n" |
| "\n" |
| " set helptext(remote-cmd) \"\n" |
| "Run a remote command (-R) or query (-Q) directly. Only a few\n" |
| "remote commands are not on a menu, but for those few you can\n" |
| "run the command directly this way. Just enter the command into\n" |
| "the Entry box when prompted. Use the prefix \\\"Q:\\\" to indicate\n" |
| "a -Q query. Examples: \\\"zero:20,20,100,100\\\", \\\"Q:ext_xfixes\\\" \n" |
| "\"\n" |
| "\n" |
| " set helptext(stop+quit) \"\n" |
| "Send the stop command to the x11vnc server, then terminate the tkx11vnc gui.\n" |
| "\"\n" |
| "\n" |
| " set helptext(show-logfile) \"\n" |
| "View the current contents of the logfile (if it exists and is accessible\n" |
| "by the gui process).\n" |
| "\"\n" |
| "\n" |
| " set helptext(tail-logfile) \"\n" |
| "Run the tail(1) command with -f option on the logfile in an xterm.\n" |
| "(if it exists and is accessible by the gui process).\n" |
| "\"\n" |
| "\n" |
| " set helptext(Quit) \"\n" |
| "Terminate the tkx11vnc gui. Any x11vnc server will be left running.\n" |
| "\"\n" |
| "\n" |
| " set helptext(current) \"\n" |
| "Shows a menu of currently connected VNC clients on the x11vnc server.\n" |
| "\n" |
| "Allows you to find more information about them, change their input\n" |
| "permissions, or disconnect them.\n" |
| "\n" |
| "Note that the File transfer permission only applies to UltraVNC\n" |
| "file transfer, not TightVNC file transfer.\n" |
| "\n" |
| "You will be prompted to confirm any disconnections.\n" |
| "\"\n" |
| "\n" |
| " set helptext(client) \"\n" |
| "After selecting a VNC client from the \\\"Clients -> current\\\" menu,\n" |
| "you will be presented with a dialog that shows the information\n" |
| "about the VNC client.\n" |
| "\n" |
| "You can choose to disconnect the client by clicking on the \n" |
| "\\\"Disconnect\\\" checkbox and pressing \\\"OK\\\". There will be a\n" |
| "confirmation dialog to doublecheck.\n" |
| "\n" |
| "Alternatively, you can fine tune the VNC client's input permissions\n" |
| "by selecting any of the Keystrokes, Mouse-Motion, Button-Click,\n" |
| "Clipboard-Input, or Files checkboxes and pressing \\\"OK\\\". This is like\n" |
| "the \\\"-input\\\" option but on a per-client basis.\n" |
| "\n" |
| "To not change any aspects of the VNC client press \\\"Cancel\\\".\n" |
| "\"\n" |
| "\n" |
| " set helptext(solid_color) \"\n" |
| "Set the -solid color value.\n" |
| "\"\n" |
| "\n" |
| " set helptext(xrandr_mode) \"\n" |
| "Set the -xrandr mode value.\n" |
| "\"\n" |
| "\n" |
| " set helptext(unixpw_list) \"\n" |
| "Set the -unixpw usernames list value.\n" |
| "\"\n" |
| "\n" |
| " set helptext(unixpw_nis_list) \"\n" |
| "Set the -unixpw_nis usernames list value.\n" |
| "\"\n" |
| "\n" |
| " set helptext(stunnel_pem) \"\n" |
| "Set the -stunnel pem filename value.\n" |
| "\"\n" |
| "\n" |
| " set helptext(ssl_pem) \"\n" |
| "Set the -ssl pem filename value.\n" |
| "\"\n" |
| "\n" |
| " set helptext(wireframe_mode) \"\n" |
| "Set the -wireframe mode string value.\n" |
| "\"\n" |
| "\n" |
| " set helptext(simple-gui) \"\n" |
| "Toggle between menu items corresponding the most basic ones\n" |
| "and all possible settings. I.e. toggle between a simple gui\n" |
| "and one for power users.\n" |
| "\"\n" |
| "\n" |
| " set helptext(Tray) \"\n" |
| "The tray/icon mode (started with \\\"x11vnc -gui tray ...\\\", etc.) presents\n" |
| "a small icon that indicates the status of the running x11vnc server.\n" |
| "\n" |
| "Depending on your environment, this icon may be embedded in a system\n" |
| "tray or applet dock, or simply be a standalone window. \\\"-gui tray\\\"\n" |
| "will attempt to embed the icon in the system tray, while \\\"-gui icon\\\"\n" |
| "is for a standalone window. Use \\\"-gui tray=setpass\\\" (or icon=setpass)\n" |
| "to be prompted to set the session password at startup.\n" |
| "\n" |
| "When the icon has a light background, that means no VNC viewers are\n" |
| "currently connected to the VNC display.\n" |
| "\n" |
| "When the icon has a dark background (i.e. reverse-video), that means at\n" |
| "least one VNC viewer is connected to the VNC display.\n" |
| "\n" |
| "Moving the mouse pointer over the icon will popup a \\\"status balloon\\\"\n" |
| "indicating the VNC display name and the names and info of any connected VNC\n" |
| "viewers. Press the middle mouse button if the balloon does not appear.\n" |
| "\n" |
| "Clicking the left or right mouse button on the icon displays a menu\n" |
| "of actions:\n" |
| "\n" |
| " Properties - Brings up the Properties dialog to set some basic\n" |
| " parameters. The full tkx11vnc GUI may be accessed\n" |
| " via the \\\"Advanced ...\\\" button. Press \\\"Help\\\"\n" |
| " in the Properties dialog for more info.\n" |
| " \n" |
| " Help - Displays this help text.\n" |
| " \n" |
| " New Client - Presents an entry box where you type in the name\n" |
| " of a computer that is running a VNC viewer in\n" |
| " \\\"listen\\\" mode (e.g. vncviewer -listen). For a\n" |
| " non-standard listening port use \\\"host:port\\\".\n" |
| "\n" |
| " Pressing \\\"OK\\\" will initiate the reverse\n" |
| " connection. Use a blank hostname to skip it.\n" |
| " \n" |
| " Disconnect - Shows a popup menu of connected clients. Click on\n" |
| " one to disconnect it, or click on \\\"All Clients\\\"\n" |
| " disconnect all clients.\n" |
| "\n" |
| " Window View - Switch between the \\\"full\\\" gui (also known as\n" |
| " \\\"Advanced\\\"), \\\"icon\\\" mode (small icon window with\n" |
| " popups), or \\\"tray\\\" mode (small icon embedded in the\n" |
| " system tray). This is a shortcut for the action:\n" |
| " \\\"Properties -> Advanced -> Misc -> WindowView\\\".\n" |
| " \n" |
| " Stop x11vnc - Directs the x11vnc server to disconnect all vncviewers\n" |
| " and then exit. The tray/icon GUI then exits as well.\n" |
| "\n" |
| " Logfile - Show the logfile if x11vnc is being run with one.\n" |
| "\n" |
| " Custom - If you have a \\$HOME/.x11vnc.gui file each uncommented\n" |
| " line in it becomes an additional menu item for this\n" |
| " menu. The remote control command is run directly\n" |
| " via \\\"x11vnc -R <command>\\\", or if prefixed with \n" |
| " \\\"action:\\\" runs a gui internal action, or if \\\"sep\\\"\n" |
| " adds a separator. Set X11VNC_CUSTOM_GUI to use\n" |
| " a different filename. Example file contents:\n" |
| "\n" |
| " scale:3/4\n" |
| " scale:1\n" |
| " scale_cursor:1\n" |
| " sep\n" |
| " action:all-settings\n" |
| " #debug_keyboard\n" |
| " sep\n" |
| " action:Quit\n" |
| "\n" |
| "Termination:\n" |
| "\n" |
| "If the x11vnc server stops for any reason, the tray/icon gui will exit.\n" |
| "\n" |
| "If you delete the tray/icon (e.g. X out button), that is the same\n" |
| "as the \\\"Stop x11vnc\\\" action in the menu. (This will disconnect any\n" |
| "VNC viewer you are currently using to access the display since the\n" |
| "x11vnc server is terminated).\n" |
| "\n" |
| "To terminate the tray/icon gui window but not the x11vnc server press\n" |
| "Control-C on the tray/icon window. You can also do this (and much\n" |
| "more) via Properties -> Advanced -> Actions -> Quit\n" |
| "\"\n" |
| "\n" |
| " set helptext(NewClient) \"\n" |
| " New Client - Presents an entry box where you type in the name\n" |
| " of a computer that is running a VNC viewer in\n" |
| " \\\"listen\\\" mode (e.g. vncviewer -listen). For a\n" |
| " non-standard listening port use \\\"host:port\\\".\n" |
| "\n" |
| " Pressing \\\"OK\\\" will initiate the reverse\n" |
| " connection. Use a blank hostname to skip it, or\n" |
| " delete (\\\"X-out\\\") the window.\n" |
| " \n" |
| "\"\n" |
| "\n" |
| " set helptext(Properties) \"\n" |
| "The Properties dialog allows you to set some basic parameters of a\n" |
| "running x11vnc server. After modifying them press \\\"OK\\\" or \\\"Apply\\\"\n" |
| "to apply the changes, or press \\\"Cancel\\\" to skip applying them.\n" |
| "\n" |
| " Accept Connections:\n" |
| "\n" |
| " Toggles whether VNC viewers are allowed to connect or not. It corresponds\n" |
| " to the \\\"-R unlock\\\" and \\\"-R lock\\\" remote-control commands.\n" |
| "\n" |
| " Ask for Confirmation:\n" |
| "\n" |
| " Toggles whether a popup menu will be presented at the X display when\n" |
| " a new VNC viewer attempts to connect. The person sitting at the X\n" |
| " display can choose to accept or reject the connection or accept the\n" |
| " connection in ViewOnly mode. It corresponds to the \\\"-R accept:popup\\\"\n" |
| " and \\\"-R accept:\\\" remote-control commands.\n" |
| " \n" |
| " All Clients ViewOnly:\n" |
| "\n" |
| " Toggles whether the entire VNC desktop is view only. All clients\n" |
| " will only be able to watch when this is set (regardless of how they\n" |
| " logged in). It corresponds to the \\\"-R viewonly\\\" and \\\"-R noviewonly\\\"\n" |
| " remote-control commands.\n" |
| " \n" |
| " Shared:\n" |
| "\n" |
| " Toggles whether multiple simultaneous viewer connections are allowed\n" |
| " or not. It corresponds to the \\\"-R shared\\\" and \\\"-R noshared\\\"\n" |
| " remote-control commands.\n" |
| "\n" |
| " Advertise Service (Zeroconf):\n" |
| "\n" |
| " Toggles whether this VNC server should advertize itself via Zeroconf\n" |
| " (also called Bonjour, mDNS, and avahi). Then VNC viewers can then find\n" |
| " this service on the local network. It corresponds to the \\\"-R zeroconf\\\"\n" |
| " and \\\"-R nozeroconf\\\" remote-control commands.\n" |
| "\n" |
| " Serve Java Viewer Applet:\n" |
| "\n" |
| " Toggles whether this VNC server should serve up a Java VNC Viewer\n" |
| " applet via HTTP on http://hostname:5800/ (or port 5800+n for VNC\n" |
| " port 5900+n). A java enabled Web Browser can then connect to the\n" |
| " desktopby VNC. If SSL is active then the HTTPS URL https://hostname:5900/\n" |
| " (etc.) will work as well. This requires the x11vnc java viewer jar file\n" |
| " (shared/x11vnc/classes) to be installed. It corresponds to the\n" |
| " \\\"-R http\\\" and \\\"-R nohttp\\\" remote commands.\n" |
| "\n" |
| " Solid Background Color:\n" |
| "\n" |
| " To improve VNC performance, if this option is set, then x11vnc will try\n" |
| " to make the desktop background a solid color (which compresses extremely\n" |
| " well compared to photo images, etc.) It corresponds to the \\\"-R solid\\\"\n" |
| " and \\\"-R nosolid\\\" remote commands.\n" |
| "\n" |
| " Password:\n" |
| "\n" |
| " Lets you set the session password viewers may use to gain full access\n" |
| " to the display. This will only work if x11vnc was started with the\n" |
| " -gui icon or -gui tray mode.\n" |
| " \n" |
| " ViewOnly Password:\n" |
| "\n" |
| " Lets you set the session password viewers may use to gain view only\n" |
| " access to the display. This will only work if x11vnc was started with\n" |
| " the -gui icon or -gui tray mode.\n" |
| "\n" |
| "\n" |
| " NOTE: These \\\"session\\\" passwords only last for the current x11vnc\n" |
| " session (they are not remembered, see the -storepasswd, -passwdfile,\n" |
| " and -rfbauth x11vnc options for using stored passwords).\n" |
| "\n" |
| " If you set \\\"Password\\\" to the empty string that makes the \\\"ViewOnly\n" |
| " Password\\\" empty as well and removes the need for any password to log in.\n" |
| "\n" |
| " If you set \\\"ViewOnly Password\\\" to the empty string that just removes\n" |
| " the ViewOnly log in aspect: \\\"Password\\\" is still required to log in.\n" |
| "\n" |
| " - The \\\"Help\\\" button shows this help text.\n" |
| " \n" |
| " - The \\\"Advanced ...\\\" button replaces the Properties dialog with the full\n" |
| " tkx11vnc GUI. All dynamic settings can be modified in the full GUI.\n" |
| "\n" |
| "\n" |
| "==========================================================================\n" |
| "\n" |
| "Don't Lock Yourself Out:\n" |
| "\n" |
| " If you are sitting at the physical X display you cannot get into too\n" |
| " much trouble setting the Properties dialog values.\n" |
| "\n" |
| " However IF you are using a VNC Viewer to REMOTELY access the X display\n" |
| " some items in the Properties dialog can lock you out of further access:\n" |
| "\n" |
| " \\\"Accept Connections\\\" if you disable this remotely, and\n" |
| " accidentally disconnect your VNC viewer then you will not be\n" |
| " able to reconnect.\n" |
| " \n" |
| " \\\"Ask for Confirmation\\\" if you enable this only someone\n" |
| " sitting at the X display can confirm any new VNC connections.\n" |
| " Furthermore, any current VNC viewers will be blocked while\n" |
| " waiting for the confirmation (times out in 120 sec by default). \n" |
| " \n" |
| " \\\"All Clients ViewOnly\\\" if you enable this remotely, well\n" |
| " you can no longer provide input to disable it.\n" |
| " \n" |
| " If you do lock yourself out you could log in remotely and start up\n" |
| " a second x11vnc and connect to that one to try to fix things in the\n" |
| " first one.\n" |
| "\n" |
| " Note that if there are two or more x11vnc's on the same display the\n" |
| " use of the GUI may be ill-behaved. Terminate the second x11vnc as\n" |
| " soon as you have fixed the setting in the first one. Use of a remote\n" |
| " control command, e.g. \\\"x11vnc -R noviewonly\\\" or \\\"x11vnc -R unlock\\\"\n" |
| " is a good way to avoid this problem.\n" |
| "\"\n" |
| "\n" |
| " set helptext(all) $helpall\n" |
| "\n" |
| " set helptext(Misc-Tuning:) \"\n" |
| "x11vnc has what seems like hundreds of tuning parameters! In this\n" |
| "sub-menu we place some lesser used ones. Most likely you'll want to\n" |
| "leave them at their default values, but you can try them out quickly\n" |
| "with the gui to see if they improve things.\n" |
| "\"\n" |
| "\n" |
| " set helptext(Passwords:) \"\n" |
| "The items in this sub-menu pertain to setting passwords. Note that x11vnc\n" |
| "has two types of password files: RealVNC-style ones (you can create them\n" |
| "with x11vnc -storepasswd or other VNC utility program) you use these\n" |
| "via -rfbauth; and plain-text file passwords you use via -passwdfile.\n" |
| "\n" |
| "Normally passwords cannot be changed by remote-control (e.g. the gui),\n" |
| "but for the case of the \\\"Icon\\\" and \\\"Tray\\\" modes this constraint has\n" |
| "been relaxed.\n" |
| "\n" |
| "In neither the RealVNC-style nor the plain-text file cases should the\n" |
| "password files be readable by users you do not want to access the VNC\n" |
| "server. Contrary to popular belief, the RealVNC-style passwords are\n" |
| "not encrypted, merely obscured.\n" |
| "\n" |
| "x11vnc has the even less secure -passwd and -viewpasswd supplied on\n" |
| "the command line. Be careful with these since they could be read by\n" |
| "users with something like the ps(1) command. On some operating systems\n" |
| "x11vnc tries to quickly overwrite them on the command line but it doesn't\n" |
| "work everywhere.\n" |
| "\n" |
| "Regarding ViewOnly passwords (where a VNC client using that password\n" |
| "can only watch the screen, not interact with it), this is not available\n" |
| "with -rfbauth, but only with -passwdfile, -passwd, and -viewpasswd.\n" |
| "\"\n" |
| "\n" |
| " set helptext(SSL:) \"\n" |
| "In this sub-menu we provide the options related to SSL encrpytion\n" |
| "and authentication.\n" |
| "\n" |
| "There is a built-in mode (-ssl) using the OpenSSL library, and a 2nd\n" |
| "using the external stunnel program (-stunnel, that needs to be installed\n" |
| "on the system). Either may require or benefit from having PEM certificate\n" |
| "files specified.\n" |
| "\n" |
| "\"\n" |
| "\n" |
| " set helptext(Misc-Perms:) \"\n" |
| "In this sub-menu we provide some lesser used permission options.\n" |
| "\n" |
| "Regarding -alwaysshared, -nevershared, and -dontdisconnect, you probably\n" |
| "should never use them and just use x11vnc's -shared and -forever options\n" |
| "instead (these give basically the same functionality and if you mixed\n" |
| "them too much unexpected things may happen).\n" |
| "\"\n" |
| "#'\n" |
| "\n" |
| " set helptext(AlphaBlending:) \"\n" |
| "In this sub-menu we provide some tweak parameters for cursors (little\n" |
| "icon at the mouse pointer) that have transparency (i.e. an Alpha channel\n" |
| "in addition to Red, Green, and Blue RGB channels). For these cursors,\n" |
| "some of the graphics underneath the cursor is allowed to be blended in:\n" |
| "e.g. a drop-shadow (a terrible effect IMNSHO).\n" |
| "\n" |
| "AlphaBlending for x11vnc is only available when the XFIXES X extension is\n" |
| "present (since otherwise it cannot see the cursors at all and so applies\n" |
| "heuristics to show some fake cursors). AlphaBlending is only a problem\n" |
| "with x11vnc when the cursors are not opaque.\n" |
| "\n" |
| "Opaque cursors (e.g. bitmap or simply colored cursor) are rendered\n" |
| "correctly by x11vnc. Only when there is transparency does x11vnc have\n" |
| "to make some approximation to transform the cursor to be opaque (the\n" |
| "VNC protocol does not provide for an alpha channel in cursors, only RGB).\n" |
| "\n" |
| "The items in this sub-menu let you tweak x11vnc's approximation scheme\n" |
| "for cursors with transparency. Hopefully you won't have to use them.\n" |
| "Certain cursor \\\"themes\\\" may require adjustment however.\n" |
| "\"\n" |
| "#'\n" |
| " set helptext(OverlayVisuals:) \"\n" |
| "In this sub-menu are some options that involve fixing color problems\n" |
| "for \\\"Overlay\\\" or \\\"Multi-Depth\\\" visuals. This problem is rare\n" |
| "since overlay and multi-depth visual video hardware is rare. \n" |
| "Some Sun, SGI, and HP machines are known to have them.\n" |
| "\n" |
| "The short answer is if you have a multi-depth visual display (e.g. 8 and\n" |
| "24 bits), and you see messed up colors in x11vnc try the \\\"-overlay\\\"\n" |
| "option on Solaris or IRIX.\n" |
| "\n" |
| "A brief Background on pixels, color, and visuals:\n" |
| "\n" |
| " Pixels (picture elements) are kept in video memory as a certain number\n" |
| " of bits-per-pixel (bpp). Most common are 8bpp, 16bpp, and 32bpp.\n" |
| " Less common are 24bpp, 4bpp, and 1bpp (monochrome).\n" |
| "\n" |
| " How pixel values (i.e. values of the bits) are rendered into colors on\n" |
| " the screen can be done via different \\\"Recipes\\\". These different\n" |
| " recipes are referred to as \\\"visuals\\\". E.g. for 8bpp there is\n" |
| " a PseudoColor visual that maintains a mapping (that can be changed\n" |
| " dynamically) of the pixel values (256 possible ones) into RGB values.\n" |
| " Other 8bpp visuals, e.g. StaticGrey and TrueColor have fixed, regular\n" |
| " mappings and so provide less variation in kinds of colors.\n" |
| "\n" |
| " A visual's \\\"depth\\\" is how many of the pixels are used in the\n" |
| " actual recipe. This may sound wasteful (i.e. not using some of the\n" |
| " bits), but for 32bpp (4 billion colors) that is too much and nearly\n" |
| " always only 24 for them are used. The most common Visual seems to\n" |
| " be depth 24 TrueColor at 32bpp. This provides 16 million colors\n" |
| " which is more than the number of pixels on most screens (1280x1024 =\n" |
| " 1.3 million pixels). Another sometimes used visual that ignores some\n" |
| " bits is depth 15 TrueColor at 16bpp.\n" |
| "\n" |
| "OK, now, finally, to the Overlay Visuals. Some hardware (or software\n" |
| "emulations) allow different depth visuals to be used on the display\n" |
| "at the same time. The pixels of windows using different depth visuals\n" |
| "may overlap.\n" |
| "\n" |
| "The most common seems to be both 8 and 24 depth visuals on a 32bpp setup.\n" |
| "24 of the pixels can be used for one visual and the remaining 8 for the\n" |
| "other. This is sometimes referred to as \\\"8+24\\\" mode. Furthermore,\n" |
| "a speedup is achieved because writing graphics data to, say, the 8bit\n" |
| "visual does not destroy the image data in the 24bit visual. Evidently\n" |
| "popup menus can be done very quickly this way: they use the 8bit visual\n" |
| "and when the popup goes away the graphics data in the 24bit visual is\n" |
| "immediately reexposed without having the application redraw it.\n" |
| "\n" |
| "Also, some legacy applications can only use 8bpp visuals. But in these\n" |
| "days of high color graphics and web browsers one would like the rest\n" |
| "of the desktop to use depth 24 visuals. They often work on the multi\n" |
| "depth visuals.\n" |
| "\n" |
| "How does this effect x11vnc? x11vnc nearly always polls the root window\n" |
| "(container of all other windows). The root window will be one depth,\n" |
| "e.g. 8 or 24. Any windows using the *other* depth will appear to have\n" |
| "messed up colors (or just be black or some other solid color) when viewed\n" |
| "via x11vnc.\n" |
| "\n" |
| "How to fix? Solaris and IRIX provide an API to extract the full snapshot\n" |
| "of the display with all the colors correct. It comes to x11vnc as depth\n" |
| "24 TrueColor. To enable this use the \\\"-overlay\\\" option. Performance\n" |
| "may be slower, but if the colors are correct that is a big improvement.\n" |
| "\"\n" |
| "\n" |
| " set helptext(8-Bit-Color:) \"\n" |
| "Some older displays (e.g. with limited Video RAM) use 8 bits-per-pixel\n" |
| "color. This allows for only 256 different colors on the screen at the\n" |
| "same time. This sometimes leads to problems with viewing these 8bpp\n" |
| "displays via x11vnc. This sub-menu has some options that correspond to\n" |
| "workarounds for this case. If you can configure the machine to use 16bpp\n" |
| "it may be worth it to avoid the color problems (e.g. color flashing\n" |
| "as the 8bit colormap is switched).\n" |
| "\"\n" |
| " set helptext(SubWindow:) \"\n" |
| "This sub-menu has a couple options regarding having x11vnc poll a \n" |
| "single window, not the entire display. This way just the window\n" |
| "is shared.\n" |
| "\n" |
| "Note if the application pops up multiple windows they are not tracked\n" |
| "and shared. So this is not application sharing. The application has to\n" |
| "be very simple (e.g. a simple terminal or the image window on a webcam)\n" |
| "for this mode to be usable.\n" |
| "\"\n" |
| " set helptext(ResizeRotate:) \"\n" |
| "This sub-menu has some options regarding screens that support the X\n" |
| "Resize, Reflection, and Rotation Extension (RANDR), and one expects screen\n" |
| "resizing, reflection, or rotation to take place during the x11vnc session.\n" |
| "This is pretty rare, but x11vnc seems to handle it reasonably well using\n" |
| "this X extension.\n" |
| "\n" |
| "This mode is on by default in -id mode to try to track the changing\n" |
| "size of the SubWindow. It is not on by default for full-screen mode\n" |
| "because of the extra overhead, etc.\n" |
| "\"\n" |
| "\n" |
| " set helptext(WireFrame:) \"\n" |
| "This sub-menu has some options for the x11vnc wireframing speedup scheme.\n" |
| "\n" |
| "For x11vnc, Wireframing means to watch for toplevel windows being Opaquely\n" |
| "Moved or Resized. When x11vnc detects this, it stops polling the screen\n" |
| "and simply shows a \\\"wireframe\\\" outline of the window as it is being\n" |
| "moved or resized. This avoids \\\"screen polling thrashing\\\" when the\n" |
| "screen is changing so rapidly during this period. For various reasons\n" |
| "this is usually much faster then letting the window manager do its\n" |
| "own wireframing (you are encouraged to do Opaque moves and resizes\n" |
| "when using x11vnc!)\n" |
| "\n" |
| "Also, once a moved window is released in its new position, x11vnc uses\n" |
| "the VNC CopyRect encoding to very efficiently update the VNC viewers\n" |
| "(each just copies the image data locally).\n" |
| "\n" |
| "This sort of scheme was used much in the 1990's on local displays because\n" |
| "video hardware was slow at the time. x11vnc tries to use this same trick\n" |
| "as a speedup for its activities (the network is much slower than video\n" |
| "hardware writes, and the video hardware reads that x11vnc uses to poll\n" |
| "the screen are still slow today).\n" |
| "\"\n" |
| "#'\"\n" |
| "\n" |
| " set helptext(Safe:) \"\n" |
| "In this sub-menu are some options for making x11vnc operations\n" |
| "more, or less, safe. E.g. disable the running of external commands, etc.\n" |
| "\n" |
| "You can also turn off the Remote control channel (NOTE that doing that\n" |
| "will disable the GUI from being able to communicate with x11vnc).\n" |
| "\"\n" |
| "\n" |
| " set helptext(X-ext:) \"\n" |
| "In this sub-menu are a few rarely used options regarding some X extensions\n" |
| "used by x11vnc.\n" |
| "\"\n" |
| " set helptext(Clipping:) \"\n" |
| "In this sub-menu are some options regarding clipping or blacking out\n" |
| "portions of the Screen. E.g. under XINERAMA when the multiple monitors\n" |
| "are not the same size.\n" |
| "\n" |
| "\"\n" |
| " set helptext(Misc-Screen:) \"\n" |
| "In this sub-menu are some little used options modifying aspects of\n" |
| "the screen source.\n" |
| "\"\n" |
| "\n" |
| " set helptext(Settings:) \"\n" |
| "In this sub-menu are some options for saving and loading option settings.\n" |
| "The default file to store settings in is ~/.x11vncrc, but you can save\n" |
| "different \\\"profiles\\\" in other files for later use.\n" |
| "\n" |
| "\"\n" |
| " set helptext(Java-applet:) \"\n" |
| "In this sub-menu are some options for running the built-in HTTP server\n" |
| "that delivers the TightVNC Java VNC Viewer applet (VncViewer.jar) to\n" |
| "clients. The viewer runs in their Web browser.\n" |
| "\n" |
| "The default port listened on is 5800, so the URL is typically:\n" |
| "\n" |
| " http://hostname:5800/\n" |
| "\n" |
| "but this can be altered by -httpport, etc.\n" |
| "\"\n" |
| "\n" |
| " set helptext(Chat:) \"\n" |
| "In this sub-menu are some options for enabling a local chat window\n" |
| "and starting or stopping the current chat. This is the UltraVNC \n" |
| "Text Chat support in x11vnc.\n" |
| "\"\n" |
| "\n" |
| " set helptext(ScrollCopyRect:) \"\n" |
| "This sub-menu has some options for the x11vnc Scroll detection and\n" |
| "CopyRect speedup scheme.\n" |
| "\n" |
| "For this mode, x11vnc \\\"spies\\\" on communication between the X server and\n" |
| "applications using the RECORD extension. It looks for various patterns\n" |
| "to detect a scrolled window. This only works for some applications,\n" |
| "fortunately some important ones.\n" |
| "\n" |
| "Once the scroll is detected it uses the VNC CopyRect encoding for a\n" |
| "big speedup. Screen polling is also sped up for this scheme.\n" |
| "\n" |
| "There are many tweakable parameters for this mode and they are described\n" |
| "in the sub-menu items.\n" |
| "\"\n" |
| "\n" |
| " set helptext(XDAMAGE:) \"\n" |
| "The DAMAGE X extension allows the X server to send signals to x11vnc\n" |
| "telling it which regions of the screen have been changed. This improves\n" |
| "x11vnc's performance markedly. The DAMAGE extension must be available\n" |
| "on the display for this to work.\n" |
| "\n" |
| "Unfortunately DAMAGE cannot be trusted completely for the changed regions,\n" |
| "because often the reported changed region is much larger than the actual\n" |
| "changed regions. Nevertheless, x11vnc uses the DAMAGE information very\n" |
| "effectively as hints to improve its performance.\n" |
| "\n" |
| "The items in the sub-menu allow tweaking x11vnc's DAMAGE algorithm.\n" |
| "\"\n" |
| "\n" |
| " set helptext(Ncache:) \"\n" |
| "A simple client-side (viewer) caching scheme is enabled with the\n" |
| "\\\"-ncache n\\\" option. It simply uses \\\"n\\\" framebuffer sized areas\n" |
| "below the actual display for caching window pixel data. \n" |
| "\n" |
| "Drawbacks are it uses a lot of RAM (roughly n times more), and the\n" |
| "pixels cache area is visible in the viewers.\n" |
| "\n" |
| "The items in the sub-menu allow tweaking x11vnc's -ncache algorithm.\n" |
| "\"\n" |
| "\n" |
| " set helptext(SharedMemory:) \"\n" |
| "This sub-menu provides some options regarding SYSV shared memory usage\n" |
| "(shm) by x11vnc. Usually you want shm turned on because the x11vnc\n" |
| "process is nearly always running on the same machine the X server process\n" |
| "is running on. SharedMemory gives a performance speedup. However, if you\n" |
| "need to modify this scenario for special usage these options allow you to.\n" |
| "\"\n" |
| "\n" |
| " set helptext(Misc-Debug:) \"\n" |
| "This sub-menu contains a lot of debugging parameters usually used\n" |
| "for debugging x11vnc itself. This is unlike the -debug_pointer and\n" |
| "-debug_keyboard options that are useful in learning information, quirks,\n" |
| "etc. about your local display and environment.\n" |
| "\"\n" |
| "\n" |
| " set helptext(Selection:) \"\n" |
| "This sub-menu contains some options centering around the Selection\n" |
| "(also referred to as the Clipboard, Cutbuffers, etc). x11vnc will try\n" |
| "to exchange the selections between the VNC viewers and the X server.\n" |
| "You can adjust that behavior with these options.\n" |
| "\"\n" |
| "\n" |
| " set helptext(WindowView) \"\n" |
| "Set the Window View Mode for the gui. There are three modes:\n" |
| "\n" |
| " - full: Presents the full gui (Actions, Clients, etc, buttons,\n" |
| " and the Text area and Set/Entry box).\n" |
| "\n" |
| " - icon: Presents a small icon instead of the full gui. Moving\n" |
| " the mouse over it shows the VNC display name and any\n" |
| " connected clients. Clicking on the icon pops up a menu\n" |
| " of actions to perform. Among them is \\\"Properties\\\" that\n" |
| " allows setting more parameters. Clicking on \\\"Advanced\\\"\n" |
| " in \\\"Properties\\\" brings up the full gui.\n" |
| "\n" |
| " - tray: Attempt to embed the small icon in the system tray. If\n" |
| " this fails it will resort to icon mode where the small icon\n" |
| " is a standalone window.\n" |
| "\n" |
| "Note that in \\\"full\\\" mode if you delete the full gui window the gui\n" |
| "terminates (but the x11vnc server keeps running). However under \\\"icon\\\"\n" |
| "or \\\"tray\\\" mode if you bring up the full gui window via \\\"Properties ->\n" |
| "Advanced\\\" and then delete it the gui does NOT terminate.\n" |
| "\n" |
| "Also note that by default in \\\"icon\\\" mode if you delete the icon\n" |
| "window both the gui *and* the x11vnc server terminate.\n" |
| "\"\n" |
| "\n" |
| " set helptext(gui) \"\n" |
| "tkx11vnc is a simple frontend to x11vnc. Nothing fancy, it merely\n" |
| "provides an interface to each of the many x11vnc command line options and\n" |
| "remote control commands. See \\\"Help -> all\\\" for much info about x11vnc.\n" |
| "\n" |
| "For a simplier gui, run x11vnc in \\\"tray\\\" or \\\"icon\\\" mode such as\n" |
| "\\\"-gui tray\\\", \\\"-gui icon\\\", or \\\"-gui tray=setpass\\\". In that\n" |
| "mode the full gui is only available under \\\"Advanced ...\\\".\n" |
| "\n" |
| "Also, \\\"-gui ez\\\" will show fewer menu items (toggle via Misc -> simple_gui)\n" |
| "\n" |
| "All menu items have a (?) button one can click on to get more information\n" |
| "about the option or command.\n" |
| "\n" |
| "There are two states tkx11vnc can be in:\n" |
| "\n" |
| " 1) Available to control a running x11vnc process.\n" |
| "\n" |
| " 2) Getting ready to start a x11vnc process.\n" |
| "\n" |
| "Most people will just use state 1).\n" |
| "\n" |
| "In state 1) the Menu items available in the menus are those that\n" |
| "correspond to the x11vnc \\\"remote control\\\" commands. See the -remote\n" |
| "entry under \\\"Help -> all\\\" for a complete list. Also available is\n" |
| "the \\\"Actions -> stop\\\" item to shut down the running x11vnc server,\n" |
| "thereby changing to state 2). There are other actions available too.\n" |
| "\n" |
| "In state 2) the Menu items available in the menus (\\\"Actions\\\", \\\"Clients\\\",\n" |
| "etc.) are those that correspond to command line options used in starting\n" |
| "an x11vnc process, and the \\\"Actions -> start\\\" item executes\n" |
| "x11vnc thereby changing to state 1). To see what x11vnc startup command\n" |
| "you have built so far, look at the (?) help for \\\"Actions -> start\\\"\n" |
| "and it will show you what the command looks like.\n" |
| "\n" |
| "There is much overlap between the menu items available in state 1)\n" |
| "and state 2), but it is worth keeping in mind it is not 100%.\n" |
| "For example, you cannot set passwords or password files in state 1).\n" |
| "(update: simple password setting is now allowed in \\\"tray\\\" or \\\"icon\\\" mode).\n" |
| "\n" |
| "\n" |
| "Also note that there may be *two* separate X displays involved, not just\n" |
| "one: 1) the X display x11vnc will be polling (and making available to\n" |
| "VNC viewers), and 2) the X display this GUI is intended to display on.\n" |
| "\n" |
| "For example, one might use ssh to access the remote machine where the\n" |
| "GUI would display on :11 and x11vnc would poll display :0. By default\n" |
| "the gui will display on the value in the DISPLAY env. variable followed\n" |
| "by the value from the -display option. To override this, use something\n" |
| "like: \\\"-gui otherhost:0\\\", etc.\n" |
| "\n" |
| "\n" |
| "GUI components: \n" |
| "--- ----------\n" |
| "\n" |
| "1) At the top of the gui is a info text label where information will\n" |
| " be posted, e.g. when traversing menu items text indicating how to get\n" |
| " help on the item and its current value will be displayed.\n" |
| "\n" |
| "2) Below the info label is the area where the menu buttons, \\\"Actions\\\",\n" |
| " \\\"Clients\\\", etc., are presented. If a menu item has a checkbox,\n" |
| " it corresponds to a boolean on/off variable. Otherwise it is\n" |
| " either a string variable, or an action not associated with a\n" |
| " variable (for the most part).\n" |
| "\n" |
| "3) Below the menu button area is a label indicating the current x11vnc\n" |
| " X display being polled and the corresponding VNC display name. Both\n" |
| " will be \\\"(*none*)\\\" when there is no connection established.\n" |
| "\n" |
| "4) Below the x11 and vnc displays label is a text area there scrolling\n" |
| " information about actions being taken and commands being run is displayed.\n" |
| " To scroll click in the area and use PageUp/PageDown or the arrow keys.\n" |
| "\n" |
| "5) At the bottom is an entry area. When one selects a menu item that\n" |
| " requires supplying a string value, the label will be set to the\n" |
| " parameter name and one types in the new value. Then one presses the\n" |
| " \\\"OK\\\" button or presses \\\"Enter\\\" to set the value. Or you can press\n" |
| " \\\"Cancel\\\" or \\\"Escape\\\" to avoid changing the variable.\n" |
| "\n" |
| " Many variables are boolean toggles (for example, \\\"Permissions ->\n" |
| " viewonly\\\") or Radio button selections. Selecting these menu items\n" |
| " will NOT activate the entry area but rather toggle the variable\n" |
| " immediately.\n" |
| "\n" |
| "\n" |
| "CASCADES BUG: There is a bug not yet worked around for the cascade menus\n" |
| "where the (?) help button gets in the way. To get the mouse over to\n" |
| "the cascade menu click and release mouse to activate the cascade, then\n" |
| "you can click on its items. Dragging with a mouse button held down will\n" |
| "not work (sorry!).\n" |
| "\n" |
| "\n" |
| "Key Bindings:\n" |
| "\n" |
| " In the Text Area: Control-/ selects all of the text.\n" |
| " Anywhere: Control-d invokes \\\"Actions -> detach\\\"\n" |
| " Anywhere: Control-a invokes \\\"Actions -> attach\\\"\n" |
| " Anywhere: Control-p invokes \\\"Actions -> ping\\\"\n" |
| " Anywhere: Control-u and Control-r invoke \\\"Actions -> update-all\\\"\n" |
| "\"\n" |
| "\n" |
| "set under_wally \"\n" |
| "Misc:\n" |
| "\n" |
| "Since x11vnc has so many settings and to avoid further confusion,\n" |
| "the libvncserver options:\n" |
| "\n" |
| " -alwaysshared\n" |
| " -nevershared\n" |
| " -dontdisconnect\n" |
| "\n" |
| "are not available for changing in a running x11vnc (even though it\n" |
| "is feasible). These options overlap with the x11vnc options -shared\n" |
| "and -forever which are hopefully enough for most usage. They may be\n" |
| "specified for x11vnc startup if desired.\n" |
| "\n" |
| "\"\n" |
| "\n" |
| "global beginner_mode\n" |
| "if {$beginner_mode} {\n" |
| " set helptext(gui) \"\n" |
| "tkx11vnc is a simple frontend to x11vnc. It is currently running in\n" |
| "\\\"ez\\\" or \\\"simple\\\" mode. For many more options run it in normal\n" |
| "mode by toggling \\\"Misc -> simple_gui\\\".\n" |
| "\n" |
| "All menu items have a (?) button one can click on to get more information\n" |
| "about the option or command.\n" |
| "\n" |
| "GUI components: \n" |
| "--- ----------\n" |
| "\n" |
| "1) At the top of the gui is a info text label where information will\n" |
| " be posted, e.g. when traversing menu items text indicating how to get\n" |
| " help on the item and its current value will be displayed.\n" |
| "\n" |
| "2) Below the info label is the area where the menu buttons, \\\"Actions\\\",\n" |
| " \\\"Clients\\\", etc., are presented. If a menu item has a checkbox,\n" |
| " it corresponds to a boolean on/off variable. Otherwise it is\n" |
| " either a string variable, or an action not associated with a\n" |
| " variable (for the most part).\n" |
| "\n" |
| "3) Below the menu button area is a label indicating the current x11vnc\n" |
| " X display being polled and the corresponding VNC display name. Both\n" |
| " will be \\\"(*none*)\\\" when there is no connection established.\n" |
| "\n" |
| "4) Below the x11 and vnc displays label is a text area there scrolling\n" |
| " information about actions being taken and commands being run is displayed.\n" |
| " To scroll click in the area and use PageUp/PageDown or the arrow keys.\n" |
| "\n" |
| "5) At the bottom is an entry area. When one selects a menu item that\n" |
| " requires supplying a string value, the label will be set to the\n" |
| " parameter name and one types in the new value. Then one presses the\n" |
| " \\\"OK\\\" button or presses \\\"Enter\\\" to set the value. Or you can press\n" |
| " \\\"Cancel\\\" or \\\"Escape\\\" to avoid changing the variable.\n" |
| "\n" |
| " Many variables are boolean toggles (for example, \\\"Permissions ->\n" |
| " viewonly\\\") or Radio button selections. Selecting these menu items\n" |
| " will NOT activate the entry area but rather toggle the variable\n" |
| " immediately.\n" |
| "\n" |
| "CASCADES BUG: There is a bug not yet worked around for the cascade menus\n" |
| "where the (?) help button gets in the way. To get the mouse over to\n" |
| "the cascade menu click and release mouse to activate the cascade, then\n" |
| "you can click on its items. Dragging with a mouse button held down will\n" |
| "not work (sorry!).\n" |
| "\n" |
| "\"\n" |
| "}\n" |
| "\n" |
| "}\n" |
| "\n" |
| "proc center_win {w} {\n" |
| " wm withdraw $w\n" |
| " set x [expr [winfo screenwidth $w]/2 - [winfo reqwidth $w]/2];\n" |
| " set y [expr [winfo screenheight $w]/2 - [winfo reqheight $w]/2];\n" |
| " wm geometry $w +$x+$y\n" |
| " wm deiconify $w\n" |
| " update\n" |
| "}\n" |
| "\n" |
| "proc textwidth {text} {\n" |
| " set min 0;\n" |
| " foreach line [split $text \"\\n\"] {\n" |
| " set n [string length $line]\n" |
| " if {$n > $min} {\n" |
| " set min $n\n" |
| " }\n" |
| " }\n" |
| " return $min\n" |
| "}\n" |
| "\n" |
| "proc textheight {text} {\n" |
| " set count 0;\n" |
| " foreach line [split $text \"\\n\"] {\n" |
| " incr count\n" |
| " }\n" |
| " return $count\n" |
| "}\n" |
| "\n" |
| "proc set_name {name} {\n" |
| " global full_win icon_mode\n" |
| " global saved_set_name\n" |
| "\n" |
| " if {![info exists saved_set_name]} {\n" |
| " set saved_set_name \"tkx11vnc\"\n" |
| " }\n" |
| " if {$name == \"RESTORE\"} {\n" |
| " set name $saved_set_name\n" |
| " } else {\n" |
| " set saved_set_name $name\n" |
| " }\n" |
| " if {![info exists full_win]} {\n" |
| " return\n" |
| " }\n" |
| " set w \".\"\n" |
| " if {$icon_mode} {\n" |
| " wm title $w \"$name\"\n" |
| " wm iconname $w \"$name\"\n" |
| " set w $full_win\n" |
| " }\n" |
| " wm title $w \"$name\"\n" |
| " wm iconname $w \"$name\"\n" |
| "}\n" |
| "\n" |
| "proc make_toplevel {w {title \"\"}} {\n" |
| " catch {destroy $w}\n" |
| " toplevel $w;\n" |
| " bind $w <Escape> \"destroy $w\"\n" |
| " if {$title != \"\"} {\n" |
| " wm title $w $title\n" |
| " wm iconname $w $title\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc textwin {name title text {entry \"\"}} {\n" |
| " global max_text_height max_text_width\n" |
| " global bfont ffont\n" |
| "\n" |
| " set width [textwidth $text]\n" |
| " incr width\n" |
| " if {$width > $max_text_width} {\n" |
| " set width $max_text_width\n" |
| " }\n" |
| " set height [textheight $text]\n" |
| " if {$height > $max_text_height} {\n" |
| " set height $max_text_height\n" |
| " }\n" |
| "\n" |
| " set w \".text_$name\"\n" |
| " make_toplevel $w $title\n" |
| "\n" |
| " frame $w.f -bd 0;\n" |
| " pack $w.f -fill both -expand 1\n" |
| " text $w.f.t -width $width -height $height -setgrid 1 -bd 2 \\\n" |
| " -yscrollcommand \"$w.f.y set\" -relief ridge \\\n" |
| " -font $ffont;\n" |
| " scrollbar $w.f.y -orient v -relief sunken -command \"$w.f.t yview\";\n" |
| " button $w.f.b -text \"Dismiss\" -command \"destroy $w\" -font $bfont \\\n" |
| " -pady 2\n" |
| "\n" |
| " $w.f.t insert 1.0 $text;\n" |
| "\n" |
| " bind $w <Enter> \"focus $w.f.t\"\n" |
| "\n" |
| " if {$entry != \"\"} {\n" |
| " # varname+Label Name\n" |
| " set list [split $entry \"+\"]\n" |
| " set varname [lindex $list 0]\n" |
| " set labname [lindex $list 1]\n" |
| " frame $w.f.ef -bd 1 -relief groove\n" |
| " label $w.f.ef.l -text \"$labname\" -anchor w -font $bfont\n" |
| " entry $w.f.ef.e -relief sunken -font $ffont \\\n" |
| " -textvariable $varname\n" |
| " button $w.f.ef.b -text \"OK\" -font $bfont \\\n" |
| " -command \"set ${varname}_ok 1; destroy $w\" \n" |
| " bind $w.f.ef.e <KeyPress-Return> \"set ${varname}_ok 1; destroy $w\"\n" |
| " \n" |
| " pack $w.f.ef.l -side left\n" |
| " pack $w.f.ef.e -side left -fill x -expand 1\n" |
| " pack $w.f.ef.b -side right\n" |
| " }\n" |
| "\n" |
| " wm withdraw $w\n" |
| " pack $w.f.b -side bottom -fill x \n" |
| " if {$entry != \"\"} {\n" |
| " pack $w.f.ef -side bottom -fill x \n" |
| " bind $w <Enter> \"focus $w.f.ef.e\"\n" |
| " $w.f.ef.e icursor end\n" |
| " } else {\n" |
| " bind $w <Enter> \"focus $w.f.t\"\n" |
| " }\n" |
| " pack $w.f.y -side right -fill y;\n" |
| " pack $w.f.t -side top -fill both -expand 1;\n" |
| " update\n" |
| "\n" |
| " center_win $w\n" |
| "\n" |
| " return $w\n" |
| "}\n" |
| "\n" |
| "proc active_when_connected {item} {\n" |
| " global helpremote helptext\n" |
| " global icon_mode\n" |
| "\n" |
| " if {$icon_mode} {\n" |
| " if {$item == \"passwd\"} {\n" |
| " return 1\n" |
| " }\n" |
| " if {$item == \"viewpasswd\"} {\n" |
| " return 1\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " if {[opt_match G $item]} {\n" |
| " return 1\n" |
| " } elseif {[opt_match R $item]} {\n" |
| " return 1\n" |
| " } elseif {[opt_match S $item]} {\n" |
| " return 0\n" |
| " } elseif {[is_action $item]} {\n" |
| " if {[opt_match R $item]} {\n" |
| " return 1\n" |
| " } else {\n" |
| " return 0\n" |
| " }\n" |
| " } elseif {[info exists helpremote($item)]} {\n" |
| " return 1\n" |
| " } else {\n" |
| " return 0\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc active_when_starting {item} {\n" |
| " global helpremote helptext beginner_mode\n" |
| "\n" |
| " if {$beginner_mode} {\n" |
| " if {[opt_match G $item]} {\n" |
| " return 1\n" |
| " }\n" |
| " if {$item == \"display\"} {\n" |
| " return 1\n" |
| " }\n" |
| " if {$item == \"attach\"} {\n" |
| " return 1\n" |
| " }\n" |
| " if {$item == \"debug_gui\"} {\n" |
| " return 1\n" |
| " }\n" |
| " return 0\n" |
| " }\n" |
| "\n" |
| " if {[opt_match G $item]} {\n" |
| " return 1\n" |
| " } elseif {[opt_match S $item]} {\n" |
| " return 1\n" |
| " } elseif {[opt_match R $item]} {\n" |
| " return 0\n" |
| " } elseif {[is_action $item]} {\n" |
| " if {[opt_match S $item]} {\n" |
| " return 1\n" |
| " } else {\n" |
| " return 0\n" |
| " }\n" |
| " } elseif {[info exists helptext($item)]} {\n" |
| " return 1\n" |
| " } else {\n" |
| " return 0\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc help_win {item} {\n" |
| " global helptext helpremote menu_var\n" |
| " global query_ans query_aro\n" |
| " global beginner_mode\n" |
| "\n" |
| " set ok 0\n" |
| " set text \"Help on $item:\\n\\n\"\n" |
| "\n" |
| " if {$item == \"NewClient\"} {\n" |
| " ;\n" |
| " } elseif {[is_gui_internal $item]} {\n" |
| " if {$item != \"gui\" && $item != \"all\" && $item != \"Misc-Tuning:\" \\\n" |
| " && $item != \"Properties\" && $item != \"Tray\"} {\n" |
| " append text \" + Is a gui internal Action (cannot be set).\\n\";\n" |
| " }\n" |
| " } elseif {[is_action $item]} {\n" |
| " append text \" + Is a remote control Action (cannot be set).\\n\";\n" |
| " } elseif {[active_when_connected $item]} {\n" |
| " append text \" + Can be changed in a running x11vnc.\\n\";\n" |
| " } else {\n" |
| " append text \" - Cannot be changed in a running x11vnc.\\n\";\n" |
| " }\n" |
| " if {$item == \"NewClient\"} {\n" |
| " ;\n" |
| " } elseif {[is_gui_internal $item]} {\n" |
| " ;\n" |
| " } elseif {[active_when_starting $item]} {\n" |
| " append text \" + Can be set at x11vnc startup.\\n\";\n" |
| " } else {\n" |
| " if {! $beginner_mode} {\n" |
| " append text \" - Cannot be set at x11vnc startup.\\n\";\n" |
| " }\n" |
| " }\n" |
| " append text \"\\n\"\n" |
| "\n" |
| " if {[info exists helptext($item)]} {\n" |
| " append text \"\\n\"\n" |
| " if {[is_gui_internal $item]} {\n" |
| " append text \"==== x11vnc help: ====\\n\";\n" |
| " } else {\n" |
| " append text \"==== x11vnc startup option help: ====\\n\";\n" |
| " }\n" |
| " append text \"\\n\"\n" |
| " append text $helptext($item)\n" |
| " append text \"\\n\"\n" |
| " set ok 1\n" |
| " }\n" |
| "\n" |
| " if {[info exists helpremote($item)]} {\n" |
| " append text \"\\n\"\n" |
| " append text \"==== x11vnc remote control help: ====\\n\";\n" |
| " append text \"\\n\"\n" |
| " append text $helpremote($item)\n" |
| " set ok 1\n" |
| " }\n" |
| "\n" |
| " if {![is_action $item] && [info exists menu_var($item)]} {\n" |
| " global unset_str\n" |
| " append text \"\\n\\n\"\n" |
| " append text \"==== current $item value: ====\\n\";\n" |
| " append text \"\\n\"\n" |
| "\n" |
| " if {$item == \"passwd\" || $item == \"viewpasswd\"} {\n" |
| " ;\n" |
| " } elseif {$menu_var($item) == \"\"} {\n" |
| " append text \"$unset_str\\n\"\n" |
| " } else {\n" |
| " append text \"$menu_var($item)\\n\"\n" |
| " }\n" |
| " if {$item == \"http\" || $item == \"httpdir\" || $item == \"httpport\"} {\n" |
| " global vnc_url;\n" |
| " append text \"\\nURL: $vnc_url\\n\"\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " if {$item == \"start\"} {\n" |
| " set str [get_start_x11vnc_txt]\n" |
| " append_text \"$str\\n\"\n" |
| "# append text \"\\nPossible \\$HOME/.x11vncrc settings for this command:\\n\\n\"\n" |
| "# set rctxt [get_start_x11vnc_cmd 1]\n" |
| "# append text \"$rctxt\\n\"\n" |
| " }\n" |
| "\n" |
| " regsub -all { } $item \" \" name\n" |
| "\n" |
| " if {$ok} {\n" |
| " textwin $name \"x11vnc help: $item\" \"$text\";\n" |
| " }\n" |
| " return $ok\n" |
| "}\n" |
| "\n" |
| "proc parse_help {} {\n" |
| " global env x11vnc_prog;\n" |
| " global helpall helptext;\n" |
| "\n" |
| " set helppipe [open \"| $x11vnc_prog -help\" \"r\"];\n" |
| " if {$helppipe == \"\"} {\n" |
| " puts stderr \"failed to run $x11vnc_prog -help\";\n" |
| " exit 1;\n" |
| " }\n" |
| "\n" |
| " set sawopts 0;\n" |
| " set curropt \"\";\n" |
| " while {[gets $helppipe line] > -1} {\n" |
| " append helpall \"$line\\n\" \n" |
| "\n" |
| " # XXX\n" |
| " if {[regexp {^Options:} $line]} {\n" |
| " set sawopts 1;\n" |
| " continue;\n" |
| " }\n" |
| " # XXX\n" |
| " if {[regexp {^These options} $line]} {\n" |
| " continue;\n" |
| " }\n" |
| " # tweak aliases:\n" |
| " regsub {^-zeroconf} $line \"-zero_conf\" line\n" |
| " regsub {^-avahi } $line \"-zeroconf\" line\n" |
| "\n" |
| " if {! $sawopts} {\n" |
| " continue;\n" |
| " }\n" |
| " if {[regexp {^-([0-9A-z_][0-9A-z_]*)} $line match name]} {\n" |
| " set allnames($name) 1;\n" |
| " if {\"$curropt\" != \"no$name\" && \"no$curropt\" != \"$name\"} {\n" |
| " set curropt $name;\n" |
| " set helptext($curropt) \"$line\\n\";\n" |
| " } else {\n" |
| " append helptext($curropt) \"$line\\n\";\n" |
| " }\n" |
| " } elseif {$curropt != \"\"} {\n" |
| " append helptext($curropt) \"$line\\n\";\n" |
| " }\n" |
| " }\n" |
| " foreach name [array names allnames] {\n" |
| " if {[regexp {^no} $name]} {\n" |
| " regsub {^no} $name \"\" pair\n" |
| " } else {\n" |
| " set pair \"no$name\"\n" |
| " }\n" |
| " if {[info exists helptext($name)]} {\n" |
| " if ![info exists helptext($pair)] {\n" |
| " set helptext($pair) $helptext($name);\n" |
| " }\n" |
| " } elseif {[info exists helptext($pair)]} {\n" |
| " if ![info exists helptext($name)] {\n" |
| " set helptext($name) $helptext($pair);\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " set_internal_help\n" |
| "}\n" |
| "\n" |
| "proc tweak_both {new old} {\n" |
| " tweak_help $new $old\n" |
| " tweak_remote_help $new $old\n" |
| "}\n" |
| "\n" |
| "proc tweak_remote_help {new old} {\n" |
| " global helpremote\n" |
| " if ![info exists helpremote($new)] {\n" |
| " if {[info exists helpremote($old)]} {\n" |
| " set helpremote($new) $helpremote($old)\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc tweak_help {new old} {\n" |
| " global helptext\n" |
| " if ![info exists helptext($new)] {\n" |
| " if {[info exists helptext($old)]} {\n" |
| " set helptext($new) $helptext($old)\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc parse_remote_help {} {\n" |
| " global helpremote helptext help_indent remote_name;\n" |
| "\n" |
| " set sawopts 0;\n" |
| " set curropt \"\";\n" |
| " set possopts \"\";\n" |
| " set offset [expr $help_indent - 1];\n" |
| " foreach line [split $helptext(remote) \"\\n\"] {\n" |
| " \n" |
| " set line [string range $line $offset end];\n" |
| "\n" |
| " # XXX\n" |
| " if {[regexp {^The following -remote/-R commands} $line]} {\n" |
| " set sawopts 1;\n" |
| " continue;\n" |
| " }\n" |
| " # XXX\n" |
| " if {[regexp {^The vncconnect.*command} $line]} {\n" |
| " set sawopts 0;\n" |
| " }\n" |
| "\n" |
| " if {! $sawopts} {\n" |
| " continue;\n" |
| " }\n" |
| " if {[regexp {^([0-9A-z_][0-9A-z_:]*)} $line match name]} {\n" |
| " regsub {:.*$} $name \"\" popt\n" |
| " lappend possopts $popt\n" |
| " if {\"$curropt\" != \"no$name\" && \"no$curropt\" != \"$name\"} {\n" |
| " set curropt $name;\n" |
| " regsub {:.*$} $curropt \"\" curropt\n" |
| " set remote_name($curropt) $name\n" |
| " set helpremote($curropt) \"$line\\n\";\n" |
| " } else {\n" |
| " append helpremote($curropt) \"$line\\n\";\n" |
| " }\n" |
| " } elseif {$curropt != \"\"} {\n" |
| " append helpremote($curropt) \"$line\\n\";\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " foreach popt $possopts {\n" |
| " if {[info exists helpremote($popt)]} {\n" |
| " continue\n" |
| " }\n" |
| " if {[regexp {^no} $popt]} {\n" |
| " regsub {^no} $popt \"\" try\n" |
| " } else {\n" |
| " set try \"no$popt\"\n" |
| " }\n" |
| " if {[info exists helpremote($try)]} {\n" |
| " set helpremote($popt) $helpremote($try)\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc parse_query_help {} {\n" |
| " global query_ans query_aro query_ans_list query_aro_list helptext;\n" |
| "\n" |
| " set sawans 0;\n" |
| " set sawaro 0;\n" |
| " set ans_str \"\"\n" |
| " set aro_str \"\"\n" |
| "\n" |
| " foreach line [split $helptext(query) \"\\n\"] {\n" |
| "\n" |
| " if {! $sawans && [regexp {^ *ans=} $line]} {\n" |
| " set sawans 1\n" |
| " }\n" |
| " if {! $sawans} {\n" |
| " continue\n" |
| " }\n" |
| "\n" |
| " if {[regexp {^ *aro=} $line]} {\n" |
| " set sawaro 1\n" |
| " }\n" |
| " if {$sawaro && [regexp {^[ ]*$} $line]} {\n" |
| " set sawans 0\n" |
| " break\n" |
| " }\n" |
| "\n" |
| " regsub {ans=} $line \"\" line\n" |
| " regsub {aro=} $line \"\" line\n" |
| " set line [string trim $line]\n" |
| "\n" |
| " if {$sawaro} {\n" |
| " set aro_str \"$aro_str $line\"\n" |
| " } else {\n" |
| " set ans_str \"$ans_str $line\"\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " regsub -all { *} $ans_str \" \" ans_str\n" |
| " regsub -all { *} $aro_str \" \" aro_str\n" |
| "\n" |
| " set ans_str [string trim $ans_str]\n" |
| " set aro_str [string trim $aro_str]\n" |
| " set query_ans_list [split $ans_str]\n" |
| " set query_aro_list [split $aro_str]\n" |
| "\n" |
| " foreach item $query_ans_list {\n" |
| " if {[regexp {^[ ]*$} $item]} {\n" |
| " continue\n" |
| " }\n" |
| " set query_ans($item) 1\n" |
| " }\n" |
| " foreach item $query_aro_list {\n" |
| " if {[regexp {^[ ]*$} $item]} {\n" |
| " continue\n" |
| " }\n" |
| " set query_aro($item) 1\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc in_debug_mode {} {\n" |
| " global menu_var\n" |
| " if {![info exists menu_var(debug_gui)]} {\n" |
| " return 0\n" |
| " }\n" |
| " return $menu_var(debug_gui)\n" |
| "}\n" |
| "\n" |
| "# Menubar utilities:\n" |
| "proc menus_state {state} {\n" |
| " global menu_b\n" |
| "\n" |
| " foreach case [array names menu_b] {\n" |
| " set menu_button $menu_b($case)\n" |
| " if {![winfo exists $menu_button]} {\n" |
| " continue\n" |
| " }\n" |
| " $menu_button configure -state $state\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc menus_enable {} {\n" |
| " global menus_disabled\n" |
| "\n" |
| " menus_state \"normal\"\n" |
| " set menus_disabled 0\n" |
| "}\n" |
| "\n" |
| "proc menus_disable {} {\n" |
| " global menus_disabled\n" |
| "\n" |
| " set menus_disabled 1\n" |
| " menus_state \"disabled\"\n" |
| "}\n" |
| "\n" |
| "# Entry box utilities:\n" |
| "proc entry_state {x state} {\n" |
| " global entry_box entry_label entry_ok entry_help entry_skip entry_browse\n" |
| " global old_labels\n" |
| " if {$x == \"all\"} {\n" |
| " if {!$old_labels} {\n" |
| " $entry_label configure -state $state\n" |
| " }\n" |
| " $entry_box configure -state $state\n" |
| " $entry_ok configure -state $state\n" |
| " $entry_skip configure -state $state\n" |
| " $entry_help configure -state $state\n" |
| " $entry_browse configure -state $state\n" |
| " } elseif {$x == \"label\"} {\n" |
| " if {!$old_labels} {\n" |
| " $entry_label configure -state $state\n" |
| " }\n" |
| " } elseif {$x == \"box\"} {\n" |
| " $entry_box configure -state $state\n" |
| " } elseif {$x == \"ok\"} {\n" |
| " $entry_ok configure -state $state\n" |
| " } elseif {$x == \"skip\"} {\n" |
| " $entry_skip configure -state $state\n" |
| " } elseif {$x == \"help\"} {\n" |
| " $entry_help configure -state $state\n" |
| " } elseif {$x == \"browse\"} {\n" |
| " $entry_browse configure -state $state\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc entry_enable {{x \"all\"}} {\n" |
| " entry_state $x normal\n" |
| "}\n" |
| "\n" |
| "proc entry_disable {{x \"all\"}} {\n" |
| " entry_state $x disabled\n" |
| "}\n" |
| "\n" |
| "proc entry_browse_button {{show 1}} {\n" |
| " global entry_browse\n" |
| " if {$show} {\n" |
| " pack $entry_browse -side left\n" |
| " } else {\n" |
| " pack forget $entry_browse\n" |
| " }\n" |
| "}\n" |
| "proc entry_focus {} {\n" |
| " global entry_box\n" |
| " focus $entry_box\n" |
| "}\n" |
| "proc entry_select {} {\n" |
| " global entry_box\n" |
| " $entry_box selection range 0 end\n" |
| "}\n" |
| "proc entry_get {} {\n" |
| " global entry_box\n" |
| " return [$entry_box get]\n" |
| "}\n" |
| "proc entry_insert {str} {\n" |
| " global entry_box\n" |
| " entry_delete\n" |
| " $entry_box insert end $str\n" |
| " $entry_box icursor end\n" |
| "}\n" |
| "proc entry_delete {} {\n" |
| " global entry_box\n" |
| " $entry_box delete 0 end\n" |
| "}\n" |
| "\n" |
| "\n" |
| "# Utilities for remote control and updating vars.\n" |
| "\n" |
| "proc push_new_value {item name new {query 1}} {\n" |
| " global menu_var always_update remote_output query_output\n" |
| " global query_result_list\n" |
| "\n" |
| " set debug [in_debug_mode]\n" |
| "\n" |
| " set getout 0\n" |
| " set print_getout 0;\n" |
| "\n" |
| " set do_query_all 0\n" |
| "\n" |
| " set newnew \"\"\n" |
| " if {$item == \"disconnect\"} {\n" |
| " set newnew \"N/A\"\n" |
| " set do_query_all 1\n" |
| " } elseif {$always_update} {\n" |
| " set do_query_all 1\n" |
| " }\n" |
| "\n" |
| " if {$item == \"remote-cmd\"} {\n" |
| " # kludge for arbitrary remote command:\n" |
| " if {[regexp {^Q:} $new]} {\n" |
| " # extra kludge for Q:var to mean -Q var\n" |
| " regsub {^Q:} $new \"\" new\n" |
| " set qonly 1\n" |
| " } else {\n" |
| " set qonly 0\n" |
| " }\n" |
| " # need to extract item from new:\n" |
| " set qtmp $new\n" |
| " regsub {:.*$} $qtmp \"\" qtmp\n" |
| " if {$qonly} {\n" |
| " set rargs [list \"-Q\" \"$qtmp\"]\n" |
| " set print_getout 1\n" |
| " set qargs \"\"\n" |
| " } else {\n" |
| " set rargs [list \"-R\" \"$new\"]\n" |
| " set qargs \"\"\n" |
| " }\n" |
| " set getout 1\n" |
| "\n" |
| " } elseif {[value_is_string $item]} {\n" |
| " # string var:\n" |
| " set rargs [list \"-R\" \"$name:$new\"]\n" |
| " set qargs [list \"-Q\" \"$name\"]\n" |
| " } else {\n" |
| " # boolean var:\n" |
| " set rargs [list \"-R\" \"$name\"]\n" |
| " set qargs [list \"-Q\" \"$name\"]\n" |
| " }\n" |
| "\n" |
| " if {! $query && ! $always_update} {\n" |
| " set getout 1\n" |
| " } elseif {$item == \"noremote\"} {\n" |
| " set getout 1\n" |
| " } elseif {[is_action $item] && ![opt_match Q $item] && $rargs != \"\"} {\n" |
| " set getout 1\n" |
| " } elseif {[regexp {^(sid|id)$} $item] && ![regexp {^0x} $new]} {\n" |
| " set getout 1\n" |
| " }\n" |
| "\n" |
| " set remote_output \"\"\n" |
| " set query_output \"\"\n" |
| "\n" |
| " if {!$debug} {\n" |
| " if [regexp {passwd} $rargs] {\n" |
| " append_text \"x11vnc ...\"\n" |
| " } else {\n" |
| " append_text \"x11vnc $rargs ...\"\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " if {$getout} {\n" |
| " set remote_output [run_remote_cmd $rargs]\n" |
| " if {$print_getout} {\n" |
| " append_text \"\\t$remote_output\"\n" |
| " }\n" |
| " append_text \"\\n\"\n" |
| " return\n" |
| " }\n" |
| "\n" |
| " if {$do_query_all} {\n" |
| " set all [all_query_vars]\n" |
| " set qargs [list \"-Q\" $all]\n" |
| "\n" |
| " global last_query_all_time\n" |
| " set last_query_all_time [clock seconds]\n" |
| " }\n" |
| "\n" |
| " set rqargs [concat $rargs $qargs]\n" |
| "\n" |
| " set query [run_remote_cmd $rqargs]\n" |
| " set query_output $query\n" |
| "\n" |
| " set query_result_list \"\"\n" |
| "\n" |
| " if {$newnew != \"\"} {\n" |
| " set new $newnew\n" |
| " }\n" |
| "\n" |
| " if {![see_if_ok $query $item \"$name:$new\"]} {\n" |
| " # failed\n" |
| " if {[regexp {^a..=} $query]} {\n" |
| " # but some result came back\n" |
| " # synchronize everything with a 2nd call.\n" |
| " set query_output [query_all 1]\n" |
| " } else {\n" |
| " # server may be dead\n" |
| " if {$item != \"ping\" && $item != \"attach\"} {\n" |
| " try_connect\n" |
| " }\n" |
| " }\n" |
| " } else {\n" |
| " # succeeded\n" |
| " # synchronize this variable (or variables)\n" |
| " # for a speedup used the list parsed by see_if_ok.\n" |
| " update_menu_vars \"USE_LIST\"\n" |
| "\n" |
| " if {$do_query_all} {\n" |
| " global all_settings\n" |
| " set all_settings $query\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc set_kmbc_str {} {\n" |
| " global vl_bk vl_bm vl_bb vl_bc vl_bf vr_bk vr_bm vr_bb vr_bc vr_bf\n" |
| "\n" |
| " set str \"\"\n" |
| " if {$vl_bk} {\n" |
| " append str \"K\"\n" |
| " }\n" |
| " if {$vl_bm} {\n" |
| " append str \"M\"\n" |
| " }\n" |
| " if {$vl_bb} {\n" |
| " append str \"B\"\n" |
| " }\n" |
| " if {$vl_bc} {\n" |
| " append str \"C\"\n" |
| " }\n" |
| " if {$vl_bf} {\n" |
| " append str \"F\"\n" |
| " }\n" |
| " if {$vr_bk || $vr_bm || $vr_bb || $vr_bc || $vr_bf} {\n" |
| " append str \",\"\n" |
| " }\n" |
| " if {$vr_bk} {\n" |
| " append str \"K\"\n" |
| " }\n" |
| " if {$vr_bm} {\n" |
| " append str \"M\"\n" |
| " }\n" |
| " if {$vr_bb} {\n" |
| " append str \"B\"\n" |
| " }\n" |
| " if {$vr_bc} {\n" |
| " append str \"C\"\n" |
| " }\n" |
| " if {$vr_bf} {\n" |
| " append str \"F\"\n" |
| " }\n" |
| " entry_insert $str\n" |
| "}\n" |
| "\n" |
| "proc insert_input_window {} {\n" |
| " global text_area cleanup_window\n" |
| " global ffont menu_var\n" |
| " global vl_bk vl_bm vl_bb vl_bc vl_bf vr_bk vr_bm vr_bb vr_bc vr_bf\n" |
| "\n" |
| " append_text \"\\nUse these checkboxes to set the input permissions, \"\n" |
| " append_text \"or type in the \\\"KMBCF...\\\"\\n\"\n" |
| " append_text \"-input string manually. Then press \\\"OK\\\" or \\\"Cancel\\\".\\n\"\n" |
| " append_text \"(note: an empty setting means use the default behavior, \"\n" |
| " append_text \"see viewonly)\\n\\n\"\n" |
| " set w \"$text_area.wk_f\"\n" |
| " catch {destroy $w}\n" |
| " frame $w -bd 1 -relief ridge -cursor {top_left_arrow}\n" |
| " set fl $w.fl\n" |
| " frame $fl\n" |
| " set fr $w.fr\n" |
| " frame $fr\n" |
| " label $fl.l -font $ffont -text \"Normal clients: \"\n" |
| " checkbutton $fl.bk -pady 1 -font $ffont -anchor w -variable vl_bk \\\n" |
| " -pady 1 -command set_kmbc_str -text \"Keystrokes\" \n" |
| " checkbutton $fl.bm -font $ffont -anchor w -variable vl_bm \\\n" |
| " -pady 1 -command set_kmbc_str -text \"Mouse-Motion\" \n" |
| " checkbutton $fl.bb -font $ffont -anchor w -variable vl_bb \\\n" |
| " -pady 1 -command set_kmbc_str -text \"Button-Click\"\n" |
| " checkbutton $fl.bc -font $ffont -anchor w -variable vl_bc \\\n" |
| " -pady 1 -command set_kmbc_str -text \"Clipboard-Input\"\n" |
| " checkbutton $fl.bf -font $ffont -anchor w -variable vl_bf \\\n" |
| " -pady 1 -command set_kmbc_str -text \"Files\"\n" |
| " label $fr.l -pady 1 -font $ffont -text \"View-Only clients:\"\n" |
| " checkbutton $fr.bk -font $ffont -anchor w -variable vr_bk \\\n" |
| " -pady 1 -command set_kmbc_str -text \"Keystrokes\" \n" |
| " checkbutton $fr.bm -font $ffont -anchor w -variable vr_bm \\\n" |
| " -pady 1 -command set_kmbc_str -text \"Mouse-Motion\" \n" |
| " checkbutton $fr.bb -font $ffont -anchor w -variable vr_bb \\\n" |
| " -pady 1 -command set_kmbc_str -text \"Button-Click\"\n" |
| " checkbutton $fr.bc -font $ffont -anchor w -variable vr_bc \\\n" |
| " -pady 1 -command set_kmbc_str -text \"Clipboard-Input\"\n" |
| " checkbutton $fr.bf -font $ffont -anchor w -variable vr_bf \\\n" |
| " -pady 1 -command set_kmbc_str -text \"Files\"\n" |
| "\n" |
| " if {[info exists menu_var(input)]} {\n" |
| " set input_str $menu_var(input)\n" |
| " } else {\n" |
| " set input_str \"\"\n" |
| " }\n" |
| "\n" |
| " if {[regexp {(.*),(.*)} $input_str match normal viewonly]} {\n" |
| " ;\n" |
| " } else {\n" |
| " set normal $input_str\n" |
| " set viewonly \"\"\n" |
| " }\n" |
| " set vl_bk 0\n" |
| " set vl_bm 0\n" |
| " set vl_bb 0\n" |
| " set vl_bc 0\n" |
| " set vl_bf 0\n" |
| "\n" |
| " set vr_bk 0\n" |
| " set vr_bm 0\n" |
| " set vr_bb 0\n" |
| " set vr_bc 0\n" |
| " set vr_bf 0\n" |
| "\n" |
| " if {[regexp -nocase {K} $normal]} {\n" |
| " set vl_bk 1\n" |
| " }\n" |
| " if {[regexp -nocase {M} $normal]} {\n" |
| " set vl_bm 1\n" |
| " }\n" |
| " if {[regexp -nocase {B} $normal]} {\n" |
| " set vl_bb 1\n" |
| " }\n" |
| " if {[regexp -nocase {C} $normal]} {\n" |
| " set vl_bc 1\n" |
| " }\n" |
| " if {[regexp -nocase {F} $normal]} {\n" |
| " set vl_bf 1\n" |
| " }\n" |
| " if {[regexp -nocase {K} $viewonly]} {\n" |
| " set vr_bk 1\n" |
| " }\n" |
| " if {[regexp -nocase {M} $viewonly]} {\n" |
| " set vr_bm 1\n" |
| " }\n" |
| " if {[regexp -nocase {B} $viewonly]} {\n" |
| " set vr_bb 1\n" |
| " }\n" |
| " if {[regexp -nocase {C} $viewonly]} {\n" |
| " set vr_bc 1\n" |
| " }\n" |
| " if {[regexp -nocase {F} $viewonly]} {\n" |
| " set vr_bf 1\n" |
| " }\n" |
| "\n" |
| " pack $fl.l $fl.bk $fl.bm $fl.bb $fl.bc $fl.bf -side top -fill x\n" |
| " pack $fr.l $fr.bk $fr.bm $fr.bb $fr.bc $fr.bf -side top -fill x\n" |
| " pack $fl $fr -side left\n" |
| " update\n" |
| " update idletasks\n" |
| " $text_area window create end -window $w\n" |
| " $text_area see end\n" |
| " $text_area insert end \"\\n\"\n" |
| "# $text_area insert end \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n" |
| "\n" |
| " set cleanup_window $w\n" |
| "}\n" |
| "\n" |
| "proc set_ca_str {w} {\n" |
| " global ca_bk ca_bm ca_bb ca_bc ca_bf ca_di\n" |
| "\n" |
| " if {$ca_di} {\n" |
| " entry_insert \"disconnect\"\n" |
| " $w.bk configure -state disabled\n" |
| " $w.bm configure -state disabled\n" |
| " $w.bb configure -state disabled\n" |
| " $w.bc configure -state disabled\n" |
| " $w.bf configure -state disabled\n" |
| " return\n" |
| " }\n" |
| "\n" |
| " $w.bk configure -state normal\n" |
| " $w.bm configure -state normal\n" |
| " $w.bb configure -state normal\n" |
| " $w.bc configure -state normal\n" |
| " $w.bf configure -state normal\n" |
| "\n" |
| " set str \"\"\n" |
| " if {$ca_bk} {\n" |
| " append str \"K\"\n" |
| " }\n" |
| " if {$ca_bm} {\n" |
| " append str \"M\"\n" |
| " }\n" |
| " if {$ca_bb} {\n" |
| " append str \"B\"\n" |
| " }\n" |
| " if {$ca_bc} {\n" |
| " append str \"C\"\n" |
| " }\n" |
| " if {$ca_bf} {\n" |
| " append str \"F\"\n" |
| " }\n" |
| " entry_insert $str\n" |
| "}\n" |
| "\n" |
| "proc insert_client_action_window {input} {\n" |
| " global text_area cleanup_window\n" |
| " global ffont menu_var\n" |
| " global ca_bk ca_bm ca_bb ca_bc ca_bf ca_di\n" |
| "\n" |
| " append_text \"\\nUse these checkboxes to set the input permissions \"\n" |
| " append_text \"for this client\\n-OR- whether to disconnect it instead. \"\n" |
| " append_text \"Then press \\\"OK\\\" or \\\"Cancel\\\".\\n\\n\"\n" |
| " set w \"$text_area.ca_f\"\n" |
| " catch {destroy $w}\n" |
| " frame $w -bd 1 -relief ridge -cursor {top_left_arrow}\n" |
| " checkbutton $w.di -pady 1 -font $ffont -anchor w -variable ca_di \\\n" |
| " -pady 1 -command \"set_ca_str $w\" -text \"Disconnect \" \n" |
| " checkbutton $w.bk -font $ffont -anchor w -variable ca_bk \\\n" |
| " -pady 1 -command \"set_ca_str $w\" -text \"Keystrokes\" \n" |
| " checkbutton $w.bm -font $ffont -anchor w -variable ca_bm \\\n" |
| " -pady 1 -command \"set_ca_str $w\" -text \"Mouse-Motion\" \n" |
| " checkbutton $w.bb -font $ffont -anchor w -variable ca_bb \\\n" |
| " -pady 1 -command \"set_ca_str $w\" -text \"Button-Click\"\n" |
| " checkbutton $w.bc -font $ffont -anchor w -variable ca_bc \\\n" |
| " -pady 1 -command \"set_ca_str $w\" -text \"Clipboard\"\n" |
| " checkbutton $w.bf -font $ffont -anchor w -variable ca_bf \\\n" |
| " -pady 1 -command \"set_ca_str $w\" -text \"Files\"\n" |
| "\n" |
| " set ca_di 0\n" |
| " set ca_bk 0\n" |
| " set ca_bm 0\n" |
| " set ca_bb 0\n" |
| " set ca_bf 0\n" |
| " set ca_bc 0\n" |
| "\n" |
| " if {[regexp -nocase {K} $input]} {\n" |
| " set ca_bk 1\n" |
| " }\n" |
| " if {[regexp -nocase {M} $input]} {\n" |
| " set ca_bm 1\n" |
| " }\n" |
| " if {[regexp -nocase {B} $input]} {\n" |
| " set ca_bb 1\n" |
| " }\n" |
| " if {[regexp -nocase {C} $input]} {\n" |
| " set ca_bc 1\n" |
| " }\n" |
| " if {[regexp -nocase {F} $input]} {\n" |
| " set ca_bf 1\n" |
| " }\n" |
| "\n" |
| " pack $w.di $w.bk $w.bm $w.bb $w.bc $w.bf -side left\n" |
| " update\n" |
| " update idletasks\n" |
| " $text_area window create end -window $w\n" |
| " $text_area see end\n" |
| " $text_area insert end \"\\n\"\n" |
| "\n" |
| " set cleanup_window $w\n" |
| "}\n" |
| "\n" |
| "proc cleanup_text_window {} {\n" |
| " global cleanup_window\n" |
| " if {[info exists cleanup_window]} {\n" |
| " catch {destroy $cleanup_window}\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "# For updating a string variable. Also used for simple OK/Cancel dialogs\n" |
| "# with entry = 0.\n" |
| "proc entry_dialog {item {entry 1}} {\n" |
| " global menu_var entry_str entry_set entry_dialog_item\n" |
| " global unset_str connected_to_x11vnc entry_box\n" |
| "\n" |
| " set entry_str \"Set $item\"\n" |
| " set entry_set 0\n" |
| " set entry_dialog_item $item\n" |
| "\n" |
| " entry_enable\n" |
| " menus_disable\n" |
| "\n" |
| " if {$item == \"passwd\" || $item == \"viewpasswd\"} {\n" |
| " $entry_box configure -show \"*\"\n" |
| " }\n" |
| "\n" |
| " if {$entry} {\n" |
| " entry_insert \"\"\n" |
| " if {[info exists menu_var($item)] &&\n" |
| " $menu_var($item) != $unset_str} {\n" |
| " entry_insert $menu_var($item)\n" |
| " entry_select\n" |
| " }\n" |
| "\n" |
| " if {[is_browse $item]} {\n" |
| " entry_browse_button\n" |
| " }\n" |
| " set_info \"Set parameter in entry box, \"\n" |
| " entry_focus\n" |
| " } else {\n" |
| " entry_disable box\n" |
| " }\n" |
| "\n" |
| " set clean_text_window 0;\n" |
| "\n" |
| " if {$item == \"input\"} {\n" |
| " insert_input_window\n" |
| " set clean_text_window 1\n" |
| " }\n" |
| "\n" |
| " update\n" |
| "\n" |
| " # wait for user reply:\n" |
| " vwait entry_set\n" |
| "\n" |
| " set rc $entry_set\n" |
| " set entry_set 0\n" |
| "\n" |
| " set value [entry_get]\n" |
| " update\n" |
| "\n" |
| " entry_browse_button 0\n" |
| " set entry_str \"Set... :\"\n" |
| "\n" |
| " entry_delete\n" |
| " entry_disable\n" |
| " menus_enable\n" |
| "\n" |
| " if {$clean_text_window} {\n" |
| " cleanup_text_window;\n" |
| " }\n" |
| "\n" |
| " update\n" |
| "\n" |
| " if {! $entry} {\n" |
| " ;\n" |
| " } elseif {$rc} {\n" |
| " set menu_var($item) $value\n" |
| " } else {\n" |
| " if {[in_debug_mode]} {\n" |
| " append_text \"skipped setting $item\\n\"\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " $entry_box configure -show \"\"\n" |
| "\n" |
| " return $rc\n" |
| "}\n" |
| "\n" |
| "proc warning_dialog {msg {item \"gui\"} } {\n" |
| " append_text $msg\n" |
| " # just reuse the entry widgets for a yes/no dialog\n" |
| " return [entry_dialog $item 0]\n" |
| "}\n" |
| "\n" |
| "# For updating a boolean toggle:\n" |
| "proc check_var {item} {\n" |
| " global menu_var\n" |
| "\n" |
| " set inval $menu_var($item);\n" |
| "\n" |
| " if {$item == \"debug_gui\"} {\n" |
| " return \"\";\n" |
| " }\n" |
| "\n" |
| " set rname $item\n" |
| " if {! $inval} {\n" |
| " if {[regexp {^no} $item]} {\n" |
| " regsub {^no} $rname \"\" rname\n" |
| " } else {\n" |
| " set rname \"no$rname\"\n" |
| " }\n" |
| " }\n" |
| " return $rname\n" |
| "}\n" |
| "\n" |
| "proc see_if_ok {query item expected} {\n" |
| " global query_result_list\n" |
| "\n" |
| " set ok 0\n" |
| " set found \"\"\n" |
| "\n" |
| " set query_result_list [split_query $query]\n" |
| "\n" |
| " foreach q $query_result_list {\n" |
| " # XXX following will crash if $item is not a good regexp\n" |
| " # need to protect it \\Q$item\\E style...\n" |
| "# if {[regexp \"^$item:\" $q]} {\n" |
| "# set found $q\n" |
| "# }\n" |
| " if {[string first \"$item:\" $q] == 0} {\n" |
| " set found $q\n" |
| " }\n" |
| " if {$q == $expected} {\n" |
| " set ok 1\n" |
| " if {$found != \"\"} {\n" |
| " break;\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| " if {$found == \"\"} {\n" |
| " set msg $query\n" |
| " regsub {^a..=} $msg {} msg\n" |
| " if {[string length $msg] > 60} {\n" |
| " set msg [string range $msg 0 60]\n" |
| " }\n" |
| " } else {\n" |
| " set msg $found\n" |
| " }\n" |
| " if {!$ok && $found != \"\"} {\n" |
| " # check for floating point match:\n" |
| " set v1 \"\"\n" |
| " set v2 \"\"\n" |
| " regexp {:([0-9.][0-9.]*)$} $found m0 v1\n" |
| " regexp {:([0-9.][0-9.]*)$} $expected m0 v2\n" |
| " if {$v1 != \"\" && $v2 != \"\"} {\n" |
| " set diff \"\"\n" |
| " catch {set diff [expr \"$v1 - $v2\"]}\n" |
| " if {$diff != \"\"} {\n" |
| " if {$diff < 0} {\n" |
| " set diff [expr \"0.0 - $diff\"]\n" |
| " }\n" |
| " if {$diff < 0.00001} {\n" |
| " set ok 1\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| " if {$ok} {\n" |
| " append_text \"\\tSet OK ($msg)\\n\"\n" |
| " return 1\n" |
| "\n" |
| " } elseif {[opt_match P $item] && [regexp {:(-|\\+)} $expected]} {\n" |
| " # e.g. blackout:+30x30+20+20\n" |
| " append_text \"\\t($msg)\\n\"\n" |
| " return 1\n" |
| " } elseif {[regexp {:[0-9]\\.[0-9]} $expected]} {\n" |
| " append_text \"\\t($msg)\\n\"\n" |
| " return 1\n" |
| " } elseif {$item == \"connect\" || $item == \"disconnect\"\n" |
| " || $item == \"client\" || $item == \"client_input\"} {\n" |
| " append_text \"\\t($msg)\\n\"\n" |
| " return 1\n" |
| " } elseif {$item == \"passwd\" || $item == \"viewpasswd\"} {\n" |
| " append_text \"\\t($msg)\\n\"\n" |
| " return 1\n" |
| " } else {\n" |
| " append_text \"\\t*FAILED* $msg\\n\"\n" |
| " return 0\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc get_default_vars {} {\n" |
| " global default_var env\n" |
| "\n" |
| " set qry [all_query_vars]\n" |
| "\n" |
| " append qry \",vncconnect\"\n" |
| "\n" |
| " set q \"\"\n" |
| " set i 0\n" |
| " set all \"\"\n" |
| " foreach s [split $qry \",\"] {\n" |
| " if {$q != \"\"} {\n" |
| " append q \",\"\n" |
| " }\n" |
| " append q $s\n" |
| " incr i\n" |
| " if {$i > 50} {\n" |
| " set qargs [list \"-QD\" $q]\n" |
| " set a [run_remote_cmd $qargs]\n" |
| " if [info exists env(TKX11VNC_PRINT_ALL_QD)] {\n" |
| " puts $q\n" |
| " puts $a\n" |
| " puts \"---------------\"\n" |
| " }\n" |
| " if {$all != \"\"} {\n" |
| " append all \",\"\n" |
| " }\n" |
| " append all $a\n" |
| " set q \"\"\n" |
| " set i 0\n" |
| " }\n" |
| " }\n" |
| " if {$q != \"\"} {\n" |
| " set qargs [list \"-QD\" $q]\n" |
| " set a [run_remote_cmd $qargs]\n" |
| " if [info exists env(TKX11VNC_PRINT_ALL_QD)] {\n" |
| " puts $q\n" |
| " puts $a\n" |
| " puts \"---------------\"\n" |
| " }\n" |
| " if {$all != \"\"} {\n" |
| " append all \",\"\n" |
| " }\n" |
| " append all $a\n" |
| " }\n" |
| "\n" |
| "# old way, qry too long...\n" |
| "# set qargs [list \"-QD\" $qry]\n" |
| "# set all [run_remote_cmd $qargs]\n" |
| "\n" |
| " if {[regexp {ans=} $all]} {\n" |
| " #append_text \"Retrieved all default settings.\\n\"\n" |
| " } else {\n" |
| " #append_text \"Failed to retrieve default settings.\\n\"\n" |
| " }\n" |
| "\n" |
| " set query_result_list [split_query $all]\n" |
| "\n" |
| " set default_var(gui) \"\"\n" |
| "\n" |
| " foreach piece $query_result_list {\n" |
| " if {[regexp {^([^:][^:]*):(.*)$} $piece m0 item val]} {\n" |
| " if {$val == \"N/A\"} {\n" |
| " if {$item == \"vncconnect\"} {\n" |
| " set val 1\n" |
| " } else {\n" |
| " set val \"\"\n" |
| " }\n" |
| " }\n" |
| " if {$item == \"display\"} {\n" |
| " set val \"\"\n" |
| " } elseif {$item == \"desktop\"} {\n" |
| " set val \"\"\n" |
| " } elseif {$item == \"auth\"} {\n" |
| " set val \"\"\n" |
| " } elseif {$item == \"gui\"} {\n" |
| " continue\n" |
| " } \n" |
| " # some hacks we do here for now..\n" |
| " if {$item == \"cursor\" && $val == \"\"} {\n" |
| " set val \"most\"\n" |
| " } elseif {$item == \"scrollcopyrect\" && $val == \"\"} {\n" |
| " set val \"always\"\n" |
| " } elseif {$item == \"wirecopyrect\" && $val == \"\"} {\n" |
| " set val \"always\"\n" |
| "# } elseif {$item == \"overlay_nocursor\" && $val == 0} {\n" |
| "# set val 1\n" |
| " }\n" |
| "\n" |
| " set default_var($item) $val\n" |
| "#puts \"default: $item -> $val\"\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc tilde_expand {file} {\n" |
| " global env\n" |
| " if {[file exists $file]} {\n" |
| " return $file\n" |
| " }\n" |
| "\n" |
| " set user \"\"\n" |
| " if {[info exists env(USER)]} {\n" |
| " set user $env(USER)\n" |
| " }\n" |
| " if {$user == \"\" && [info exists env(LOGNAME)]} {\n" |
| " set user $env(LOGNAME)\n" |
| " }\n" |
| "\n" |
| " set home \"\"\n" |
| " if {[info exists env(HOME)]} {\n" |
| " set home $env(HOME)\n" |
| " } elseif {$user != \"\"} {\n" |
| " set home \"/home/$user\"\n" |
| " }\n" |
| "\n" |
| " if {[regexp {^~} $file]} {\n" |
| " if {[regexp {^~/} $file]} {\n" |
| " if {$home != \"\"} {\n" |
| " regsub {^~} $file $home file\n" |
| " }\n" |
| " } else {\n" |
| " regsub {^~} $file \"/home/\" file\n" |
| " }\n" |
| " }\n" |
| " return $file\n" |
| "}\n" |
| "\n" |
| "proc insert_cmdline_vars {} {\n" |
| " global env cmd_var menu_var default_var x11vnc_cmdline\n" |
| " if {![info exists x11vnc_cmdline]} {\n" |
| " return\n" |
| " }\n" |
| " if {$x11vnc_cmdline == \"\"} {\n" |
| " return\n" |
| " }\n" |
| " set cmd_var(novar) 1 \n" |
| " set str [string trim $x11vnc_cmdline]\n" |
| "\n" |
| " while {[regexp -- {^-} $str]} {\n" |
| " if {[regexp -- {^--*([^ \\t][^ \\t]*)(.*)$} $str m var rest]} {\n" |
| " set rest [string trim $rest]\n" |
| " set var [string trim $var]\n" |
| " if {[regexp {^\\{\\{([^\\}]*)\\}\\}(.*)} $rest m val rest]} {\n" |
| " set str [string trim $rest]\n" |
| " set cmd_var($var) $val\n" |
| " } else {\n" |
| " set str $rest\n" |
| " set cmd_var($var) \"boolean\"\n" |
| " }\n" |
| " } else {\n" |
| " break\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " if {[info exists cmd_var(rc)]} {\n" |
| " load_settings $cmd_var(rc)\n" |
| " } elseif {[info exists cmd_var(norc)]} {\n" |
| " ;\n" |
| " } else {\n" |
| " set filex [tilde_expand \"~/.x11vncrc\"]\n" |
| " if {[file exists $filex]} {\n" |
| " load_settings $filex\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " foreach var [array names cmd_var] {\n" |
| " if {$var == \"novar\"} {\n" |
| " continue\n" |
| " }\n" |
| " if {[regexp {^[ \\t]*$} $var]} {\n" |
| " continue\n" |
| " }\n" |
| " if {[info exists menu_var($var)]} {\n" |
| " if {$cmd_var($var) == \"boolean\"} {\n" |
| " set menu_var($var) 1\n" |
| " } else {\n" |
| " set menu_var($var) $cmd_var($var)\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc copy_default_vars {} {\n" |
| " global menu_var default_var\n" |
| " foreach item [array names default_var] {\n" |
| " if {[info exists menu_var($item)]} {\n" |
| " if {[info exists default_var($item)]} {\n" |
| " set menu_var($item) $default_var($item)\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| " foreach item [array names menu_var] {\n" |
| " if {[info exists default_var($item)]} {\n" |
| " set menu_var($item) $default_var($item)\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc update_menu_vars {{query \"\"}} {\n" |
| " global all_settings menu_var query_result_list\n" |
| " global x11vnc_icon_mode\n" |
| "\n" |
| " set debug [in_debug_mode]\n" |
| "\n" |
| " if {$query == \"USE_LIST\"} {\n" |
| " ;\n" |
| " } elseif {$query == \"\"} {\n" |
| " set query_result_list [split_query $all_settings]\n" |
| " } else {\n" |
| " set query_result_list [split_query $query]\n" |
| " }\n" |
| "\n" |
| " foreach piece $query_result_list {\n" |
| "#puts stderr \"UMV: $piece\"\n" |
| " if [regexp {icon_mode:0} $piece] {\n" |
| " set x11vnc_icon_mode 0\n" |
| " #puts stderr \"x11vnc_icon_mode: $x11vnc_icon_mode\"\n" |
| " }\n" |
| " if [regexp {icon_mode:1} $piece] {\n" |
| " set x11vnc_icon_mode 1\n" |
| " #puts stderr \"x11vnc_icon_mode: $x11vnc_icon_mode\"\n" |
| " }\n" |
| " # XXX ipv6\n" |
| " if {[regexp {^([^:][^:]*):(.*)$} $piece m0 item val]} {\n" |
| " if {[info exists menu_var($item)]} {\n" |
| " set old $menu_var($item)\n" |
| "#puts stderr \" $old\"\n" |
| " if {$val == \"N/A\"} {\n" |
| " continue\n" |
| " }\n" |
| " set menu_var($item) $val\n" |
| " }\n" |
| " if {$item == \"clients\"} {\n" |
| " update_clients_menu $val\n" |
| " } elseif {$item == \"display\"} {\n" |
| " set_x11_display $val\n" |
| " } elseif {$item == \"vncdisplay\"} {\n" |
| " set_vnc_display $val\n" |
| " } elseif {$item == \"http_url\"} {\n" |
| " set_vnc_url $val\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc load_settings {{file \"\"}} {\n" |
| " global menu_var default_var env\n" |
| "\n" |
| " if {$file == \"\"} {\n" |
| " if {![info exists menu_var(load-settings)]} {\n" |
| " return\n" |
| " }\n" |
| " set file $menu_var(load-settings)\n" |
| " }\n" |
| " if {$file == \"\"} {\n" |
| " return\n" |
| " }\n" |
| "\n" |
| " set fh \"\"\n" |
| " set filex [tilde_expand $file]\n" |
| " catch {set fh [open $filex \"r\"]}\n" |
| "\n" |
| " if {$fh == \"\"} {\n" |
| " append_text \"load_settings: *** failed to open $filex ***\\n\"\n" |
| " return\n" |
| " }\n" |
| " copy_default_vars\n" |
| "\n" |
| " set str \"\"\n" |
| " while {[gets $fh line] > -1} {\n" |
| " regsub -all {\\\\#} $line {__QUOTED_HASH__} line\n" |
| " if {[regexp {^[ \\t]*#} $line]} {\n" |
| " continue\n" |
| " }\n" |
| " for {set i 0} {$i < 5} {incr i} {\n" |
| " regsub {#.*$} $line \"\" line\n" |
| " }\n" |
| " if {[regexp {^[ \\t]*$} $line]} {\n" |
| " continue\n" |
| " }\n" |
| " regsub -all {__QUOTED_HASH__} $line {#} line\n" |
| " if {[regexp {\\\\$} $line]} {\n" |
| " regsub {\\\\$} $line \" \" line\n" |
| " append str \"$line\"\n" |
| " } else {\n" |
| " append str \"$line\\n\"\n" |
| " }\n" |
| " }\n" |
| " close $fh\n" |
| "\n" |
| " set count 0\n" |
| " set parms \"\"\n" |
| "\n" |
| " foreach line [split $str \"\\n\"] {\n" |
| " set line [string trim $line]\n" |
| " regsub {^--*} $line \"\" line\n" |
| " regsub -all {[ \\t][ \\t]*} $line \" \" line\n" |
| " set list [split $line]\n" |
| " set item [lindex $list 0]\n" |
| " set value [lindex $list 1]\n" |
| " if {[regexp {^[ \\t]*$} $item]} {\n" |
| " continue\n" |
| " }\n" |
| " if {$item == \"gui\"} {\n" |
| " continue\n" |
| " }\n" |
| " if {[info exists menu_var($item)]} {\n" |
| " if {[value_is_bool $item]} {\n" |
| " set menu_var($item) 1\n" |
| " incr count\n" |
| " append parms \" -$item\\n\"\n" |
| " } elseif {[value_is_string $item]} {\n" |
| " if {$value != \"\"} {\n" |
| " set menu_var($item) $value\n" |
| " set nitem [get_nitem $item]\n" |
| " append parms \" -$nitem $value\\n\"\n" |
| " incr count\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| " append_text \"loaded $count parameter settings from $filex\"\n" |
| " if {$count > 0} {\n" |
| " append_text \":\\n\"\n" |
| " append_text $parms\n" |
| " } else {\n" |
| " append_text \".\\n\"\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc save_settings {} {\n" |
| " set rc_text [get_settings_rcfile]\n" |
| "\n" |
| " set top \"#\n" |
| "# This file is based on the current x11vnc settings and can be used as\n" |
| "# as a ~/.x11vncrc defaults file. If saved to another filename, these\n" |
| "# settings can be passed to x11vnc at startup via \\\"-rc <filename>\\\".\n" |
| "#\n" |
| "# The rc file comment character is \\\"#\\\". Use \\\"\\\\#\\\" for the literal char.\n" |
| "# You can continue lines using \\\"\\\\\\\" as the last character of a line.\n" |
| "#\n" |
| "# Lines beginning with \\\"#d\\\" indicate the parameter value is at its default\n" |
| "# setting and you probably want to leave it commented out.\n" |
| "#\n" |
| "# Lines beginning with \\\"#?\\\" indicate parameters you probably do not\n" |
| "# want to hardwire to the current setting (uncomment if you want that).\n" |
| "# \n" |
| "# Some parameters are boolean, e.g. -forever, and take no value; while\n" |
| "# the others, e.g. -wait 50, take a string or numerical value.\n" |
| "#\n" |
| "# For booleans, the line will end with comment \\\"default: on\\\" or\n" |
| "# \\\"default: off\\\" indicating the default setting. (Note: often\n" |
| "# \\\"-nofoobar\\\" corresponds to option \\\"-foobar\\\" and the former is\n" |
| "# \\\"the default\\\", e.g. -norepeat).\n" |
| "#\n" |
| "# For string or numerical options, the value \\\"\\\" in a line below\n" |
| "# means the default is unset and you will need to supply some non-empty\n" |
| "# value to use the parameter. For reference, if the default differs\n" |
| "# from your value it placed at the end of the line as a comment.\n" |
| "# \n" |
| "# Feel free to uncomment or comment any of the lines or to change any\n" |
| "# of the values of the parameters. Don't be surprised that most if not\n" |
| "# all of the lines below are commented out (x11vnc has so many parameters,\n" |
| "# most of them will be at their default values).\n" |
| "#-------------------------------------------------------------------------\n" |
| "\n" |
| "\"\n" |
| "\n" |
| " set rc_text \"$top$rc_text\"\n" |
| "\n" |
| " global env save_settings_var save_settings_var_ok\n" |
| " if {[info exists env(HOME)]} {\n" |
| " set save_settings_var \"$env(HOME)/.x11vncrc\"\n" |
| " } else {\n" |
| " set save_settings_var \".x11vncrc\"\n" |
| " }\n" |
| " set save_settings_var_ok 0\n" |
| "\n" |
| " set w [textwin \"save_settings\" \"Save Settings...\" $rc_text \\\n" |
| " \"save_settings_var+Save as:\"]\n" |
| "\n" |
| " tkwait window $w\n" |
| "\n" |
| " if {$save_settings_var_ok == 1} {\n" |
| " set file $save_settings_var\n" |
| " if {$file == \"\"} {\n" |
| " return\n" |
| " }\n" |
| " set file [tilde_expand $file]\n" |
| " append_text \"\\nSaving current settings to $file ...\\n\" \n" |
| " if {[file exists $file]} {\n" |
| " set backup \"${file}~\"\n" |
| " append_text \"Backing up $file -> $backup ...\\n\"\n" |
| " catch {file delete -force $backup}\n" |
| " set emsg \"*** Backup to $backup failed. ***\\n\"\n" |
| " if {![file exists $backup]} {\n" |
| " catch {file copy -force $file $backup}\n" |
| " if {![file exists $backup]} {\n" |
| " append_text $emsg\n" |
| " bell\n" |
| " }\n" |
| " } else {\n" |
| " append_text $emsg\n" |
| " bell\n" |
| " }\n" |
| " }\n" |
| " set fh \"\"\n" |
| " catch {set fh [open $file \"w\"]}\n" |
| " if {$fh != \"\"} {\n" |
| " puts $fh $rc_text\n" |
| " close $fh\n" |
| " if {![file exists $file]} {\n" |
| " append_text \"*** Saving to $file failed. ***\\n\"\n" |
| " bell\n" |
| " } else {\n" |
| " append_text \"Done.\\n\"\n" |
| " }\n" |
| " } else {\n" |
| " append_text \"*** Open of $file failed. ***\\n\"\n" |
| " bell\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc clear_all {} {\n" |
| " global menu_var unset_str\n" |
| "\n" |
| " set debug [in_debug_mode]\n" |
| " \n" |
| " foreach item [array names menu_var] {\n" |
| " if {$item == \"debug_gui\"} {\n" |
| " continue\n" |
| " }\n" |
| " if {[info exists menu_var($item)]} {\n" |
| " if {[is_action $item]} {\n" |
| " set menu_var($item) \"\"\n" |
| " } elseif {[value_is_bool $item]} {\n" |
| " set menu_var($item) 0\n" |
| " } elseif {[value_is_string $item]} {\n" |
| " set menu_var($item) $unset_str\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| " append_text \"Cleared all settings.\\n\"\n" |
| "}\n" |
| "\n" |
| "proc defaults_all {} {\n" |
| " copy_default_vars\n" |
| " append_text \"Reset all variables to default values.\\n\"\n" |
| "}\n" |
| "\n" |
| "proc all_query_vars {} {\n" |
| " global query_ans_list query_aro_list all_settings\n" |
| " global cache_all_query_vars\n" |
| " \n" |
| " if {$cache_all_query_vars != \"\"} {\n" |
| " return $cache_all_query_vars\n" |
| " }\n" |
| "\n" |
| " set qry \"\"\n" |
| " foreach item $query_ans_list {\n" |
| " if {$qry == \"\"} {\n" |
| " set qry $item\n" |
| " } else {\n" |
| " append qry \",$item\"\n" |
| " }\n" |
| " }\n" |
| " foreach item $query_aro_list {\n" |
| " if {$qry == \"\"} {\n" |
| " set qry $item\n" |
| " } else {\n" |
| " append qry \",$item\"\n" |
| " }\n" |
| " }\n" |
| " set cache_all_query_vars $qry\n" |
| "\n" |
| " global env\n" |
| " if [info exists env(TKX11VNC_PRINT_ALL_VARS)] {\n" |
| " puts \"--------------- BEGIN ALL VARS ---------------\"\n" |
| " puts $qry\n" |
| " puts \"--------------- END ALL VARS ---------------\"\n" |
| " }\n" |
| "\n" |
| " return $qry\n" |
| "}\n" |
| "\n" |
| "proc query_all {{quiet 0}} {\n" |
| " global query_ans_list query_aro_list all_settings\n" |
| " global last_query_all_time\n" |
| "\n" |
| " dtime 1\n" |
| " set qry [all_query_vars]\n" |
| "\n" |
| " set qargs [list \"-Q\" $qry]\n" |
| " set all [run_remote_cmd $qargs]\n" |
| "\n" |
| " if {[regexp {ans=} $all]} {\n" |
| " if {! $quiet} {\n" |
| " append_text \"Retrieved all current settings.\\n\"\n" |
| " }\n" |
| " set all_settings $all\n" |
| " update_menu_vars $all\n" |
| " } else {\n" |
| " if {! $quiet} {\n" |
| " append_text \"Failed to retrieve current settings.\\n\"\n" |
| " }\n" |
| " }\n" |
| " set last_query_all_time [clock seconds]\n" |
| " dtime 2\n" |
| " return $all\n" |
| "}\n" |
| "\n" |
| "proc set_info {str} {\n" |
| " global info_str info_label\n" |
| "#set w1 [$info_label cget -width]\n" |
| "#set w2 [winfo width $info_label]\n" |
| "#puts \"set_info: w=$w1 winfo=$w2\"\n" |
| "#append_text \"$str\\n\"\n" |
| " set info_str \"$str\"\n" |
| " update\n" |
| "}\n" |
| "\n" |
| "proc append_text {str} {\n" |
| " global text_area text_area_str\n" |
| "\n" |
| " if {![info exists text_area_str]} {\n" |
| " set text_area_str \"\"\n" |
| " }\n" |
| " append text_area_str $str\n" |
| "\n" |
| " if {![info exists text_area]} {\n" |
| " puts stderr $str\n" |
| " return\n" |
| " }\n" |
| " if {$text_area == \"\"} {\n" |
| " puts stderr $str\n" |
| " return\n" |
| " }\n" |
| " if {![winfo exists $text_area]} {\n" |
| " puts stderr $str\n" |
| " return\n" |
| " }\n" |
| " \n" |
| " $text_area insert end $str\n" |
| " $text_area see end\n" |
| "}\n" |
| "\n" |
| "proc show_all_settings {} {\n" |
| " global all_settings\n" |
| " global client_sock client_tail\n" |
| " global x11vnc_client_file\n" |
| "\n" |
| " set txt \"\\nRead-Write settings:\\n\\n\"\n" |
| " foreach item [split_query $all_settings] {\n" |
| " regsub {:} $item {: } item\n" |
| " append txt \" $item\\n\"\n" |
| " if {[regexp {noremote} $item]} {\n" |
| " append txt \"\\nRead-Only settings:\\n\\n\"\n" |
| " }\n" |
| " }\n" |
| " append txt \"\\nInternal settings:\\n\\n\"\n" |
| " append txt \"x11vnc_client_file: $x11vnc_client_file\\n\"\n" |
| " if {[info exists client_tail]} {\n" |
| " append txt \"client_tail: $client_tail\\n\"\n" |
| " } else {\n" |
| " append txt \"client_tail: unset\\n\"\n" |
| " }\n" |
| " if {[info exists client_sock]} {\n" |
| " append txt \"client_sock: $client_sock\\n\"\n" |
| " } else {\n" |
| " append txt \"client_sock: unset\\n\"\n" |
| " }\n" |
| " set estr \"\"\n" |
| " catch {set estr [exec env | grep -i X11VNC]}\n" |
| " append txt \"$estr\\n\"\n" |
| " textwin \"Settings\" \"All Current Settings\" $txt\n" |
| "}\n" |
| "\n" |
| "proc show_logfile {} {\n" |
| " global menu_var unset_str\n" |
| "\n" |
| " set logfile [tilde_expand $menu_var(logfile)]\n" |
| " \n" |
| " if {$logfile == \"\" || $logfile == $unset_str} {\n" |
| " set txt \"\\nNo logfile was specified at x11vnc startup.\\n\\n\" \n" |
| " } elseif {![file exists $logfile]} {\n" |
| " set txt \"\\nLogfile \\\"$logfile\\\" does not exist.\\n\\n\"\n" |
| " } else {\n" |
| " set fh \"-3\"\n" |
| " set err \"\"\n" |
| " catch {set fh [open $logfile \"r\"]} err\n" |
| " if {$fh == \"-3\"} {\n" |
| " set txt \"\\nError opening \\\"$logfile\\\" $err.\\n\\n\"\n" |
| " } else {\n" |
| " set txt \"\\nLogfile \\\"$logfile\\\" current contents:\\n\"\n" |
| " while {[gets $fh line] > -1} {\n" |
| " append txt \"$line\\n\"\n" |
| " }\n" |
| " close $fh\n" |
| " }\n" |
| " }\n" |
| " textwin \"Logfile\" \"Logfile\" $txt\n" |
| "}\n" |
| "\n" |
| "proc tail_logfile {} {\n" |
| " global menu_var unset_str ffont\n" |
| " set logfile $menu_var(logfile)\n" |
| " \n" |
| " set txt \"\"\n" |
| " if {$logfile == \"\" || $logfile == $unset_str} {\n" |
| " set txt \"\\nNo logfile was specified at x11vnc startup.\\n\\n\" \n" |
| " } elseif {![file exists $logfile]} {\n" |
| " set txt \"\\nLogfile \\\"$logfile\\\" does not exist.\\n\\n\"\n" |
| " } else {\n" |
| " set cmd \"\"\n" |
| " set xterm_cmd \"xterm -sb -fn $ffont -geometry 80x45 -title x11vnc-logfile -e\"\n" |
| " set cmd [split $xterm_cmd]\n" |
| " lappend cmd \"tail\"\n" |
| " lappend cmd \"-3000f\"\n" |
| " lappend cmd $logfile\n" |
| " lappend cmd \"&\"\n" |
| " catch {[eval exec $cmd]}\n" |
| " }\n" |
| " if {$txt != \"\"} {\n" |
| " textwin \"Logfile\" \"Logfile\" $txt\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc set_connected {yesno} {\n" |
| " global connected_to_x11vnc\n" |
| " set orig $connected_to_x11vnc\n" |
| " \n" |
| " if {$yesno == \"yes\"} {\n" |
| " set connected_to_x11vnc 1\n" |
| " } else {\n" |
| " set connected_to_x11vnc 0\n" |
| " no_x11_display\n" |
| " no_vnc_display\n" |
| " }\n" |
| " if {$orig != $connected_to_x11vnc} {\n" |
| " set_widgets\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc detach_from_display {} {\n" |
| " global connected_to_x11vnc reply_xdisplay x11vnc_xdisplay\n" |
| " set str \"Detaching from X display.\"\n" |
| " if {$reply_xdisplay != \"\"} {\n" |
| " set str \"Detaching from $reply_xdisplay.\"\n" |
| " } elseif {$x11vnc_xdisplay != \"\"} {\n" |
| " set str \"Detaching from $x11vnc_xdisplay.\"\n" |
| " }\n" |
| " if {$connected_to_x11vnc} {\n" |
| " append_text \"$str\\n\"\n" |
| " }\n" |
| " set_connected no\n" |
| "}\n" |
| "\n" |
| "proc do_stop_quit {} {\n" |
| " push_new_value \"stop\" \"stop\" 1 0\n" |
| " set_connected no\n" |
| " update\n" |
| " after 250\n" |
| " destroy .\n" |
| "}\n" |
| "\n" |
| "# Menu item is an action:\n" |
| "proc do_action {item} {\n" |
| " global menu_var connected_to_x11vnc beginner_mode\n" |
| "\n" |
| " if {[in_debug_mode]} {\n" |
| " append_text \"action: \\\"$item\\\"\\n\"\n" |
| " }\n" |
| "#puts \"action: \\\"$item\\\"\\n\"\n" |
| "\n" |
| " if {$item == \"ping\"} {\n" |
| " if {$beginner_mode} {\n" |
| " try_connect_and_query_all\n" |
| " } else {\n" |
| " try_connect\n" |
| " }\n" |
| " return\n" |
| " } elseif {$item == \"start\"} {\n" |
| " start_x11vnc\n" |
| " return\n" |
| " } elseif {$item == \"detach\"} {\n" |
| " detach_from_display\n" |
| " return\n" |
| " } elseif {$item == \"attach\"} {\n" |
| " try_connect_and_query_all\n" |
| " return\n" |
| " } elseif {$item == \"update-all\"} {\n" |
| " query_all\n" |
| " return\n" |
| " } elseif {$item == \"clear-all\"} {\n" |
| " clear_all\n" |
| " return\n" |
| " } elseif {$item == \"defaults-all\"} {\n" |
| " defaults_all\n" |
| " return\n" |
| " } elseif {$item == \"save-settings\"} {\n" |
| " save_settings\n" |
| " return\n" |
| " } elseif {$item == \"show-start-cmd\"} {\n" |
| " show_start_cmd\n" |
| " return\n" |
| " } elseif {$item == \"all-settings\"} {\n" |
| " show_all_settings\n" |
| " return\n" |
| " } elseif {$item == \"show-logfile\"} {\n" |
| " show_logfile\n" |
| " return\n" |
| " } elseif {$item == \"tail-logfile\"} {\n" |
| " tail_logfile\n" |
| " return\n" |
| " } elseif {$item == \"Misc-Tuning:\"} {\n" |
| " menu_help \"$item\"\n" |
| " return\n" |
| " } elseif {$item == \"WindowView\"} {\n" |
| " change_view_state\n" |
| " return\n" |
| " } elseif {$item == \"quit\" || $item == \"Quit\"} {\n" |
| " destroy .\n" |
| " exit 0\n" |
| " } elseif {$item == \"stop+quit\"} {\n" |
| " do_stop_quit\n" |
| " }\n" |
| "\n" |
| " if {[value_is_string $item]} {\n" |
| " if {! [entry_dialog $item]} {\n" |
| " return\n" |
| " }\n" |
| " set new $menu_var($item)\n" |
| " set name $item\n" |
| " } else {\n" |
| " set new 1\n" |
| " set name $item\n" |
| " }\n" |
| "\n" |
| " if {$item == \"load-settings\"} {\n" |
| " load_settings\n" |
| " return\n" |
| " }\n" |
| "\n" |
| " if {! $connected_to_x11vnc} {\n" |
| " ;\n" |
| " } elseif {[regexp {^(stop|quit|exit|shutdown)$} $item]} {\n" |
| " # just do -R\n" |
| " append_text \"stopping remote x11vnc server...\\n\"\n" |
| " push_new_value $item $name $new 0\n" |
| " set_connected no\n" |
| " \n" |
| " } elseif {[opt_match Q $item]} {\n" |
| " push_new_value $item $name $new 1\n" |
| " } else {\n" |
| " push_new_value $item $name $new 0\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc ptime {time} {\n" |
| " set usec [lindex [split $time] 0]\n" |
| " set sec [format \"%.3f\" [expr \"$usec / 1000000.0\"]]\n" |
| " puts \"time: $sec secs.\"\n" |
| "}\n" |
| "\n" |
| "proc do_var {item} {\n" |
| " global connected_to_x11vnc item_cascade menu_var\n" |
| "\n" |
| " set debug [in_debug_mode]\n" |
| "\n" |
| " set string 0\n" |
| " if {[is_action $item] || $item == \"WindowView\"} {\n" |
| " # Menu item is action:\n" |
| " if {$debug} {\n" |
| " ptime [time {do_action $item}]\n" |
| " } else {\n" |
| " do_action $item\n" |
| " }\n" |
| " return\n" |
| " }\n" |
| "\n" |
| " if {[value_is_string $item]} {\n" |
| " # Menu item is a string:\n" |
| " if {$item_cascade($item) != \"\"} {\n" |
| " # Cascade sets variable automatically\n" |
| " } else {\n" |
| " # Otherwise Entry box\n" |
| " if {![entry_dialog $item]} {\n" |
| " return\n" |
| " }\n" |
| " }\n" |
| " set new $menu_var($item)\n" |
| " set name $item\n" |
| " } else {\n" |
| " # Menu item is a boolean:\n" |
| " set name [check_var $item]\n" |
| " if {$name == \"\"} {\n" |
| " return\n" |
| " }\n" |
| " set new 1\n" |
| " }\n" |
| " if {$connected_to_x11vnc} {\n" |
| " if {$debug} {\n" |
| " ptime [time {push_new_value $item $name $new 1}]\n" |
| " } else {\n" |
| " push_new_value $item $name $new 1\n" |
| " }\n" |
| "\n" |
| " if {$item == \"http\"} {\n" |
| " global vnc_url\n" |
| " append_text \" URL: $vnc_url\\n\"\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc menu_help {item} {\n" |
| " if ![help_win $item] {\n" |
| " textwin \"nohelp\" \"No help available\" \\\n" |
| " \"Sorry, no help avaiable for \\\"$item\\\"\"\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc opt_match {c item} {\n" |
| " global item_opts\n" |
| " if {[info exists item_opts($item)]} {\n" |
| " if {[regexp \"^\\[A-z\\]*$c\" $item_opts($item)]} {\n" |
| " return 1\n" |
| " }\n" |
| " }\n" |
| " return 0\n" |
| "}\n" |
| "\n" |
| "proc is_action {item} {\n" |
| " return [opt_match A $item]\n" |
| "}\n" |
| "\n" |
| "proc is_gui_internal {item} {\n" |
| " if {$item == \"Properties\"} {\n" |
| " return 1\n" |
| " }\n" |
| " if {$item == \"Tray\"} {\n" |
| " return 1\n" |
| " }\n" |
| " return [opt_match G $item]\n" |
| "}\n" |
| "\n" |
| "proc is_browse {item} {\n" |
| " return [opt_match F $item]\n" |
| "}\n" |
| "\n" |
| "proc value_is_string {item} {\n" |
| " global item_bool\n" |
| " if {![info exists item_bool($item)]} {\n" |
| " return 0\n" |
| " }\n" |
| " if {! $item_bool($item)} {\n" |
| " return 1\n" |
| " } else {\n" |
| " return 0\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc value_is_bool {item} {\n" |
| " global item_bool\n" |
| " if {![info exists item_bool($item)]} {\n" |
| " return 0\n" |
| " }\n" |
| " if {$item_bool($item)} {\n" |
| " return 1\n" |
| " } else {\n" |
| " return 0\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc split_query0 {query} {\n" |
| " # original slower way with regexp/regsub\n" |
| " regsub -all {aro=} $query {ans=} query\n" |
| " set items {}\n" |
| " while {1} {\n" |
| " if {! [regexp {^ans=(.*)$} $query m0 m1]} {\n" |
| " break\n" |
| " }\n" |
| " set item $m1\n" |
| " set m2 \"\"\n" |
| " regexp {,ans=.*$} $item m2\n" |
| " regsub {,ans=.*$} $item \"\" item\n" |
| " if {$item != \"\"} {\n" |
| " lappend items $item\n" |
| " }\n" |
| " set query $m2\n" |
| " regsub {^,} $query \"\" query\n" |
| " }\n" |
| " return $items\n" |
| "}\n" |
| "\n" |
| "proc split_query {query} {\n" |
| " regsub -all {aro=} $query {ans=} query\n" |
| " set items {}\n" |
| " while {1} {\n" |
| " set n [string first \"ans=\" $query]\n" |
| " if {$n < 0} {\n" |
| " break\n" |
| " }\n" |
| " set from [expr $n+4]\n" |
| "\n" |
| " set m [string first \",ans=\" $query]\n" |
| " if {$m < 0} {\n" |
| " set more 0\n" |
| " set item [string range $query $from end]\n" |
| " } else {\n" |
| " set more 1\n" |
| " set to [expr $m-1]\n" |
| " set item [string range $query $from $to]\n" |
| " }\n" |
| " if {$item != \"\"} {\n" |
| " lappend items $item\n" |
| " }\n" |
| " if {$more} {\n" |
| " incr m\n" |
| " set query [string range $query $m end]\n" |
| " } else {\n" |
| " set query \"\"\n" |
| " }\n" |
| " }\n" |
| " return $items\n" |
| "}\n" |
| "\n" |
| "proc set_x11_display {name} {\n" |
| " global x11_display\n" |
| " set x11_display \"x11vnc X display: $name\"\n" |
| " set_name \"tkx11vnc - $name\"\n" |
| "}\n" |
| "proc set_vnc_display {name} {\n" |
| " global vnc_display icon_mode\n" |
| " set vnc_display \"VNC display: $name\"\n" |
| "\n" |
| " if {$icon_mode} {\n" |
| " set_icon_label\n" |
| " }\n" |
| "}\n" |
| "proc set_vnc_url {name} {\n" |
| " global vnc_url\n" |
| " set vnc_url $name\n" |
| "}\n" |
| "proc no_x11_display {} {\n" |
| " set_x11_display \"(*none*)\"\n" |
| " set_name \"tkx11vnc\"\n" |
| "}\n" |
| "proc no_vnc_display {} {\n" |
| " set_vnc_display \"(*none*)\"\n" |
| "}\n" |
| "proc no_vnc_url {} {\n" |
| " set_vnc_url \"(*none*)\"\n" |
| "}\n" |
| "\n" |
| "proc get_vnc_display_number {} {\n" |
| " global vnc_display\n" |
| " if ![info exists vnc_display] {\n" |
| " return \"none\"\n" |
| " }\n" |
| " if {$vnc_display == \"\"} {\n" |
| " return \"none\"\n" |
| " }\n" |
| " set str $vnc_display\n" |
| " regsub {VNC display: *} $str \"\" str\n" |
| " if [regexp {:([0-9][0-9]*)} $str m0 n] {\n" |
| " return $n\n" |
| " }\n" |
| " return \"none\"\n" |
| "}\n" |
| "\n" |
| "proc fetch_displays {} {\n" |
| "\n" |
| " set qargs [list \"-Q\" \"display,vncdisplay\"]\n" |
| " set result [run_remote_cmd $qargs]\n" |
| "\n" |
| " set got_x11 0\n" |
| " set got_vnc 0\n" |
| " set got_url 0\n" |
| "\n" |
| " foreach item [split_query $result] {\n" |
| " if {[regexp {^display:(.*)$} $item m0 m1]} {\n" |
| " set_x11_display $m1\n" |
| " set got_x11 1\n" |
| " } elseif {[regexp {^vncdisplay:(.*)$} $item m0 m1]} {\n" |
| " set_vnc_display $m1\n" |
| " set got_vnc 1\n" |
| " } elseif {[regexp {^http_url:(.*)$} $item m0 m1]} {\n" |
| " set_vnc_url $m1\n" |
| " set got_url 1\n" |
| " }\n" |
| " }\n" |
| " if {! $got_x11} {\n" |
| " no_x11_display\n" |
| " }\n" |
| " if {! $got_vnc} {\n" |
| " no_vnc_display\n" |
| " }\n" |
| " if {! $got_url} {\n" |
| " no_vnc_url\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc client_dialog {client} {\n" |
| " set cid \"\"\n" |
| " set host \"\"\n" |
| " set ip \"\"\n" |
| " global menu_var text_area cleanup_window item_bool\n" |
| "\n" |
| " #<id>:<ip>:<port>:<user>:<unix>:<hostname>:<input>:<loginview>:<time>\n" |
| " append_text \"\\nClient info string:\\n - $client\\n\\n\"\n" |
| " if {[regexp {^(.*):(.*):(.*):(.*):(.*):(.*):(.*):(.*):(.*)$} \\\n" |
| " $client m0 m1 m2 m3 m4 m5 m6 m7 m8 m9]} {\n" |
| " set cid $m1\n" |
| " set ip $m2\n" |
| " set port $m3\n" |
| " set user $m4\n" |
| " set unix $m5\n" |
| " set host $m6\n" |
| " regsub {\\..*$} $host \"\" host\n" |
| " set input $m7\n" |
| " set logvo $m8\n" |
| " set ltime $m9\n" |
| " append_text \"Host: $host, Port: $port, User: $user\"\n" |
| " if {$unix != \"\" && $unix != \"none\"} {\n" |
| " append_text \", Unix: $unix\"\n" |
| " }\n" |
| " append_text \", IP: $ip, Id: $cid\\n\"\n" |
| " append_text \" - originally logged in as: \"\n" |
| " if {$logvo == \"1\" } {\n" |
| " append_text \"View-Only Client\"\n" |
| " } else {\n" |
| " append_text \"Normal Client\"\n" |
| " }\n" |
| " if {$ltime != \"\"} {\n" |
| " set tim [clock format $ltime]\n" |
| " append_text \", $tim\"\n" |
| " }\n" |
| " append_text \"\\n\"\n" |
| " append_text \" - currently allowed input: \"\n" |
| " set sk 0\n" |
| " set sm 0\n" |
| " set sb 0\n" |
| " set sc 0\n" |
| " set sf 0\n" |
| " if {[regexp -nocase {K} $input]} {\n" |
| " append_text \"Keystrokes\"\n" |
| " set sk 1\n" |
| " }\n" |
| " if {[regexp -nocase {M} $input]} {\n" |
| " if {$sk} {\n" |
| " append_text \", \"\n" |
| " }\n" |
| " append_text \"Mouse-Motion\"\n" |
| " set sm 1\n" |
| " }\n" |
| " if {[regexp -nocase {B} $input]} {\n" |
| " if {$sk || $sm} {\n" |
| " append_text \", \"\n" |
| " }\n" |
| " append_text \"Button-Click\"\n" |
| " set sb 1\n" |
| " }\n" |
| " if {[regexp -nocase {C} $input]} {\n" |
| " if {$sk || $sm || $sb} {\n" |
| " append_text \", \"\n" |
| " }\n" |
| " append_text \"Clipboard\"\n" |
| " set sm 1\n" |
| " }\n" |
| " if {[regexp -nocase {F} $input]} {\n" |
| " if {$sk || $sm || $sb || $sf} {\n" |
| " append_text \", \"\n" |
| " }\n" |
| " append_text \"Files\"\n" |
| " set sf 1\n" |
| " }\n" |
| " if {! $sk && ! $sm && ! $sb && ! $sm && ! $sf} {\n" |
| " append_text \"None\"\n" |
| " }\n" |
| " append_text \"\\n\"\n" |
| " }\n" |
| " if {$cid == \"\"} {\n" |
| " append_text \"Invalid client info string: $client\\n\"\n" |
| " return\n" |
| " }\n" |
| "\n" |
| " regsub -all {_} $input \"\" input\n" |
| " set menu_var(client) \"$input\"\n" |
| " set item_bool(client) 0\n" |
| "\n" |
| " insert_client_action_window $input\n" |
| " set rc [entry_dialog client 1]\n" |
| "\n" |
| " cleanup_text_window\n" |
| "\n" |
| " set val $menu_var(client)\n" |
| " #puts \"rc: $rc val: $val\"\n" |
| "\n" |
| " if {! $rc} {\n" |
| " return;\n" |
| " } elseif {[regexp -nocase {(disconnect|close)} $val]} {\n" |
| " disconnect_dialog $client\n" |
| " } else {\n" |
| " regsub -all -nocase {[^KMBCF]} $val \"\" val\n" |
| " set item_bool(client_input) 0\n" |
| " push_new_value \"client_input\" \"client_input\" \"$cid:$val\" 0\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc disconnect_dialog {client} {\n" |
| " set cid \"\"\n" |
| " set host \"\"\n" |
| " set msg \"\\n\"\n" |
| " append msg \"*** Client info string:\\n $client\\n\"\n" |
| " if {[regexp {^(.*):(.*):(.*):(.*):(.*):(.*):(.*):(.*):(.*)$} \\\n" |
| " $client m0 m1 m2 m3 m4 m5 m6 m7 m8 m9]} {\n" |
| " set cid $m1\n" |
| " set ip $m2\n" |
| " set port $m3\n" |
| " set user $m4\n" |
| " set unix $m5\n" |
| " set host $m6\n" |
| " regsub {\\..*$} $host \"\" host\n" |
| " set input $m7\n" |
| " set logvo $m8\n" |
| " set ltime $m9\n" |
| " append_text \"Host: $host, Port: $port, IP: $ip, User: $user\"\n" |
| " if {$unix != \"\" && $unix != \"none\"} {\n" |
| " append_text \", Unix: $unix\"\n" |
| " }\n" |
| " append_text \", Id: $cid\\n\"\n" |
| " }\n" |
| " if {$cid == \"\"} {\n" |
| " append_text \"Invalid client info string: $client\\n\"\n" |
| " return\n" |
| " }\n" |
| " append msg \"*** To *DISCONNECT* this client press \\\"OK\\\" again, otherwise press \\\"Cancel\\\"\\n\"\n" |
| " bell\n" |
| " if {[warning_dialog $msg \"current\"]} {\n" |
| " push_new_value \"disconnect\" \"disconnect\" $cid 1\n" |
| " } else {\n" |
| " append_text \"disconnect cancelled.\\n\"\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc update_clients_and_repost {} {\n" |
| " global item_cascade menu_m menu_b\n" |
| "\n" |
| " append_text \"Refreshing connected clients list... \"\n" |
| " query_all 1\n" |
| " update\n" |
| "\n" |
| " set saw 0\n" |
| " set casc $item_cascade(current)\n" |
| " set last [$casc index end]\n" |
| " for {set i 0} {$i <= $last} {incr i} {\n" |
| " if {[$casc type $i] == \"separator\"} {\n" |
| " continue\n" |
| " }\n" |
| " set name [$casc entrycget $i -label]\n" |
| " if {[regexp {^num-clients} $name]} {\n" |
| " continue\n" |
| " }\n" |
| " if {[regexp {^refresh-list} $name]} {\n" |
| " continue\n" |
| " }\n" |
| " if {! $saw} {\n" |
| " append_text \"\\n\"\n" |
| " }\n" |
| " set saw 1\n" |
| " append_text \"client: $name\\n\"\n" |
| " }\n" |
| " if {! $saw} {\n" |
| " append_text \"done.\\n\"\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc update_clients_menu {list} {\n" |
| " global item_cascade ffont\n" |
| " global saved_clients_str\n" |
| "\n" |
| " if {![info exists saved_clients_str]} {\n" |
| " set saved_clients_str \"\"\n" |
| " }\n" |
| " if {$list == \"INIT\"} {\n" |
| " set list $saved_clients_str\n" |
| " } else {\n" |
| " set saved_clients_str $list\n" |
| " }\n" |
| "\n" |
| " set subm $item_cascade(current);\n" |
| " catch {destroy $subm}\n" |
| " menu $subm -tearoff 0 -font $ffont\n" |
| " $subm add command\n" |
| " $subm add command -label \"refresh-list\" \\\n" |
| " -command \"update_clients_and_repost\"\n" |
| " $subm add separator\n" |
| " set count 0\n" |
| " foreach client [split $list \",\"] {\n" |
| " if {![regexp {^[a-z0-9]*[a-z0-9]:} $client]} {\n" |
| " #append_text \"Skipping client line: \"\n" |
| " #append_text $client\n" |
| " #append_text \"\\n\"\n" |
| " continue\n" |
| " }\n" |
| " regsub -all {[{}()~!$&*|;'\"`{}<>\\[\\]]} $client \"\" client\n" |
| " #'\n" |
| " if {[regexp {^(.*):(.*):(.*):(.*):(.*):(.*):(.*):(.*):(.*)$} \\\n" |
| " $client m0 m1 m2 m3 m4 m5 m6 m7 m8 m9]} {\n" |
| " set id $m1\n" |
| " set user $m4\n" |
| " set unix $m5\n" |
| " set host $m6\n" |
| " regsub {\\..*$} $host \"\" host\n" |
| " set clabel \"$host $id\"\n" |
| " if {$unix != \"\" && $unix != \"none\"} {\n" |
| " set clabel \"$unix@$clabel\"\n" |
| " } elseif {$user != \"unknown-user\"} {\n" |
| " set clabel \"$user@$clabel\"\n" |
| " }\n" |
| " } else {\n" |
| " regsub {:.*$} $client \"\" clabel\n" |
| " }\n" |
| " $subm add command -label \"$clabel\" \\\n" |
| " -command \"client_dialog \\{$client\\}\"\n" |
| " incr count\n" |
| " }\n" |
| " $subm entryconfigure 0 -label \"num-clients: $count\"\n" |
| "}\n" |
| "\n" |
| "proc set_widgets {} {\n" |
| " global connected_to_x11vnc item_case item_menu item_entry menu_m\n" |
| "\n" |
| " foreach item [array names item_case] {\n" |
| " if ![info exists item_case($item)] { continue; }\n" |
| " set case $item_case($item)\n" |
| " if ![info exists item_menu($item)] { continue; }\n" |
| " set menu $item_menu($item)\n" |
| " if ![info exists item_entry($item)] { continue; }\n" |
| " set entry $item_entry($item)\n" |
| " if {$entry < 0} {\n" |
| " # skip case under beginner_mode \n" |
| " continue\n" |
| " }\n" |
| " set type [$menu type $entry]\n" |
| " if {$type == \"separator\" || $type == \"tearoff\"} {\n" |
| " continue\n" |
| " }\n" |
| " if {![winfo exists $menu]} {\n" |
| " continue\n" |
| " }\n" |
| " if {$connected_to_x11vnc} {\n" |
| " if {[active_when_connected $item]} {\n" |
| " $menu entryconfigure $entry -state normal\n" |
| " } else {\n" |
| " $menu entryconfigure $entry -state disabled\n" |
| " }\n" |
| " } else {\n" |
| " if {[active_when_starting $item]} {\n" |
| " $menu entryconfigure $entry -state normal\n" |
| " } else {\n" |
| " $menu entryconfigure $entry -state disabled\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc toggle_simple_gui {} {\n" |
| " global beginner_mode simple_gui_created\n" |
| " global connected_to_x11vnc make_gui_count\n" |
| "\n" |
| " if {$beginner_mode} {\n" |
| " append_text \"\\nSwitching to simple-gui mode.\\n\"\n" |
| " } else {\n" |
| " append_text \"\\nSwitching to power-user gui mode.\\n\"\n" |
| " }\n" |
| "\n" |
| " if {$make_gui_count == 1} {\n" |
| " incr make_gui_count\n" |
| " }\n" |
| " set simple_gui_created 1\n" |
| " make_menu_items\n" |
| " set_widgets\n" |
| " set_internal_help\n" |
| " append_text \"\\n\"\n" |
| "}\n" |
| "\n" |
| "proc little_qs {m} {\n" |
| " global bfont ffont beginner_mode\n" |
| " global helpremote helptext helplabel\n" |
| " global tk_version osname\n" |
| "\n" |
| " if {$tk_version < 8.0} {\n" |
| " return\n" |
| " }\n" |
| " if {$osname == \"Darwin\"} {\n" |
| " return\n" |
| " }\n" |
| "\n" |
| " set n [$m index end]\n" |
| "\n" |
| " for {set i 0} {$i <= $n} {incr i} {\n" |
| " set type [$m type $i]\n" |
| "#puts \"$m - $i - $type\"\n" |
| " if {$type == \"separator\"} {\n" |
| " $m add separator\n" |
| " } elseif {$type == \"tearoff\"} {\n" |
| " continue;\n" |
| " } else {\n" |
| " set label [$m entrycget $i -label]\n" |
| " set str \"\"\n" |
| " if {[info exists helpremote($label)]} {\n" |
| " set str \"(?)\"\n" |
| " } elseif {[info exists helptext($label)]} {\n" |
| " set str \"(?)\"\n" |
| " }\n" |
| " $m add command -label $str \\\n" |
| " -font $ffont \\\n" |
| " -command \"menu_help $label\";\n" |
| "\n" |
| " if {$str == \"\"} {\n" |
| " $m entryconfigure end -state disabled\n" |
| " }\n" |
| " set arg \"$m,$i\"\n" |
| "#puts \"helplabel: $arg -> $label\"\n" |
| " set helplabel($arg) $label\n" |
| " set j [$m index end]\n" |
| " set arg \"$m,$j\"\n" |
| " set helplabel($arg) $label\n" |
| " }\n" |
| " if {$i == 0} {\n" |
| " $m entryconfigure end -columnbreak 1\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " menu_bindings $m\n" |
| "}\n" |
| "\n" |
| "proc make_menu_items {} {\n" |
| " global template \n" |
| " global menu_b menu_m menu_count\n" |
| " global item_opts item_bool item_case item_menu item_entry menu_var unset_str\n" |
| " global item_cascade\n" |
| " global bfont ffont beginner_mode simple_gui_created\n" |
| " global helptext helpremote helplabel\n" |
| "\n" |
| " # some tweaks...\n" |
| " if {![info exists menu_var(deny)]} {\n" |
| " set menu_var(deny) 0\n" |
| " }\n" |
| "\n" |
| " set case \"\";\n" |
| " set L_casc \"\"\n" |
| " set L_casc_count 0\n" |
| " set L_menus [list]\n" |
| "\n" |
| " # Extract the menu items:\n" |
| " foreach line [split $template \"\\n\"] {\n" |
| " if {[regexp {^Row:} $line]} {\n" |
| " continue\n" |
| " }\n" |
| " if {[regexp {^[A-z]} $line]} {\n" |
| " set case [string trim $line]\n" |
| "\n" |
| " if {$simple_gui_created} {\n" |
| " set i0 0\n" |
| " #if {$case == \"Misc\"} { # kludge for simple_gui\n" |
| " # set i0 1\n" |
| " #}\n" |
| " catch {$menu_m($case) delete $i0 end}\n" |
| " }\n" |
| " set menu_count($case) 0\n" |
| " continue;\n" |
| " }\n" |
| "\n" |
| " set item [string trim $line]\n" |
| " regsub -all { *} $item \" \" item\n" |
| " if {$item == \"\"} {\n" |
| " continue;\n" |
| " }\n" |
| " set opts \"\"\n" |
| " if {[regexp {^=} $item]} {\n" |
| " set opts [lindex [split $item] 0]\n" |
| " regsub {^=} $opts \"\" opts\n" |
| " set item [lindex [split $item] 1]\n" |
| " }\n" |
| " if {[regexp {^0} $opts]} {\n" |
| " continue;\n" |
| " }\n" |
| " if {[regexp {:$} $item]} {\n" |
| " set bool 0\n" |
| " } else {\n" |
| " set bool 1\n" |
| " }\n" |
| " regsub {:$} $item {} item\n" |
| "\n" |
| " if {$item == \"LOFF\"} {\n" |
| " set L_casc \"\"\n" |
| " continue\n" |
| " }\n" |
| "\n" |
| " if {$item == \"-- D\"} {\n" |
| " set beginner_sep 1\n" |
| " set item \"--\"\n" |
| " } else {\n" |
| " set beginner_sep 0\n" |
| " }\n" |
| "\n" |
| " set item_opts($item) $opts\n" |
| " set item_case($item) $case\n" |
| " set item_bool($item) $bool\n" |
| " set item_cascade($item) \"\"\n" |
| "\n" |
| " if {$L_casc == \"\"} {\n" |
| " set item_entry($item) $menu_count($case)\n" |
| " set m $menu_m($case)\n" |
| " } else {\n" |
| " # hack for cascades for crowded menus. See =GAL opts.\n" |
| " set item_entry($item) $L_casc_count\n" |
| " set m $L_casc\n" |
| " }\n" |
| "\n" |
| " set mvar 0 \n" |
| "\n" |
| " if {$beginner_mode && ! $beginner_sep && ![opt_match D $item]} {\n" |
| " set item_entry($item) \"-1\"\n" |
| " continue;\n" |
| " }\n" |
| "\n" |
| " set item_menu($item) $m\n" |
| "\n" |
| " if {0} { puts \"ITEM: $item\\t- $opts\\t- $case\\t- \\\n" |
| " $bool\\t- $menu_count($case)\" }\n" |
| "\n" |
| " # Create the menu items, its variables, etc., etc.\n" |
| "\n" |
| " if {$item == \"--\"} {\n" |
| " $m add separator\n" |
| "\n" |
| " } elseif {$item == \"Quit\"} {\n" |
| " # Quit item must shut us down:\n" |
| " $m add command -label \"$item\" -underline 0 \\\n" |
| " -font $ffont \\\n" |
| " -command {destroy .; exit 0}\n" |
| "\n" |
| " } elseif {$case == \"Help\"} {\n" |
| " # Help is simple help:\n" |
| " $m add command -label \"$item\" \\\n" |
| " -font $ffont \\\n" |
| " -command \"menu_help $item\"\n" |
| "\n" |
| " } elseif {[opt_match L $item]} {\n" |
| " # Special sub-menu cascade (=GAL ends with LOFF)\n" |
| " set subm $m.casc_L$menu_count($case)\n" |
| " catch {destroy $subm}\n" |
| " menu $subm -tearoff 0 -font $ffont\n" |
| " set item_cascade($item) $subm\n" |
| " $m add cascade -label \"$item\" \\\n" |
| " -font $ffont \\\n" |
| " -menu $subm\n" |
| " set L_casc $subm\n" |
| " set L_casc_count -1\n" |
| " lappend L_menus $L_casc\n" |
| "\n" |
| " } elseif {$item == \"current\"} {\n" |
| " # Current clients cascade\n" |
| " set subm $m.current_cascade\n" |
| " catch {destroy $subm}\n" |
| " set item_cascade($item) $subm\n" |
| " update_clients_menu \"INIT\"\n" |
| " $m add cascade -label \"$item\" \\\n" |
| " -font $ffont \\\n" |
| " -menu $subm\n" |
| "\n" |
| " } elseif {[is_action $item]} {\n" |
| " # Action\n" |
| " $m add command -label \"$item\" \\\n" |
| " -font $ffont \\\n" |
| " -command \"do_var $item\"\n" |
| " if {![info exists menu_var($item)]} {\n" |
| " set menu_var($item) \"\"; # for convenience\n" |
| " }\n" |
| "\n" |
| " } elseif {! $item_bool($item)} {\n" |
| " # String\n" |
| " if {[regexp -- {-C:(.*)} $item_opts($item) m0 m1]} {\n" |
| " # Radiobutton select\n" |
| " set subm $m.radio_cascade$menu_count($case)\n" |
| " catch {destroy $subm}\n" |
| " menu $subm -tearoff 0 -font $ffont\n" |
| " foreach val [split $m1 \",\"] {\n" |
| " $subm add radiobutton -label \"$val\" \\\n" |
| " -command \"do_var $item\" \\\n" |
| " -value \"$val\" \\\n" |
| " -font $ffont \\\n" |
| " -variable menu_var($item)\n" |
| " }\n" |
| " $m add cascade -label \"$item\" \\\n" |
| " -font $ffont \\\n" |
| " -menu $subm\n" |
| " set item_cascade($item) $subm\n" |
| " } else {\n" |
| " # Arbitrary_string\n" |
| " $m add command -label \"$item\" \\\n" |
| " -font $ffont \\\n" |
| " -command \"do_var $item\"\n" |
| " }\n" |
| " set mvar 1\n" |
| "\n" |
| " } elseif {$item == \"simple-gui\"} {\n" |
| " $m add checkbutton -label \"$item\" \\\n" |
| " -command \"toggle_simple_gui\" \\\n" |
| " -font $ffont \\\n" |
| " -variable beginner_mode\n" |
| " } else {\n" |
| " # Boolean\n" |
| " $m add checkbutton -label \"$item\" \\\n" |
| " -command \"do_var $item\" \\\n" |
| " -font $ffont \\\n" |
| " -variable menu_var($item)\n" |
| " if {![info exists menu_var($item)]} {\n" |
| " set menu_var($item) 0\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " if {$L_casc_count == -1} {\n" |
| " incr menu_count($case)\n" |
| " incr L_casc_count\n" |
| " } elseif {$L_casc != \"\"} {\n" |
| " incr L_casc_count\n" |
| " } else {\n" |
| " incr menu_count($case)\n" |
| " }\n" |
| "\n" |
| " if {$mvar} {\n" |
| " if {![info exists menu_var($item)]} {\n" |
| " set menu_var($item) $unset_str\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " # Now make the little \"(?)\" help buttons\n" |
| " global osname\n" |
| " foreach case [array names menu_m] {\n" |
| " if {$case == \"Help\"} {\n" |
| " continue;\n" |
| " }\n" |
| " little_qs $menu_m($case);\n" |
| " }\n" |
| " foreach m $L_menus {\n" |
| " little_qs $m\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc check_update_vars {} {\n" |
| " global last_query_all_time query_all_freq icon_mode\n" |
| " global connected_to_x11vnc client_tail client_sock\n" |
| "\n" |
| " set now [clock seconds]\n" |
| "\n" |
| " set delay $query_all_freq\n" |
| " if {$client_tail != \"\" && $client_sock == \"\"} {\n" |
| " set delay [expr 2 * $query_all_freq]\n" |
| " }\n" |
| "\n" |
| " if {$connected_to_x11vnc} {\n" |
| " set quiet 0\n" |
| " set refresh [expr \"$last_query_all_time + $delay\"]\n" |
| "\n" |
| " # puts \"menu_posted $now $last_query_all_time\"\n" |
| " # puts \"menu_posted $refresh\"\n" |
| "\n" |
| " if {$now > $refresh} {\n" |
| " append_text \"Refreshing current settings... \"\n" |
| " query_all $quiet\n" |
| " if {$quiet} {\n" |
| " append_text \"done\\n\"\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc menu_posted {} {\n" |
| " check_update_vars\n" |
| "}\n" |
| "\n" |
| "proc props_widgets {state} {\n" |
| " global props_buttons\n" |
| " foreach w $props_buttons {\n" |
| " $w configure -state $state \n" |
| " }\n" |
| " update\n" |
| "}\n" |
| "\n" |
| "proc props_apply {} {\n" |
| " global props_accept props_confirm props_viewonly props_shared \n" |
| " global props_zeroconf props_javaview props_solid\n" |
| " global props_passwd props_viewpasswd\n" |
| " global prop0_accept prop0_confirm prop0_viewonly prop0_shared\n" |
| " global prop0_zeroconf prop0_javaview prop0_solid\n" |
| " global prop0_passwd prop0_viewpasswd\n" |
| " global menu_var\n" |
| " global client_sock\n" |
| "\n" |
| " props_widgets disabled\n" |
| "\n" |
| " set aft 500\n" |
| " if {[info exists client_sock]} {\n" |
| " if {$client_sock != \"\"} {\n" |
| " set aft 150\n" |
| " }\n" |
| " }\n" |
| " set did 0\n" |
| "\n" |
| " set fail 0\n" |
| "\n" |
| " if {$props_confirm != $prop0_confirm} {\n" |
| " if {$did > 0} {after $aft}; incr did\n" |
| " if {$props_confirm} {\n" |
| " push_new_value \"accept\" \"accept\" \"popup\" 1\n" |
| " } else {\n" |
| " push_new_value \"accept\" \"accept\" \"\" 1\n" |
| " }\n" |
| " if {$menu_var(accept) == \"popup\"} {\n" |
| " set props_confirm 1\n" |
| " } elseif {$menu_var(accept) == \"\"} {\n" |
| " set props_confirm 0\n" |
| " }\n" |
| " if {$props_confirm == $prop0_confirm} {incr fail}\n" |
| " set prop0_confirm $props_confirm\n" |
| " }\n" |
| "\n" |
| " if {$props_viewonly != $prop0_viewonly} {\n" |
| " if {$did > 0} {after $aft}; incr did\n" |
| " if {$props_viewonly} {\n" |
| " push_new_value \"viewonly\" \"viewonly\" 1 1\n" |
| " } else {\n" |
| " push_new_value \"viewonly\" \"noviewonly\" 1 1\n" |
| " }\n" |
| " if {$menu_var(viewonly)} {\n" |
| " set props_viewonly 1\n" |
| " } else {\n" |
| " set props_viewonly 0\n" |
| " }\n" |
| " if {$props_viewonly == $prop0_viewonly} {incr fail}\n" |
| " set prop0_viewonly $props_viewonly\n" |
| " }\n" |
| "\n" |
| " if {$props_shared != $prop0_shared} {\n" |
| " if {$did > 0} {after $aft}; incr did\n" |
| " if {$props_shared} {\n" |
| " push_new_value \"shared\" \"shared\" 1 1\n" |
| " } else {\n" |
| " push_new_value \"shared\" \"noshared\" 1 1\n" |
| " }\n" |
| " if {$menu_var(shared)} {\n" |
| " set props_shared 1\n" |
| " } else {\n" |
| " set props_shared 0\n" |
| " }\n" |
| " if {$props_shared == $prop0_shared} {incr fail}\n" |
| " set prop0_shared $props_shared\n" |
| " }\n" |
| "\n" |
| " if {$props_zeroconf != $prop0_zeroconf} {\n" |
| " if {$did > 0} {after $aft}; incr did\n" |
| " if {$props_zeroconf} {\n" |
| " push_new_value \"zeroconf\" \"zeroconf\" 1 1\n" |
| " } else {\n" |
| " push_new_value \"zeroconf\" \"nozeroconf\" 1 1\n" |
| " }\n" |
| " if {$menu_var(zeroconf)} {\n" |
| " set props_zeroconf 1\n" |
| " } else {\n" |
| " set props_zeroconf 0\n" |
| " }\n" |
| " if {$props_zeroconf == $prop0_zeroconf} {incr fail}\n" |
| " set prop0_zeroconf $props_zeroconf\n" |
| " }\n" |
| "\n" |
| " if {$props_javaview != $prop0_javaview} {\n" |
| " if {$did > 0} {after $aft}; incr did\n" |
| " if {$props_javaview} {\n" |
| " push_new_value \"http\" \"http\" 1 1\n" |
| " } else {\n" |
| " push_new_value \"http\" \"nohttp\" 1 1\n" |
| " }\n" |
| " if {$menu_var(http)} {\n" |
| " set props_javaview 1\n" |
| " } else {\n" |
| " set props_javaview 0\n" |
| " }\n" |
| " if {$props_javaview == $prop0_javaview} {incr fail}\n" |
| " set prop0_javaview $props_javaview\n" |
| " }\n" |
| "\n" |
| " if {$props_solid != $prop0_solid} {\n" |
| " if {$did > 0} {after $aft}; incr did\n" |
| " if {$props_solid} {\n" |
| " push_new_value \"solid\" \"solid\" 1 1\n" |
| " } else {\n" |
| " push_new_value \"solid\" \"nosolid\" 1 1\n" |
| " }\n" |
| " if {$menu_var(solid)} {\n" |
| " set props_solid 1\n" |
| " } else {\n" |
| " set props_solid 0\n" |
| " }\n" |
| " if {$props_solid == $prop0_solid} {incr fail}\n" |
| " set prop0_solid $props_solid\n" |
| " }\n" |
| "\n" |
| " set fpw 0\n" |
| " if {$props_passwd != $prop0_passwd} {\n" |
| " set fpw 1\n" |
| " }\n" |
| " set vpw 0\n" |
| " if {$props_viewpasswd != $prop0_viewpasswd} {\n" |
| " set vpw 1\n" |
| " }\n" |
| "\n" |
| " set pw_ord [list]\n" |
| " if {!$fpw && !$vpw } {\n" |
| " # neither change\n" |
| " ;\n" |
| " } elseif {$fpw && !$vpw} {\n" |
| " # full password change\n" |
| " if {$props_passwd == \"\"} {\n" |
| " if {$prop0_viewpasswd != \"\"} {\n" |
| " # set view to \"\" as well and first\n" |
| " set props_viewpasswd \"\"\n" |
| " set pw_ord [list vpw fpw]\n" |
| " } else {\n" |
| " set pw_ord [list fpw]\n" |
| " }\n" |
| " } else {\n" |
| " # assume view state OK\n" |
| " set pw_ord [list fpw]\n" |
| " }\n" |
| " \n" |
| " } elseif {!$fpw && $vpw} {\n" |
| " # view password change\n" |
| " if {$props_viewpasswd == \"\"} {\n" |
| " # assume full state OK\n" |
| " set pw_ord [list vpw]\n" |
| " } else {\n" |
| " if {$prop0_passwd == \"\"} {\n" |
| " # could be trouble, x11vnc makes random\n" |
| " # full passwd...\n" |
| " set pw_ord [list vpw]\n" |
| " } else {\n" |
| " # OK, full non-null.\n" |
| " set pw_ord [list vpw]\n" |
| " }\n" |
| " }\n" |
| " } elseif {$fpw && $vpw} {\n" |
| " # both full and view password change\n" |
| " if {$props_passwd == \"\" && $props_viewpasswd == \"\"} {\n" |
| " # OK, do view first\n" |
| " set pw_ord [list vpw fpw]\n" |
| " } elseif {$props_passwd == \"\" && $props_viewpasswd != \"\"} {\n" |
| " # Not good, do view first anyway x11vnc will fix.\n" |
| " set pw_ord [list vpw fpw]\n" |
| " } elseif {$props_passwd != \"\" && $props_viewpasswd == \"\"} {\n" |
| " # OK, view first\n" |
| " set pw_ord [list vpw fpw]\n" |
| " } elseif {$props_passwd != \"\" && $props_viewpasswd != \"\"} {\n" |
| " # OK, full first\n" |
| " set pw_ord [list fpw vpw]\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " foreach case $pw_ord {\n" |
| " if {$case == \"fpw\"} {\n" |
| " if {$did > 0} {after $aft}; incr did\n" |
| " push_new_value \"passwd\" \"passwd\" \"$props_passwd\" 1\n" |
| " if {$props_passwd == $prop0_passwd} {incr fail}\n" |
| " set prop0_passwd $props_passwd\n" |
| " }\n" |
| " if {$case == \"vpw\"} {\n" |
| " if {$did > 0} {after $aft}; incr did\n" |
| " push_new_value \"viewpasswd\" \"viewpasswd\" \"$props_viewpasswd\" 1\n" |
| " if {$props_viewpasswd == $prop0_viewpasswd} {incr fail}\n" |
| " set prop0_viewpasswd $props_viewpasswd\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " if {$props_accept != $prop0_accept} {\n" |
| " if {$did > 0} {after $aft}; incr did\n" |
| " if {$props_accept} {\n" |
| " push_new_value \"unlock\" \"unlock\" 1 0\n" |
| " } else {\n" |
| " push_new_value \"lock\" \"lock\" 1 0\n" |
| " }\n" |
| " if {$props_accept == $prop0_accept} {incr fail}\n" |
| " set prop0_accept $props_accept\n" |
| " }\n" |
| "\n" |
| " props_widgets normal\n" |
| " if {$fail > 0} {\n" |
| " return 0\n" |
| " } else {\n" |
| " return 1\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc props_advanced {} {\n" |
| " global icon_mode props_win full_win\n" |
| " global props_advanced_first\n" |
| "\n" |
| " if ![info exists props_advanced_first] {\n" |
| " center_win $full_win\n" |
| " set props_advanced_first 1\n" |
| " set first 1\n" |
| " } else {\n" |
| " set first 0\n" |
| " }\n" |
| " update\n" |
| " wm deiconify $full_win\n" |
| " update\n" |
| "\n" |
| " if {$first} {\n" |
| " set w $full_win\n" |
| " wm minsize $w [winfo width $w] [winfo height $w]\n" |
| " }\n" |
| " push_new_value \"remote-cmd\" \"remote-cmd\" \"Q:clients\" 1\n" |
| "}\n" |
| "\n" |
| "proc do_props {} {\n" |
| " global props_accept props_confirm props_viewonly props_shared\n" |
| " global props_zeroconf props_javaview props_solid\n" |
| " global props_passwd props_viewpasswd\n" |
| " global prop0_accept prop0_confirm prop0_viewonly prop0_shared\n" |
| " global prop0_zeroconf prop0_javaview prop0_solid\n" |
| " global prop0_passwd prop0_viewpasswd\n" |
| " global menu_var unset_str\n" |
| " global have_labelframes ffont bfont\n" |
| " global props_buttons icon_noadvanced\n" |
| " global icon_mode icon_mode_at_startup\n" |
| " global screen_height screen_width\n" |
| " global do_props_msg\n" |
| "\n" |
| " set msg \"\"\n" |
| " if {[info exists do_props_msg]} {\n" |
| " set msg $do_props_msg\n" |
| " }\n" |
| "\n" |
| " check_update_vars\n" |
| "\n" |
| " set pady 0.5m\n" |
| " set pady 0.3m\n" |
| " if {$screen_height <= 360} {\n" |
| " set pady 0m\n" |
| " }\n" |
| "\n" |
| " if [info exists menu_var(deny)] {\n" |
| " if {$menu_var(deny) == $unset_str || $menu_var(deny) == 0} {\n" |
| " set props_accept 1\n" |
| " } else {\n" |
| " set props_accept 0\n" |
| " }\n" |
| " } else {\n" |
| " set menu_var(deny) 0\n" |
| " set props_accept 1\n" |
| " }\n" |
| " set prop0_accept $props_accept\n" |
| "\n" |
| " if [info exists menu_var(accept)] {\n" |
| " if {$menu_var(accept) == $unset_str || $menu_var(accept) == \"\"} {\n" |
| " set props_confirm 0\n" |
| " } else {\n" |
| " set props_confirm 1\n" |
| " }\n" |
| " } else {\n" |
| " set menu_var(accept) \"\"\n" |
| " set props_confirm 0\n" |
| " }\n" |
| " set prop0_confirm $props_confirm\n" |
| "\n" |
| " if [info exists menu_var(viewonly)] {\n" |
| " if {$menu_var(viewonly) == $unset_str || $menu_var(viewonly) == \"\"} {\n" |
| " set props_viewonly 0\n" |
| " } elseif ($menu_var(viewonly)) {\n" |
| " set props_viewonly 1\n" |
| " } else {\n" |
| " set props_viewonly 0\n" |
| " }\n" |
| " } else {\n" |
| " set menu_var(viewonly) 0\n" |
| " set props_viewonly 0\n" |
| " }\n" |
| " set prop0_viewonly $props_viewonly\n" |
| "\n" |
| " if [info exists menu_var(shared)] {\n" |
| " if {$menu_var(shared) == $unset_str || $menu_var(shared) == \"\"} {\n" |
| " set props_shared 0\n" |
| " } elseif ($menu_var(shared)) {\n" |
| " set props_shared 1\n" |
| " } else {\n" |
| " set props_shared 0\n" |
| " }\n" |
| " } else {\n" |
| " set menu_var(shared) 0\n" |
| " set props_shared 0\n" |
| " }\n" |
| " set prop0_shared $props_shared\n" |
| "\n" |
| " if [info exists menu_var(zeroconf)] {\n" |
| " if {$menu_var(zeroconf) == $unset_str || $menu_var(zeroconf) == \"\"} {\n" |
| " set props_zeroconf 0\n" |
| " } elseif ($menu_var(zeroconf)) {\n" |
| " set props_zeroconf 1\n" |
| " } else {\n" |
| " set props_zeroconf 0\n" |
| " }\n" |
| " } else {\n" |
| " set menu_var(zeroconf) 0\n" |
| " set props_zeroconf 0\n" |
| " }\n" |
| " set prop0_zeroconf $props_zeroconf\n" |
| "\n" |
| " if [info exists menu_var(http)] {\n" |
| " if {$menu_var(http) == $unset_str || $menu_var(http) == \"\"} {\n" |
| " set props_javaview 0\n" |
| " } elseif ($menu_var(http)) {\n" |
| " set props_javaview 1\n" |
| " } else {\n" |
| " set props_javaview 0\n" |
| " }\n" |
| " } else {\n" |
| " set menu_var(http) 0\n" |
| " set props_javaview 0\n" |
| " }\n" |
| " set prop0_javaview $props_javaview\n" |
| "\n" |
| " if [info exists menu_var(solid)] {\n" |
| " if {$menu_var(solid) == $unset_str || $menu_var(solid) == \"\"} {\n" |
| " set props_solid 0\n" |
| " } elseif ($menu_var(solid)) {\n" |
| " set props_solid 1\n" |
| " } else {\n" |
| " set props_solid 0\n" |
| " }\n" |
| " } else {\n" |
| " set menu_var(solid) 0\n" |
| " set props_solid 0\n" |
| " }\n" |
| " set prop0_solid $props_solid\n" |
| "\n" |
| " if ![info exists props_passwd] {\n" |
| " set props_passwd \"\"\n" |
| " }\n" |
| " set prop0_passwd $props_passwd\n" |
| "\n" |
| " if ![info exists props_viewpasswd] {\n" |
| " set props_viewpasswd \"\"\n" |
| " }\n" |
| " set prop0_viewpasswd $props_viewpasswd\n" |
| "\n" |
| " if [info exists props_buttons] {\n" |
| " catch {unset props_buttons}\n" |
| " }\n" |
| " set props_buttons [list]\n" |
| "\n" |
| " set wp .props\n" |
| " set w $wp\n" |
| " catch {destroy $wp}\n" |
| " toplevel $wp\n" |
| " wm title $wp \"x11vnc Properties\"\n" |
| " frame $w.lf\n" |
| " set w $w.lf\n" |
| " set b1 \"$w.buttons1\"\n" |
| " frame $b1\n" |
| " button $b1.ok -text OK -command \"if {\\[props_apply\\]} {destroy $wp}\" -font $bfont\n" |
| " button $b1.cancel -text Cancel -command \"destroy $wp\" -font $bfont\n" |
| " button $b1.apply -text Apply -command \"props_apply\" -font $bfont\n" |
| "\n" |
| " bind $w <KeyPress-Escape> \"destroy $wp\"\n" |
| "\n" |
| " pack $b1.ok $b1.cancel $b1.apply -side left -expand 0\n" |
| " lappend props_buttons $b1.apply $b1.cancel $b1.ok\n" |
| "\n" |
| " set b2 \"$w.buttons2\"\n" |
| " frame $b2\n" |
| "\n" |
| " button $b2.advanced -text \" Advanced ... \" \\\n" |
| " -command \"destroy $wp; props_advanced\" -font $bfont\n" |
| " if {! $icon_noadvanced} {\n" |
| " lappend props_buttons $b2.advanced\n" |
| " pack $b2.advanced -side left -expand 0\n" |
| " }\n" |
| "\n" |
| " button $b2.help -text \" Help \" -command \"menu_help Properties\" -font $bfont\n" |
| " lappend props_buttons $b2.help\n" |
| " pack $b2.help -side left -expand 0\n" |
| "\n" |
| " set pw \"$w.passwd\"\n" |
| " if {$have_labelframes} {\n" |
| " labelframe $pw -text \"Password\" -font $bfont\n" |
| " } else {\n" |
| " frame $pw\n" |
| " set l $pw.l\n" |
| " label $l -text \"Password:\" -justify left -anchor w -font $bfont\n" |
| " pack $pw.l -fill x -expand 1 -padx 1m -pady 0m -side top\n" |
| " }\n" |
| " entry $pw.e -show \"*\" -textvariable props_passwd -font $bfont\n" |
| " pack $pw.e -fill x -expand 1 -padx 1m -pady $pady -side top\n" |
| "\n" |
| " global x11vnc_icon_mode\n" |
| " if {! $x11vnc_icon_mode} {\n" |
| " catch { $pw.e configure -state disabled}\n" |
| " if {! $have_labelframes} {\n" |
| " catch { $pw.l configure -state disabled}\n" |
| " }\n" |
| " } else {\n" |
| " lappend props_buttons $pw.e\n" |
| " }\n" |
| "\n" |
| "\n" |
| " set vp \"$w.viewpw\"\n" |
| " if {$have_labelframes} {\n" |
| " labelframe $vp -text \"ViewOnly Password\" -font $bfont\n" |
| " } else {\n" |
| " frame $vp\n" |
| " set l $vp.l\n" |
| " label $l -text \"ViewOnly Password:\" -justify left -anchor w -font $bfont\n" |
| " pack $vp.l -fill x -expand 1 -padx 1m -pady 0m -side top\n" |
| " }\n" |
| " entry $vp.e -show \"*\" -textvariable props_viewpasswd -font $bfont\n" |
| " pack $vp.e -fill x -expand 1 -padx 1m -pady $pady -side top\n" |
| "\n" |
| " if {! $x11vnc_icon_mode} {\n" |
| " catch { $vp.e configure -state disabled}\n" |
| " if {! $have_labelframes} {\n" |
| " catch { $vp.l configure -state disabled}\n" |
| " }\n" |
| " } else {\n" |
| " lappend props_buttons $vp.e\n" |
| " }\n" |
| "\n" |
| " if {! $icon_mode_at_startup} {\n" |
| " $vp.e configure -state disabled\n" |
| " catch {$vp.l configure -state disabled}\n" |
| " catch {$vp configure -state disabled}\n" |
| " catch {$vp configure -foreground grey60}\n" |
| " $pw.e configure -state disabled\n" |
| " catch {$pw.l configure -state disabled}\n" |
| " catch {$pw configure -state disabled}\n" |
| " catch {$pw configure -foreground grey60}\n" |
| " }\n" |
| "\n" |
| " set sb \"$w.solid\"\n" |
| " frame $sb\n" |
| " checkbutton $sb.button -text \"Solid Background Color\" \\\n" |
| " -variable props_solid -anchor w -font $bfont\n" |
| " pack $sb.button -fill x -expand 1 -padx 1m -pady $pady\n" |
| "\n" |
| " set jv \"$w.javaview\"\n" |
| " frame $jv\n" |
| " checkbutton $jv.button -text \"Serve Java Viewer Applet\" \\\n" |
| " -variable props_javaview -anchor w -font $bfont\n" |
| " pack $jv.button -fill x -expand 1 -padx 1m -pady $pady\n" |
| "\n" |
| " set zc \"$w.zeroconf\"\n" |
| " frame $zc\n" |
| " checkbutton $zc.button -text \"Advertise Service (Zeroconf)\" \\\n" |
| " -variable props_zeroconf -anchor w -font $bfont\n" |
| " pack $zc.button -fill x -expand 1 -padx 1m -pady $pady\n" |
| "\n" |
| " set sh \"$w.shared\"\n" |
| " frame $sh\n" |
| " checkbutton $sh.button -text \"Shared\" \\\n" |
| " -variable props_shared -anchor w -font $bfont\n" |
| " pack $sh.button -fill x -expand 1 -padx 1m -pady $pady\n" |
| "\n" |
| " set vo \"$w.viewonly\"\n" |
| " frame $vo\n" |
| " checkbutton $vo.button -text \"All Clients ViewOnly\" \\\n" |
| " -variable props_viewonly -anchor w -font $bfont\n" |
| " pack $vo.button -fill x -expand 1 -padx 1m -pady $pady\n" |
| "\n" |
| " set cf \"$w.confirm\"\n" |
| " frame $cf\n" |
| " checkbutton $cf.button -text \"Ask for Confirmation\" \\\n" |
| " -variable props_confirm -anchor w -font $bfont\n" |
| " pack $cf.button -fill x -expand 1 -padx 1m -pady $pady\n" |
| "\n" |
| " set ac \"$w.accept\"\n" |
| " frame $ac\n" |
| " checkbutton $ac.button -text \"Accept Connections\" \\\n" |
| " -variable props_accept -anchor w -font $bfont\n" |
| " pack $ac.button -fill x -expand 1 -padx 1m -pady $pady\n" |
| "\n" |
| " set px \"6m\"\n" |
| " pack $b1 -side bottom -fill x -pady $pady -padx $px\n" |
| " pack $b2 -side bottom -fill x -pady $pady -padx $px\n" |
| " pack $vp -side bottom -fill x -pady $pady -padx $px\n" |
| " pack $pw -side bottom -fill x -pady $pady -padx $px\n" |
| " pack $sb -side bottom -fill x -pady 0m -padx $px\n" |
| " pack $jv -side bottom -fill x -pady 0m -padx $px\n" |
| " pack $zc -side bottom -fill x -pady 0m -padx $px\n" |
| " pack $sh -side bottom -fill x -pady 0m -padx $px\n" |
| " pack $vo -side bottom -fill x -pady 0m -padx $px\n" |
| " pack $cf -side bottom -fill x -pady 0m -padx $px\n" |
| " pack $ac -side bottom -fill x -pady 0m -padx $px\n" |
| "\n" |
| " global show_props_instructions\n" |
| " if {![info exists show_props_instructions]} {\n" |
| " set show_props_instructions 1\n" |
| " }\n" |
| "\n" |
| " wm withdraw .props\n" |
| "\n" |
| " set wl $w\n" |
| "\n" |
| " pack $wl -side left\n" |
| "\n" |
| " if {$msg != \"\"} {\n" |
| " set tw [textwidth $msg]\n" |
| " set th [textheight $msg]\n" |
| " set th [expr $th - 1]\n" |
| " set ms \".props.msg\"\n" |
| " text $ms -font $ffont -relief ridge -width $tw -height $th\n" |
| " $ms insert 1.0 $msg\n" |
| "\n" |
| " set si \"$wl.instructions\"\n" |
| " frame $si\n" |
| " checkbutton $si.button -text \"Show Instructions\" \\\n" |
| " -variable show_props_instructions -anchor w -font $bfont \\\n" |
| " -command \"toggle_instructions $ms $pady $px\"\n" |
| "\n" |
| " pack $si.button -fill x -expand 1 -padx 1m -pady $pady\n" |
| " pack $si -side bottom -fill x -pady 0m -padx $px\n" |
| "\n" |
| " if {$show_props_instructions} {\n" |
| " pack $ms -side left -fill both\n" |
| " }\n" |
| "\n" |
| " update\n" |
| " }\n" |
| "\n" |
| "\n" |
| " lappend props_buttons $ac.button $cf.button $vo.button $sh.button $zc.button $jv.button $sb.button\n" |
| "\n" |
| " \n" |
| " set w .props\n" |
| " update\n" |
| " wm resizable $w 1 0\n" |
| " center_win $w\n" |
| " update\n" |
| "\n" |
| " #wm minsize $w [winfo width $w] [winfo height $w]\n" |
| "\n" |
| " tkwait window $w\n" |
| " set show_props_instructions 0\n" |
| "}\n" |
| "\n" |
| "proc toggle_instructions {ms pady px} {\n" |
| " global show_props_instructions\n" |
| " if {$show_props_instructions} {\n" |
| " pack $ms -side left -fill both\n" |
| " } else {\n" |
| " pack forget $ms\n" |
| " }\n" |
| " catch {pack .props}\n" |
| " update\n" |
| "}\n" |
| "\n" |
| "proc do_new_client {} {\n" |
| " global newclient ffont bfont\n" |
| "\n" |
| " set w .newclient\n" |
| " catch {destroy $w}\n" |
| " toplevel $w\n" |
| " label $w.l -text \"Hostname: \" -font $bfont\n" |
| " set newclient \"\"\n" |
| " entry $w.e -width 16 -textvariable newclient -font $bfont \n" |
| " button $w.b -text OK -command \"destroy $w\" -font $bfont\n" |
| " button $w.h -text Help -command \"menu_help NewClient\" -font $bfont\n" |
| " bind $w.e <Return> \"update; after 100; destroy $w\"\n" |
| "\n" |
| " wm title $w \"New Client\"\n" |
| "\n" |
| " pack $w.l $w.e $w.h $w.b -side left -pady 1m -padx 0.5m\n" |
| " focus $w.e\n" |
| " center_win $w\n" |
| " update \n" |
| " \n" |
| " tkwait window $w\n" |
| "\n" |
| " regsub -all {[{}()~!$&*|;'\"`{}<>\\[\\]]} $newclient \"\" newclient\n" |
| " #'\n" |
| " if {$newclient != \"\"} {\n" |
| " push_new_value \"connect\" \"connect\" \"$newclient\" 1\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc do_disconnect_all {} {\n" |
| " push_new_value \"disconnect\" \"disconnect\" \"all\" 1\n" |
| "}\n" |
| "\n" |
| "proc do_disconnect_client {id} {\n" |
| " push_new_value \"disconnect\" \"disconnect\" \"$id\" 1\n" |
| "}\n" |
| "\n" |
| "proc popup_post {m} {\n" |
| " global popup_cascade_posted client_balloon\n" |
| " global client_id_list\n" |
| "\n" |
| " set popup_cascade_posted 0\n" |
| " \n" |
| " set wd \"$m.disconnect\"\n" |
| "\n" |
| " if {![winfo exists $wd]} {\n" |
| " return\n" |
| " }\n" |
| "\n" |
| " catch {$wd delete 0 end}\n" |
| "\n" |
| " $wd add command -label \"Disconnect client:\"\n" |
| " $wd add separator\n" |
| " $wd add command -label \"All Clients\" -command do_disconnect_all\n" |
| "\n" |
| " if {![info exists client_id_list]} {\n" |
| " return\n" |
| " }\n" |
| "\n" |
| " foreach client $client_id_list {\n" |
| " if {$client == \"\"} {\n" |
| " continue\n" |
| " }\n" |
| " if {[regexp {^([^:]*):(.*)$} $client mat id lab]} {\n" |
| " set nid [expr \"$id + 0\"]\n" |
| " $wd add command -label \"$nid $lab\" \\\n" |
| " -command \"do_disconnect_client $id\"\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc pmenu {m x y} {\n" |
| " if {![winfo exists $m]} {\n" |
| " return\n" |
| " }\n" |
| " set x [expr $x-10]\n" |
| " set y [expr $y-10]\n" |
| " $m post $x $y\n" |
| " # XXX more care needed\n" |
| " grab set -global $m\n" |
| "}\n" |
| "\n" |
| "proc set_client_balloon {str} {\n" |
| " global client_balloon vnc_display\n" |
| " global client_id_list\n" |
| "\n" |
| " set client_id_list [list]\n" |
| " \n" |
| " set client_balloon \"$vnc_display\"\n" |
| " set count 0\n" |
| " regsub -all {^.*aro=clients:} $str \"\" str\n" |
| " regsub -all {aro=.*$} $str \"\" str\n" |
| " regsub -all {ans=.*$} $str \"\" str\n" |
| " foreach client [split $str \",\"] {\n" |
| " #puts \"client: $client\"\n" |
| " if [regexp {^[ ]*$} $client] {\n" |
| " continue\n" |
| " }\n" |
| " if {[regexp {^(.*):(.*):(.*):(.*):(.*):(.*):(.*):(.*):(.*)$} \\\n" |
| " $client m0 m1 m2 m3 m4 m5 m6 m7 m8 m9]} {\n" |
| " set id $m1\n" |
| " set nid [expr \"$m1 + 0\"]\n" |
| " set ip $m2\n" |
| " set port $m3\n" |
| " set user $m4\n" |
| " set unix $m5\n" |
| " if {[string length $user] >= 24} {\n" |
| " # weird identd hash...\n" |
| " set user [string range $user 0 8]\n" |
| " set user \"${user}...\"\n" |
| " }\n" |
| " if {$unix != \"\" && $unix != \"none\"} {\n" |
| " set user $unix\n" |
| " }\n" |
| " set host $m6\n" |
| " set input $m7\n" |
| " set vo $m8\n" |
| " set ltime $m9\n" |
| " if [regexp {^[ ]*$} $host] {\n" |
| " set host $ip\n" |
| " }\n" |
| " set client_balloon \"${client_balloon}\\n$nid $user\\@$host\"\n" |
| " if {$vo == \"1\"} {\n" |
| " set client_balloon \"${client_balloon} - view\"\n" |
| " lappend client_id_list \"$id:$user\\@$host - view\"\n" |
| " } else {\n" |
| " set client_balloon \"${client_balloon} - full\"\n" |
| " lappend client_id_list \"$id:$user\\@$host - full\"\n" |
| " }\n" |
| " } else {\n" |
| " set i [expr $count+1]\n" |
| " if {$i == 1} {\n" |
| " set client_balloon \"${client_balloon}\\nunknown-host$i\"\n" |
| " }\n" |
| " }\n" |
| " incr count\n" |
| " }\n" |
| " if {$count == 0} {\n" |
| " set client_balloon \"${client_balloon}\\nNo connections.\"\n" |
| " }\n" |
| " icon_win_cfg $count\n" |
| "}\n" |
| "\n" |
| "proc read_client_info {channel} {\n" |
| " global x11vnc_client_file client_str client_info_read\n" |
| " global read_client_info_lock\n" |
| " global read_clients\n" |
| " set db 0\n" |
| "\n" |
| " set read_clients 0\n" |
| "\n" |
| " if {![info exists read_client_info_lock]} {\n" |
| " set read_client_info_lock 0\n" |
| " }\n" |
| "\n" |
| " if {$channel != \"\"} {\n" |
| "\n" |
| " if {$read_client_info_lock} {\n" |
| " return\n" |
| " }\n" |
| " set read_client_info_lock 1\n" |
| " after 100\n" |
| " set str \"\"\n" |
| " set count [gets $channel str]\n" |
| " if {$db} {puts stderr \"read_client_info-$channel: $str\"}\n" |
| "\n" |
| " if {$count == -1 || [eof $channel]} {\n" |
| " close $channel\n" |
| " catch {file delete $x11vnc_client_file}\n" |
| " set read_client_info_lock 0\n" |
| " clean_icon_exit\n" |
| " }\n" |
| " if {$count > 0 && ![regexp {^[ ]*$} $str]} {\n" |
| " set client_info_read 1\n" |
| " if {$str == \"quit\"} {\n" |
| " catch {file delete $x11vnc_client_file}\n" |
| " set read_client_info_lock 0\n" |
| " clean_icon_exit\n" |
| " } elseif {$str == \"skip\"} {\n" |
| " ;\n" |
| " } elseif [regexp {^clients:} $str] {\n" |
| " regsub {^clients:} $str \"\" str\n" |
| " set read_clients 1\n" |
| " if {$str == \"none\"} {\n" |
| " set str \"\"\n" |
| " }\n" |
| " update_clients_menu $str\n" |
| " set client_str $str\n" |
| " set_client_balloon $str\n" |
| " }\n" |
| " }\n" |
| " set read_client_info_lock 0\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc check_set_vnc_display {} {\n" |
| " \n" |
| " global read_clients check_set_vnc_display_done\n" |
| "\n" |
| " if {[info exists check_set_vnc_display_done]} {\n" |
| " return\n" |
| " }\n" |
| " if {[info exists read_clients]} {\n" |
| " if {$read_clients} {\n" |
| " after 250\n" |
| " query_all\n" |
| " global client_str\n" |
| " set_client_balloon $client_str\n" |
| " set check_set_vnc_display_done 1\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc read_client_tail {} {\n" |
| " global client_tail\n" |
| "\n" |
| " if {$client_tail != \"\"} {\n" |
| " read_client_info $client_tail\n" |
| " check_set_vnc_display\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc read_client_sock {} {\n" |
| " global client_sock\n" |
| "\n" |
| " if {$client_sock != \"\"} {\n" |
| " read_client_info $client_sock\n" |
| " check_set_vnc_display\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc show_client_balloon {} {\n" |
| " global icon_mode icon_win props_win full_win\n" |
| " global client_balloon ffont connected_to_x11vnc\n" |
| "\n" |
| " set noinfo \"tkx11vnc: no client information\"\n" |
| " set noinfo \"$noinfo\\navailable from x11vnc ...\"\n" |
| " if ![info exists client_balloon] {\n" |
| " set client_balloon $noinfo\n" |
| " }\n" |
| " if {$client_balloon == \"\"} {\n" |
| " set client_balloon $noinfo\n" |
| " }\n" |
| " if {! [info exists icon_win]} {\n" |
| " return\n" |
| " } elseif {$icon_win == \"\"} {\n" |
| " return\n" |
| " } elseif {! [winfo exists $icon_win]} {\n" |
| " return\n" |
| " }\n" |
| "\n" |
| " set x [expr [winfo rootx $icon_win] + ([winfo width $icon_win]/2)]\n" |
| " set y [expr [winfo rooty $icon_win] + [winfo height $icon_win] + 4]\n" |
| "\n" |
| " set infotext $client_balloon\n" |
| " if {!$connected_to_x11vnc} {\n" |
| " set infotext \"Not currently attached to x11vnc\\nLast available info:\\n$infotext\"\n" |
| " }\n" |
| "\n" |
| " set w .client_balloon\n" |
| " catch {destroy $w}\n" |
| " toplevel $w -bg black -screen [winfo screen $icon_win]\n" |
| " wm overrideredirect $w 1\n" |
| " label $w.l -text \"$infotext\" -relief flat -bg \"#ffffaa\" -fg black \\\n" |
| " -padx 2 -pady 0 -anchor w -justify left -font $ffont\n" |
| " pack $w.l -side left -padx 1 -pady 1\n" |
| "\n" |
| " set w2 [winfo reqwidth $w.l]\n" |
| " set h2 [winfo reqheight $w.l]\n" |
| "\n" |
| " set W [winfo screenwidth $w]\n" |
| " set H [winfo screenheight $w]\n" |
| "\n" |
| " if {[expr $x+$w2] > $W} {\n" |
| " set w3 [winfo width $icon_win]\n" |
| " set x [expr \"$W - $w2 - $w3 - 4\"] \n" |
| " }\n" |
| " if {[expr $y+$h2] > $H} {\n" |
| " set h3 [winfo height $icon_win]\n" |
| " set y [expr \"$H - $h2 - $h3 - 4\"] \n" |
| " }\n" |
| "\n" |
| " wm geometry $w +${x}+${y}\n" |
| "}\n" |
| "\n" |
| "proc kill_client_balloon {} {\n" |
| " global client_balloon_id client_balloon_win\n" |
| " if [info exists client_balloon_id] {\n" |
| " catch {after cancel $client_balloon_id}\n" |
| " }\n" |
| " if [winfo exists .client_balloon] {\n" |
| " destroy .client_balloon\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc icon_win_cfg {clients} {\n" |
| " global icon_win client_tail client_sock client_info_read\n" |
| "\n" |
| " if {! [info exists icon_win]} {\n" |
| " return\n" |
| " } elseif {$icon_win == \"\"} {\n" |
| " return\n" |
| " } elseif {! [winfo exists $icon_win]} {\n" |
| " return\n" |
| " }\n" |
| " if {$clients > 0} {\n" |
| " $icon_win configure -bg black -fg white\n" |
| " } else {\n" |
| " $icon_win configure -bg white -fg black\n" |
| " }\n" |
| "\n" |
| " if {$client_tail == \"\" || !$client_info_read} {\n" |
| " if {$client_sock == \"\"} {\n" |
| " $icon_win configure -fg red\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc server_accept {sock addr port} {\n" |
| " global socket_cookie server socket_got_callback\n" |
| " global client_tail client_sock\n" |
| " set db 0\n" |
| "\n" |
| " if {$db} {puts stderr \"sock=$sock addr=$addr port=$port\"}\n" |
| "\n" |
| " update; update idletasks\n" |
| " after 50\n" |
| " update; update idletasks\n" |
| " set count [gets $sock str]\n" |
| "\n" |
| " if {$count >= 0} {\n" |
| " set str [string trim $str]\n" |
| " if {$db} {puts stderr \"server_accept: \\\"$str\\\"\"}\n" |
| " if {$str == \"COOKIE:$socket_cookie\"} {\n" |
| " set client_sock $sock\n" |
| " if {$db} {puts stderr \"cookie matched. $client_sock\"}\n" |
| " } else {\n" |
| " if {$db} {puts stderr \"cookie NO matched.\"}\n" |
| " }\n" |
| " }\n" |
| " catch {close $server}\n" |
| " set socket_got_callback 1\n" |
| " if {$db} {puts stderr \"socket_got_callback $socket_got_callback\"}\n" |
| "}\n" |
| "\n" |
| "proc try_client_info_sock {} {\n" |
| " global socket_cookie server socket_got_callback\n" |
| " global x11vnc_started x11vnc_xdisplay hostname client_sock\n" |
| " global x11vnc_xdisplay0 menu_var\n" |
| "\n" |
| " set db 0\n" |
| "#dtime t1\n" |
| " set start 13037\n" |
| " set tries 100\n" |
| " set socket_got_callback 0\n" |
| "\n" |
| " set xd $x11vnc_xdisplay\n" |
| " if {$xd == \"\" && $x11vnc_xdisplay0 != \"\"} {\n" |
| " set xd $x11vnc_xdisplay0\n" |
| " }\n" |
| " if {$xd == \"\" && [info exists menu_var(display)]} {\n" |
| " set xd $menu_var(display)\n" |
| " }\n" |
| "\n" |
| " set myaddr \"\"\n" |
| " regsub {\\..*$} $hostname \"\" shost\n" |
| " if {$x11vnc_started} {\n" |
| " set myaddr \"127.0.0.1\"\n" |
| " } elseif {$xd != \"\"} {\n" |
| " if {[regexp {^:} $xd]} {\n" |
| " set myaddr \"127.0.0.1\"\n" |
| " } elseif {[regexp -nocase \"^$shost\" $xd]} {\n" |
| " set myaddr \"127.0.0.1\"\n" |
| " } elseif {[regexp -nocase \"^localhost\" $xd]} {\n" |
| " set myaddr \"127.0.0.1\"\n" |
| " } else {\n" |
| " set myaddr $hostname\n" |
| " }\n" |
| " } else {\n" |
| " set myaddr $hostname\n" |
| " }\n" |
| " \n" |
| " for {set i 0} {$i <= $tries} {incr i} {\n" |
| " set port [expr $start + $i]\n" |
| " set server [socket -server server_accept -myaddr $myaddr $port]\n" |
| " if {$server == \"\"} {\n" |
| " continue\n" |
| " }\n" |
| " if {[eof $server]} {\n" |
| " continue\n" |
| " }\n" |
| " set err \"\"\n" |
| " catch {set err [fconfigure $server -error]}\n" |
| " #puts \"err: $server: $err\"\n" |
| " if {$err == \"\"} {\n" |
| " break\n" |
| " }\n" |
| " }\n" |
| " if {$server == \"\"} {\n" |
| " append_text \"try_client_info_sock: server socket failed.\\n\"\n" |
| " return\n" |
| " }\n" |
| " if {! $x11vnc_started} {\n" |
| " run_remote_cmd [list \"-nosync\" \"-R\" \"noop\"]\n" |
| " if {$db} {dtime A}\n" |
| " after 250\n" |
| " if {$db} {dtime A}\n" |
| " }\n" |
| "\n" |
| " # set the cookie to some obscured randomness\n" |
| " set socket_cookie [clock clicks]\n" |
| " set r [expr rand()]\n" |
| " if {$r != \"\"} {\n" |
| " append socket_cookie $r\n" |
| " }\n" |
| " set r \"\"\n" |
| " catch {set r [winfo id .]}\n" |
| " if {$r != \"\"} {\n" |
| " append socket_cookie $r\n" |
| " }\n" |
| " if {[regexp {([0-9])([0-9])$} [clock clicks] m m1 m2]} {\n" |
| " regsub -all {\\.} $socket_cookie $m1 socket_cookie\n" |
| " regsub -all {x} $socket_cookie $m2 socket_cookie\n" |
| " }\n" |
| " run_remote_cmd [list \"-nosync\" \"-R\" \\\n" |
| " \"client_info_sock:$myaddr:$port:$socket_cookie\"]\n" |
| "#dtime t2\n" |
| " if {$db} {puts \"client_info_sock:$myaddr:$port:$socket_cookie\"}\n" |
| " for {set i 0} {$i < 10} {incr i} {\n" |
| " after 50\n" |
| " update; update idletasks\n" |
| "#dtime aa\n" |
| " if {$socket_got_callback != 0} {\n" |
| "#puts \"break-\"\n" |
| " break\n" |
| " }\n" |
| " }\n" |
| "#dtime t3\n" |
| "\n" |
| " set aftid \"\"\n" |
| " if {$socket_got_callback == 0} {\n" |
| " set aftid [after 10000 {set socket_got_callback 2}]\n" |
| " tkwait variable socket_got_callback\n" |
| " }\n" |
| "\n" |
| " if {$aftid != \"\"} {\n" |
| " catch {after cancel $aftid}\n" |
| " }\n" |
| "\n" |
| " if {$socket_got_callback != 1} {\n" |
| " puts stderr \"try_client_info_sock failed: no callback\\n\"\n" |
| " catch {close $server}\n" |
| " } else {\n" |
| " setup_client_sock 1\n" |
| " }\n" |
| "#dtime t4\n" |
| "}\n" |
| "\n" |
| "proc set_icon_label {} {\n" |
| " global icon_win\n" |
| "\n" |
| " set lab [get_icon_label]\n" |
| "\n" |
| " if {! [info exists icon_win]} {\n" |
| " return\n" |
| " } elseif {$icon_win == \"\"} {\n" |
| " return\n" |
| " } elseif {! [winfo exists $icon_win]} {\n" |
| " return\n" |
| " }\n" |
| " \n" |
| " if {[info exists icon_win]} {\n" |
| " $icon_win configure -text $lab\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc get_icon_label {{set 0}} {\n" |
| " global icon_minimal \n" |
| "\n" |
| " set lab0 \"x11\\nvnc\"\n" |
| " \n" |
| " if {$icon_minimal} {\n" |
| " set lab [get_vnc_display_number]\n" |
| " if {$lab != \"none\"} {\n" |
| " #set lab \" :$lab\"\n" |
| " set lab \":$lab\"\n" |
| " } else {\n" |
| " set lab \"-\"\n" |
| " }\n" |
| " } else {\n" |
| " set lab $lab0\n" |
| " }\n" |
| " return $lab\n" |
| "}\n" |
| "\n" |
| "# currently unused\n" |
| "proc lmenu {menu} {\n" |
| " global popup_cascade_posted\n" |
| " global left_iconwin_menu\n" |
| " set left_iconwin_menu 1\n" |
| " after 100\n" |
| " update\n" |
| " if {!$popup_cascade_posted && $left_iconwin_menu} {\n" |
| " for {set i 0} {$i < 3} {incr i} {\n" |
| " after 100\n" |
| " update\n" |
| " }\n" |
| " if {!$popup_cascade_posted && $left_iconwin_menu} {\n" |
| " $menu unpost\n" |
| " return\n" |
| " }\n" |
| " }\n" |
| " # kludge for WindowView\n" |
| " if {$popup_cascade_posted} {\n" |
| " focus $menu\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc old_balloon {} {\n" |
| " global client_str saved_clients_str\n" |
| " set str \"\"\n" |
| " if {[info exists client_str]} {\n" |
| " if {$client_str != \"\"} {\n" |
| " set str $client_str\n" |
| " }\n" |
| " }\n" |
| " if {$str == \"\"} {\n" |
| " if {[info exists saved_clients_str]} {\n" |
| " set str $saved_clients_str\n" |
| " }\n" |
| " }\n" |
| " if {$str != \"\"} {\n" |
| " set_client_balloon $str\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc get_custom_menu_items {} {\n" |
| " global env custom_last_read\n" |
| "\n" |
| " if {![info exists custom_last_read]} {\n" |
| " set custom_last_read 0\n" |
| " }\n" |
| " if {[info exists env(X11VNC_CUSTOM_GUI)]} {\n" |
| " set custom \"$env(X11VNC_CUSTOM_GUI)\"\n" |
| " } elseif {![info exists env(HOME)]} {\n" |
| " return [list \"none\"]\n" |
| " } else {\n" |
| " set custom \"$env(HOME)/.x11vnc.gui\"\n" |
| " }\n" |
| " if {![file exists $custom]} {\n" |
| " return [list \"none\"]\n" |
| " }\n" |
| "\n" |
| "# if {[file mtime $custom] <= $custom_last_read} {\n" |
| "# return [list \"nochange\"]\n" |
| "# }\n" |
| "\n" |
| " set in \"\"\n" |
| " catch {set in [open $custom \"r\"]} \n" |
| " if {$in == \"\"} {\n" |
| " return [list \"none\"]\n" |
| " }\n" |
| "\n" |
| " set custom_last_read [clock seconds]\n" |
| "\n" |
| " set count 0\n" |
| " while {[gets $in line] > -1} {\n" |
| " if {[regexp {^[ \\t]*#} $line]} {\n" |
| " continue\n" |
| " }\n" |
| " set line [string trim $line]\n" |
| " if {$line != \"\"} {\n" |
| " lappend items $line\n" |
| " incr count\n" |
| " }\n" |
| " }\n" |
| " close $in\n" |
| " \n" |
| " if {$count > 0} {\n" |
| " return $items\n" |
| " } else {\n" |
| " return [list \"none\"]\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc make_custom_menu {menu font} {\n" |
| " set items [get_custom_menu_items]\n" |
| " set i0 [lindex $items 0]\n" |
| " catch {$menu delete 0 end}\n" |
| " if {$i0 != \"none\"} {\n" |
| " $menu add command -font $font -label \"Custom items:\"\n" |
| " $menu add separator\n" |
| " foreach item $items {\n" |
| " if {$item == \"sep\" || $item == \"separator\"} {\n" |
| " $menu add separator\n" |
| " continue\n" |
| " }\n" |
| " if {[regexp {^action:(.*)$} $item m action]} {\n" |
| " $menu add command -font $font -label \"$action\" \\\n" |
| " -command \"do_var $action\"\n" |
| " continue\n" |
| " }\n" |
| " $menu add command -font $font -label \"$item\" \\\n" |
| " -command \"run_remote_cmd \\[list \\\"-R\\\" \\\"$item\\\"\\]\"\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc make_icon {} {\n" |
| " global icon_mode icon_embed_id icon_win props_win full_win\n" |
| " global tray_embed tray_running env\n" |
| " global x11vnc_client_file client_tail client_sock client_str saved_clients_str\n" |
| " global client_balloon_id\n" |
| " global bfont sfont snfont ffont\n" |
| " global icon_minimal gui_start_mode\n" |
| " global popup_cascade_posted menu_var x11vnc_gui_geom\n" |
| " set min_x 24\n" |
| " set min_y 24\n" |
| " \n" |
| " set font $bfont\n" |
| " set mfont $font\n" |
| "\n" |
| " if {$tray_embed} {\n" |
| " set font $sfont\n" |
| " set mfont $snfont\n" |
| " }\n" |
| " if {[info exists env(X11VNC_ICON_FONT)]} {\n" |
| " set font $env(X11VNC_ICON_FONT)\n" |
| " }\n" |
| " if {[regexp {([0-9][0-9]*)x([0-9][0-9]*)} $x11vnc_gui_geom m mx my]} {\n" |
| " if {$mx < $min_x} {\n" |
| " set min_x $mx\n" |
| " }\n" |
| " if {$my < $min_y} {\n" |
| " set min_y $my\n" |
| " }\n" |
| " }\n" |
| " wm minsize . $min_x $min_y\n" |
| "\n" |
| " if {$tray_embed && $tray_running} {\n" |
| " wm withdraw .\n" |
| " }\n" |
| "\n" |
| " set l .icon\n" |
| " set icon_win $l\n" |
| " catch destroy {$icon_win}\n" |
| " if {$icon_minimal} {\n" |
| " set bw 1\n" |
| " } else {\n" |
| " set bw 5\n" |
| " }\n" |
| " set lab [get_icon_label]\n" |
| " label $l -text $lab -borderwidth $bw -font $font\n" |
| " icon_win_cfg 0\n" |
| "\n" |
| "\n" |
| " set popup_cascade_posted 0\n" |
| " pack $l -fill both -expand 1\n" |
| " set menu \"$l.menu\"\n" |
| " menu $menu -tearoff 0 -postcommand \"popup_post $menu\"\n" |
| " $menu add command -font $mfont -label \"Properties\" -command do_props\n" |
| " $menu add command -font $mfont -label \"Help\" -command \"menu_help Tray\"\n" |
| " $menu add command -font $mfont -label \"Logfile\" -command show_logfile\n" |
| " $menu add separator\n" |
| " $menu add command -font $mfont -label \"New Client\" -command do_new_client\n" |
| "\n" |
| " set wd \"$menu.disconnect\"\n" |
| " catch {destroy $wd}\n" |
| " menu $wd -tearoff 0 -font $ffont \\\n" |
| " -postcommand {set popup_cascade_posted 1}\n" |
| " $wd add command -label \"Disconnect client:\"\n" |
| " $wd add separator\n" |
| " $wd add command -label \"All Clients\" -command do_disconnect_all\n" |
| " $menu add cascade -font $mfont -label \"Disconnect:\" -menu $wd\n" |
| "\n" |
| " $menu add separator\n" |
| "\n" |
| " set wv \"$menu.windowview\"\n" |
| " catch {destroy $wv}\n" |
| " menu $wv -tearoff 0 -font $ffont \\\n" |
| " -postcommand {set popup_cascade_posted 1}\n" |
| " foreach val {full icon tray} {\n" |
| " $wv add radiobutton -label \"$val\" \\\n" |
| " -value \"$val\" -font $ffont \\\n" |
| " -command \"do_var WindowView\" \\\n" |
| " -variable menu_var(WindowView)\n" |
| " }\n" |
| " $menu add cascade -font $mfont -label \"Window View:\" -menu $wv\n" |
| "\n" |
| " $menu add command -font $mfont -label \"Dismiss\" -command \"$menu unpost\"\n" |
| " $menu add command -font $mfont -label \"Stop x11vnc\" -command clean_icon_exit\n" |
| "\n" |
| " set items [get_custom_menu_items]\n" |
| " set i0 [lindex $items 0]\n" |
| " if {$i0 != \"none\" && $i0 != \"nochange\"} {\n" |
| " $menu add separator\n" |
| " set cm \"$menu.custom\"\n" |
| " catch {destroy $cm}\n" |
| " menu $cm -tearoff 0 -font $ffont \\\n" |
| " -postcommand \"set popup_cascade_posted 1; make_custom_menu $cm $ffont\"\n" |
| " $menu add cascade -font $mfont -label \"Custom:\" -menu $cm\n" |
| " }\n" |
| "\n" |
| " bind $icon_win <ButtonRelease-1> \"pmenu $menu %X %Y\"\n" |
| " bind $icon_win <ButtonRelease-3> \"pmenu $menu %X %Y\"\n" |
| " bind $icon_win <Enter> {set client_balloon_id [after 500 show_client_balloon]}\n" |
| " bind $icon_win <Button> {kill_client_balloon}\n" |
| " bind $icon_win <Leave> {kill_client_balloon}\n" |
| " bind $icon_win <Shift-ButtonRelease-1> {kill_client_balloon; show_client_balloon}\n" |
| " bind $icon_win <ButtonRelease-2> {kill_client_balloon; show_client_balloon}\n" |
| "# bind $menu <Leave> \"lmenu $menu\"\n" |
| "# bind $menu <Enter> \"set left_iconwin_menu 0\"\n" |
| "# bind $menu <KeyPress-Escape> \"$menu unpost\"\n" |
| "\n" |
| " bind . <Control-KeyPress-c> {destroy .; exit 0}\n" |
| "\n" |
| " if {!$tray_embed || !$tray_running} {\n" |
| " global x11vnc_gui_geom\n" |
| " if {$x11vnc_gui_geom != \"\"} {\n" |
| " set doit 1\n" |
| " if {[regexp {x} $x11vnc_gui_geom]} {\n" |
| " if {$gui_start_mode == \"full\"} {\n" |
| " set doit 0\n" |
| " }\n" |
| " } \n" |
| " if {$doit} {\n" |
| " wm geometry . $x11vnc_gui_geom\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| " wm iconname . \"tkx11vnc\"\n" |
| " wm title . \"tkx11vnc\"\n" |
| " update\n" |
| " if {$tray_embed && $tray_running} {\n" |
| " #wm deiconify .; # why did we have this???\n" |
| " #after 10000 {wm deiconify .; puts \"reqheight [winfo reqheight .]\"; puts \"reqwidth [winfo reqwidth .]\"; puts \"height [winfo height .]\"; puts \"width [winfo width .]\"}\n" |
| " } else {\n" |
| " wm deiconify .\n" |
| " }\n" |
| " update\n" |
| "\n" |
| "#puts \"reqheight [winfo reqheight .]\"\n" |
| "#puts \"reqwidth [winfo reqwidth .]\"\n" |
| "#puts \"height [winfo height .]\"\n" |
| "#puts \"width [winfo width .]\"\n" |
| "#puts \"AAA\"\n" |
| "\n" |
| " old_balloon\n" |
| "}\n" |
| "\n" |
| "proc setup_client_channel {} {\n" |
| " global client_sock client_tail\n" |
| "\n" |
| "# XXX/setup_client_channel\n" |
| " if {$client_sock == \"\" } {\n" |
| " stop_watch on\n" |
| " try_client_info_sock\n" |
| " if {$client_sock == \"\" } {\n" |
| " after 500\n" |
| " try_client_info_sock\n" |
| " }\n" |
| " stop_watch off\n" |
| " }\n" |
| " if {$client_tail == \"\" && $client_sock == \"\"} {\n" |
| " set m \"\\n\"\n" |
| " set m \"${m}tkx11vnc:\\n\"\n" |
| " set m \"${m}\\n\"\n" |
| " set m \"${m} Warning -- running in icon/tray mode but the\\n\"\n" |
| " set m \"${m} connected client info channel from x11vnc is\\n\"\n" |
| " set m \"${m} not working. The viewer client list and icon\\n\"\n" |
| " set m \"${m} color indicator will not be accurate.\\n\"\n" |
| " set m \"${m}\\n\"\n" |
| " set m \"${m} You may need to restart \\\"x11vnc -gui tray ...\\\"\\n\"\n" |
| " set m \"${m} for this to work properly.\\n\"\n" |
| " set m \"${m}\\n\"\n" |
| " textwin \"Warning\" \"Warning\" $m\n" |
| " update\n" |
| " }\n" |
| " dtime C\n" |
| "}\n" |
| "\n" |
| "proc clean_client_tail {} {\n" |
| " global client_tail client_info_read\n" |
| " if [info exists client_tail] {\n" |
| " if {$client_tail != \"\"} {\n" |
| " set p \"\"\n" |
| " catch {set p [pid $client_tail]}\n" |
| " if {$p != \"\"} {\n" |
| " catch {exec kill -TERM $p >/dev/null 2>/dev/null}\n" |
| " }\n" |
| " catch {close $client_tail}\n" |
| " set client_tail \"\"\n" |
| " }\n" |
| " }\n" |
| " set client_info_read 0\n" |
| "}\n" |
| "\n" |
| "proc clean_icon_exit {} {\n" |
| " clean_client_tail\n" |
| " push_new_value \"stop\" \"stop\" 1 0\n" |
| " set_connected no\n" |
| " update\n" |
| " destroy .\n" |
| " exit\n" |
| "}\n" |
| "\n" |
| "proc make_gui {mode} {\n" |
| " global icon_mode tray_embed tray_running full_win icon_win\n" |
| " global top_widget_names x11vnc_gui_geom\n" |
| " global gui_current_state make_gui_count\n" |
| " global x11vnc_connect connected_to_x11vnc\n" |
| " global x11_display\n" |
| " global gui_start_mode\n" |
| "\n" |
| " incr make_gui_count\n" |
| "\n" |
| " if {$gui_start_mode == \"\"} {\n" |
| " set gui_start_mode $mode\n" |
| " }\n" |
| "\n" |
| " wm withdraw .\n" |
| "\n" |
| " set full_geom \"\"\n" |
| " if {[winfo exists .full]} {\n" |
| " catch {set full_geom [wm geometry .full]}\n" |
| " }\n" |
| "\n" |
| " set fw .full\n" |
| " set full_win $fw\n" |
| " catch {pack forget $full_win}\n" |
| " catch {pack forget $icon_win}\n" |
| " catch {destroy $full_win}\n" |
| " catch {destroy $icon_win}\n" |
| "\n" |
| " wm minsize . 1 1\n" |
| "\n" |
| " set gui_current_state \"\"\n" |
| "\n" |
| " if {$mode == \"full\"} {\n" |
| " frame $fw\n" |
| " set icon_mode 0\n" |
| "\n" |
| " wm protocol . WM_DELETE_WINDOW \"destroy .; exit\"\n" |
| " make_widgets $fw\n" |
| "\n" |
| " set w \".\"\n" |
| " wm geometry $w \"\"\n" |
| " if {$x11vnc_gui_geom != \"\"} {\n" |
| " set doit 1\n" |
| " if {[regexp {x} $x11vnc_gui_geom]} {\n" |
| " if {$gui_start_mode != $mode} {\n" |
| " set doit 0\n" |
| " }\n" |
| " }\n" |
| " if {$doit} {\n" |
| " wm geometry $w $x11vnc_gui_geom\n" |
| " }\n" |
| " }\n" |
| " pack $fw -fill both -expand 1\n" |
| "\n" |
| " } elseif {$mode == \"icon\" || $mode == \"tray\"} {\n" |
| "\n" |
| " toplevel $fw\n" |
| " wm withdraw $fw\n" |
| "\n" |
| " wm protocol $fw WM_DELETE_WINDOW \"wm withdraw .full\"\n" |
| " wm protocol . WM_DELETE_WINDOW \"clean_icon_exit\"\n" |
| " \n" |
| " if {$mode == \"icon\"} {\n" |
| " set tray_embed 0\n" |
| " } elseif {$mode == \"tray\"} {\n" |
| " set tray_embed 1\n" |
| " }\n" |
| " set icon_mode 1\n" |
| " make_widgets $fw\n" |
| " set w $fw\n" |
| " make_icon\n" |
| " wm geometry $fw \"\"\n" |
| " wm geometry . \"\"\n" |
| " } else {\n" |
| " return\n" |
| " }\n" |
| " set_view_variable $mode\n" |
| " set gui_current_state $mode\n" |
| "\n" |
| "\n" |
| " update\n" |
| " if {!$tray_embed || !$tray_running} {\n" |
| " wm deiconify .\n" |
| " }\n" |
| " update idletasks\n" |
| " wm minsize $w [winfo width $w] [winfo height $w]\n" |
| " if {$mode == \"full\" && $make_gui_count > 1} {\n" |
| " center_win .\n" |
| " }\n" |
| "\n" |
| "\n" |
| " if {$make_gui_count == 1} {\n" |
| " copy_default_vars\n" |
| " if {$x11vnc_connect} {\n" |
| " try_connect_and_query_all\n" |
| " } else {\n" |
| " insert_cmdline_vars\n" |
| " }\n" |
| " } else {\n" |
| " set_name \"RESTORE\"\n" |
| " }\n" |
| "\n" |
| " setup_client_tail\n" |
| "\n" |
| " set_widgets\n" |
| "\n" |
| " if {$mode == \"tray\"} {\n" |
| " setup_tray_embed\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc make_widgets {top} {\n" |
| " global template make_gui_count\n" |
| " global menu_b menu_m menu_count\n" |
| " global item_opts item_bool item_case item_menu item_entry menu_var unset_str\n" |
| " global item_cascade\n" |
| " global info_label info_str x11_display vnc_display\n" |
| " global text_area text_area_str\n" |
| " global entry_box entry_str entry_set entry_label entry_ok entry_browse\n" |
| " global entry_help entry_skip\n" |
| " global bfont ffont beginner_mode\n" |
| " global helptext helpremote helplabel\n" |
| " global icon_mode icon_win props_win full_win\n" |
| " global top_widget_names\n" |
| " global screen_height screen_width\n" |
| "\n" |
| "\n" |
| " # Make the top label\n" |
| " set label_width 84\n" |
| " if {$screen_width <= 400} {\n" |
| " set label_width 64\n" |
| " }\n" |
| " set info_label \"$top.info\"\n" |
| " label $info_label -textvariable info_str -bd 2 -relief groove \\\n" |
| " -anchor w -width $label_width -font $ffont\n" |
| " pack $info_label -side top -fill x -expand 0\n" |
| "\n" |
| " set top_widget_names(info) $info_label\n" |
| "\n" |
| " # Extract the Rows:\n" |
| " set row 0;\n" |
| " set colmax 0;\n" |
| " foreach line [split $template \"\\n\"] {\n" |
| " if {[regexp {^Row: (.*)} $line rest]} {\n" |
| " set col 0\n" |
| " foreach case [split $rest] {\n" |
| " if {$case == \"\" || $case == \"Row:\"} {\n" |
| " continue\n" |
| " }\n" |
| " set menu_row($case) $row\n" |
| " set menu_col($case) $col\n" |
| "\n" |
| " lappend cases($col) $case;\n" |
| " set len [string length $case]\n" |
| " if {[info exists max_len($col)]} {\n" |
| " if {$len > $max_len($col)} {\n" |
| " set max_len($col) $len\n" |
| " }\n" |
| " } else {\n" |
| " set max_len($col) $len\n" |
| " }\n" |
| " incr col\n" |
| " if {$col > $colmax} {\n" |
| " set colmax $col\n" |
| " }\n" |
| " }\n" |
| " incr row;\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " # Make frames for the rows and make the menu buttons.\n" |
| " set f \"$top.menuframe\"\n" |
| " frame $f\n" |
| " for {set c 0} {$c < $colmax} {incr c} {\n" |
| " set colf \"$f.menuframe$c\"\n" |
| " frame $colf\n" |
| " pack $colf -side left -fill y\n" |
| " set fbg [$colf cget -background]\n" |
| " foreach case $cases($c) {\n" |
| " set menub \"$colf.menu$case\";\n" |
| " set menu \"$colf.menu$case.menu\";\n" |
| " set menu_b($case) $menub\n" |
| " set menu_m($case) $menu\n" |
| " set ul 0\n" |
| " foreach char [split $case \"\"] {\n" |
| " set char [string tolower $char]\n" |
| " if {![info exists underlined($char)]} {\n" |
| " set underlined($char) 1\n" |
| " break\n" |
| " }\n" |
| " incr ul\n" |
| " }\n" |
| " global osname\n" |
| " set tstr \"$case\"\n" |
| " if {$osname == \"Darwin\"} {\n" |
| " #set tstr \" $case \"\n" |
| " }\n" |
| " menubutton $menub -text \"$tstr\" -underline $ul \\\n" |
| " -anchor w -menu $menu -background $fbg \\\n" |
| " -font $bfont\n" |
| " pack $menub -side top -fill x\n" |
| " menu $menu -tearoff 0 -postcommand menu_posted\n" |
| " }\n" |
| " }\n" |
| " pack $f -side top -fill x\n" |
| " set top_widget_names(menuframe) $f\n" |
| "\n" |
| " make_menu_items\n" |
| "\n" |
| " # Make the x11 and vnc display label bar:\n" |
| " set df \"$top.displayframe\"\n" |
| " frame $df -bd 1 -relief groove\n" |
| " set top_widget_names(displayframe) $df\n" |
| "\n" |
| " set df_x11 \"$df.xdisplay\"\n" |
| "\n" |
| " if {$make_gui_count == 1} {\n" |
| " no_x11_display\n" |
| " }\n" |
| " set lw [expr {$label_width / 2}]\n" |
| " label $df_x11 -textvariable x11_display -width $lw -anchor w \\\n" |
| " -font $ffont\n" |
| "\n" |
| " set df_vnc \"$df.vdisplay\"\n" |
| "\n" |
| " if {$make_gui_count == 1} {\n" |
| " no_vnc_display\n" |
| " }\n" |
| " label $df_vnc -textvariable vnc_display -width $lw -anchor w \\\n" |
| " -font $ffont\n" |
| "\n" |
| " pack $df_x11 $df_vnc -side left \n" |
| " pack $df -side top -fill x\n" |
| "\n" |
| " # text area\n" |
| " global text_height\n" |
| " set text_area \"$top.text\"\n" |
| " if {$screen_width <= 400} {\n" |
| " text $text_area -height $text_height -width $label_width \\\n" |
| " -relief ridge -font $ffont\n" |
| " } else {\n" |
| " text $text_area -height $text_height -relief ridge -font $ffont\n" |
| " }\n" |
| " pack $text_area -side top -fill both -expand 1\n" |
| " set top_widget_names(text) $text_area\n" |
| "\n" |
| "\n" |
| " if {$text_area_str == \"\"} {\n" |
| " set str \"Click Help -> gui for overview.\"\n" |
| " append_text \"\\n$str\\n\\n\"\n" |
| " } else {\n" |
| " append_text $text_area_str\n" |
| " }\n" |
| "\n" |
| " # Make entry box stuff\n" |
| " set ef \"$top.entryframe\"\n" |
| " frame $ef -bd 1 -relief groove\n" |
| " set top_widget_names(entryframe) $ef\n" |
| "\n" |
| " # Entry Label\n" |
| " set ef_label \"$ef.label\"\n" |
| " label $ef_label -textvariable entry_str -anchor w -font $bfont\n" |
| "\n" |
| " set entry_str \"Set... : \"\n" |
| " set ef_entry \"$ef.entry\"\n" |
| " entry $ef_entry -relief sunken -font $ffont\n" |
| " bind $ef_entry <KeyPress-Return> {set entry_set 1}\n" |
| " bind $ef_entry <KeyPress-Escape> {set entry_set 0}\n" |
| "\n" |
| " set ok_s \"OK\"\n" |
| " set cancel_s \"Cancel\"\n" |
| " set help_s \"Help\"\n" |
| " set browse_s \"Browse...\"\n" |
| " global osname\n" |
| " if {$osname == \"Darwin\"} {\n" |
| " set ok_s \" OK \"\n" |
| " set cancel_s \" Cancel \"\n" |
| " set help_s \" Help \"\n" |
| " set browse_s \" Browse... \"\n" |
| " }\n" |
| "\n" |
| " # Entry OK button\n" |
| " set bpx \"1m\"\n" |
| " set bpy \"1\"\n" |
| " set hlt \"0\"\n" |
| " set ef_ok \"$ef.ok\"\n" |
| " button $ef_ok -text $ok_s -pady $bpy -padx $bpx -command {set entry_set 1} \\\n" |
| " -highlightthickness $hlt \\\n" |
| " -font $bfont\n" |
| "\n" |
| " # Entry Skip button\n" |
| " set ef_skip \"$ef.skip\"\n" |
| " button $ef_skip -text $cancel_s -pady $bpy -padx $bpx -command {set entry_set 0} \\\n" |
| " -highlightthickness $hlt \\\n" |
| " -font $bfont\n" |
| "\n" |
| " # Entry Help button\n" |
| " set ef_help \"$ef.help\"\n" |
| " button $ef_help -text $help_s -pady $bpy -padx $bpx -command \\\n" |
| " {menu_help $entry_dialog_item} -font $bfont \\\n" |
| " -highlightthickness $hlt\n" |
| "\n" |
| " # Entry Browse button\n" |
| " set ef_browse \"$ef.browse\"\n" |
| " button $ef_browse -text $browse_s -pady $bpy -padx $bpx -font $bfont \\\n" |
| " -highlightthickness $hlt \\\n" |
| " -command {entry_insert [tk_getOpenFile]} \n" |
| "\n" |
| " pack $ef_label -side left\n" |
| " pack $ef_entry -side left -fill x -expand 1\n" |
| " pack $ef_ok -side right\n" |
| " pack $ef_skip -side right\n" |
| " pack $ef_help -side right\n" |
| " pack $ef -side bottom -fill x\n" |
| "\n" |
| " set entry_ok $ef_ok\n" |
| " set entry_skip $ef_skip\n" |
| " set entry_help $ef_help\n" |
| " set entry_box $ef_entry\n" |
| " set entry_browse $ef_browse\n" |
| " set entry_label $ef_label\n" |
| " entry_disable\n" |
| "\n" |
| "}\n" |
| "\n" |
| "proc menu_bindings {m} {\n" |
| " set db 0\n" |
| " if {$db} {puts \"menu_bindings $m\"}\n" |
| "\n" |
| " bind $m <<MenuSelect>> {\n" |
| "#syntax hilite bug \\\n" |
| "MenuSelect>>\n" |
| " set n [%W index active]\n" |
| " set db 0\n" |
| " if {$db} {puts stderr \"menu_bindings %W $n\"}\n" |
| " set label \" \"\n" |
| " if {$n != \"none\"} {\n" |
| " set str %W,$n\n" |
| " set which \"\"\n" |
| "\n" |
| " if {$db} {puts \"menu_bindings $str\"}\n" |
| " if {[info exists helplabel($str)]} {\n" |
| " set vname [format %%-16s $helplabel($str)]\n" |
| " set label \"Click (?) for help on: $vname\"\n" |
| " set which $helplabel($str)\n" |
| " }\n" |
| " if {$which == \"\"} {\n" |
| " ;\n" |
| " } elseif {$which == \"passwd\" || $which == \"viewpasswd\"} {\n" |
| " ;\n" |
| " } elseif {[is_action $which]} {\n" |
| " if {[info exists menu_var($which)] \n" |
| " && $menu_var($which) != \"\"} {\n" |
| " set label \"$label value: $menu_var($which)\"\n" |
| " } else {\n" |
| " set label \"$label (is action)\"\n" |
| " }\n" |
| " } elseif {[info exists menu_var($which)]} {\n" |
| " set label \"$label value: $menu_var($which)\"\n" |
| " if {$which == \"http\"} {\n" |
| " global vnc_url\n" |
| " set label \"$label URL: $vnc_url\"\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| " set_info $label\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc key_bindings {} {\n" |
| " global env menus_disabled\n" |
| " if {[info exists env(USER)] && $env(USER) == \"runge\"} {\n" |
| " # quick restart\n" |
| " bind . <Control-KeyPress-k> {exec $argv0 $argv &; destroy .}\n" |
| " }\n" |
| " bind . <Control-KeyPress-p> { \\\n" |
| " global menus_disabled; \\\n" |
| " if {!$menus_disabled} {try_connect_and_query_all} \\\n" |
| " }\n" |
| " bind . <Control-KeyPress-u> { \\\n" |
| " global menus_disabled; \\\n" |
| " if {!$menus_disabled} {query_all 0} \\\n" |
| " }\n" |
| " bind . <Control-KeyPress-r> { \\\n" |
| " global menus_disabled; \\\n" |
| " if {!$menus_disabled} {query_all 0} \\\n" |
| " }\n" |
| " bind . <Control-KeyPress-d> { \\\n" |
| " global menus_disabled; \\\n" |
| " if {!$menus_disabled} {detach_from_display} \\\n" |
| " }\n" |
| " bind . <Control-KeyPress-a> { \\\n" |
| " global menus_disabled; \\\n" |
| " if {!$menus_disabled} {try_connect_and_query_all} \\\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc stop_watch {onoff} {\n" |
| " global orig_cursor text_area entry_box\n" |
| "\n" |
| " set widgets [list .]\n" |
| " if [info exists text_area] {\n" |
| " if {$text_area != \"\"} {\n" |
| " lappend widgets $text_area\n" |
| " }\n" |
| " }\n" |
| " if [info exists entry_box] {\n" |
| " if {$entry_box != \"\"} {\n" |
| " lappend widgets $entry_box\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " if {$onoff == \"on\"} {\n" |
| " foreach item $widgets {\n" |
| " if {![winfo exists $item]} {\n" |
| " continue\n" |
| " }\n" |
| " $item config -cursor {watch}\n" |
| " }\n" |
| " } else {\n" |
| " foreach item $widgets {\n" |
| " if {![winfo exists $item]} {\n" |
| " continue\n" |
| " }\n" |
| " $item config -cursor {}\n" |
| " }\n" |
| " }\n" |
| " update\n" |
| "}\n" |
| "\n" |
| "proc double_check_noremote {} {\n" |
| " set msg \"\\n\\n\"\n" |
| " append msg \"*** WARNING: setting \\\"noremote\\\" will disable ALL remote control commands (i.e.\\n\"\n" |
| " append msg \"*** WARNING: *this* gui will be locked out). Do you really want to do this?\\n\"\n" |
| " append msg \"*** WARNING: If so, press \\\"OK\\\", otherwise press \\\"Cancel\\\"\\n\"\n" |
| " append msg \"\\n\"\n" |
| " bell\n" |
| " return [warning_dialog $msg \"noremote\"]\n" |
| "}\n" |
| "\n" |
| "proc get_settings_rcfile {} {\n" |
| " global menu_var default_var unset_str\n" |
| " global x11vnc_gui_params\n" |
| "\n" |
| " set rc_txt \"\"\n" |
| "\n" |
| " set menu_var(gui) $x11vnc_gui_params\n" |
| "\n" |
| " foreach item [lsort [array names menu_var]] {\n" |
| " if {$item == \"gui\"} {\n" |
| " ;\n" |
| " } elseif {![active_when_starting $item]} {\n" |
| " continue\n" |
| " } elseif {[is_action $item]} {\n" |
| " continue\n" |
| " }\n" |
| " if {$item == \"debug_gui\"} {\n" |
| " continue\n" |
| " } elseif {$item == \"WindowView\"} {\n" |
| " continue\n" |
| " } elseif {$item == \"rc\" || $item == \"norc\"} {\n" |
| " continue\n" |
| " } elseif {$item == \"loop\"} {\n" |
| " continue\n" |
| " } elseif {$item == \"loopbg\"} {\n" |
| " continue\n" |
| " }\n" |
| "\n" |
| " set def \"\"\n" |
| " if {[info exists default_var($item)]} {\n" |
| " set def $default_var($item)\n" |
| " }\n" |
| "\n" |
| "\n" |
| " set qst \"\"\n" |
| " set hmm \"#? \"\n" |
| " if {$item == \"display\"} {\n" |
| " set qst $hmm\n" |
| " } elseif {$item == \"desktop\"} {\n" |
| " set qst $hmm\n" |
| " } elseif {$item == \"dontdisconnect\"} {\n" |
| " set qst $hmm\n" |
| " } elseif {$item == \"alwaysshared\"} {\n" |
| " set qst $hmm\n" |
| " } elseif {$item == \"nevershared\"} {\n" |
| " set qst $hmm\n" |
| " } elseif {$item == \"gui\"} {\n" |
| " set qst $hmm\n" |
| " }\n" |
| "\n" |
| " if {![info exists menu_var($item)]} {\n" |
| " set mv $def\n" |
| " } else {\n" |
| " set mv $menu_var($item)\n" |
| " }\n" |
| "#puts \"item=$item def=$def mv=$mv\"\n" |
| " if {$mv == $unset_str} {\n" |
| " set mv \"\"\n" |
| " }\n" |
| " set ntab 3\n" |
| "\n" |
| " if {$item == \"gui\" || [value_is_string $item]} {\n" |
| " set nitem [get_nitem $item]\n" |
| "\n" |
| " if {$mv == \"\" && $def != \"\"} {\n" |
| " set qst $hmm\n" |
| " }\n" |
| " set n 0\n" |
| " if {$qst != \"\"} {\n" |
| " append rc_txt $qst\n" |
| " incr n [string length $qst]\n" |
| " } elseif {$mv == $def} {\n" |
| " append rc_txt \"#d \"\n" |
| " incr n [string length \"#d \"]\n" |
| " }\n" |
| " set mt $mv\n" |
| " regsub -all {#} $mt {\\#} mt\n" |
| " if {$mt == \"\"} {\n" |
| " set mt {\"\"}\n" |
| " }\n" |
| " append rc_txt \"-$nitem $mt\"\n" |
| "\n" |
| " if {$mv != $def} {\n" |
| " set m [string length \"-$nitem $mt\"]\n" |
| " incr n $m\n" |
| " set n [expr $n / 8]\n" |
| " set c 0\n" |
| " for {set i $n} {$i <= $ntab} {incr i} {\n" |
| " append rc_txt \"\\t\"\n" |
| " incr c\n" |
| " }\n" |
| " if {$c == 0} {\n" |
| " append rc_txt \"\\t\"\n" |
| " }\n" |
| " regsub -all {#} $def {\\#} def\n" |
| " if {$def == \"\"} {\n" |
| " set def {\"\"}\n" |
| " }\n" |
| " append rc_txt \"# default: $def\"\n" |
| " }\n" |
| " append rc_txt \"\\n\"\n" |
| "\n" |
| " } elseif {[value_is_bool $item]} {\n" |
| " set n 0\n" |
| " if {$qst != \"\"} {\n" |
| " append rc_txt $qst\n" |
| " incr n [string length $qst]\n" |
| " } elseif {$mv == $def} {\n" |
| " append rc_txt \"#d \"\n" |
| " incr n [string length \"#d \"]\n" |
| " }\n" |
| " if {$def == 1} {\n" |
| " set dv \"on\"\n" |
| " } else {\n" |
| " set dv \"off\"\n" |
| " }\n" |
| " append rc_txt \"-$item\"\n" |
| " set m [string length \"-$item\"]\n" |
| " incr n $m\n" |
| " set n [expr $n / 8]\n" |
| " for {set i $n} {$i <= $ntab} {incr i} {\n" |
| " append rc_txt \"\\t\"\n" |
| " }\n" |
| " append rc_txt \"# default: $dv\"\n" |
| " append rc_txt \"\\n\"\n" |
| "\n" |
| " }\n" |
| " }\n" |
| " return $rc_txt\n" |
| "}\n" |
| "\n" |
| "proc double_check_start_x11vnc {} {\n" |
| " global hostname\n" |
| " set msg [get_start_x11vnc_txt]\n" |
| " bell\n" |
| " append msg \"\\n\"\n" |
| " append msg \"*** To run the above command on machine \\\"$hostname\\\" (thereby\\n\"\n" |
| " append msg \"*** starting x11vnc) press \\\"OK\\\", otherwise press \\\"Cancel\\\".\\n\"\n" |
| " return [warning_dialog $msg \"start\"]\n" |
| "}\n" |
| "\n" |
| "proc get_start_x11vnc_txt {} {\n" |
| " set cmd [get_start_x11vnc_cmd]\n" |
| " set str [join $cmd]\n" |
| " set msg \"\"\n" |
| " append msg \"\\n\"\n" |
| " append msg \"==== The command built so far is: ====\\n\";\n" |
| " append msg \"\\n\"\n" |
| " append msg \"$str\\n\"\n" |
| " return $msg\n" |
| "}\n" |
| "\n" |
| "proc show_start_cmd {} {\n" |
| " set msg [get_start_x11vnc_txt]\n" |
| " append_text \"$msg\\n\"\n" |
| "}\n" |
| "\n" |
| "proc get_nitem {item} {\n" |
| " set nitem $item\n" |
| " if {$nitem == \"screen_blank\"} {\n" |
| " set nitem \"sb\"\n" |
| " } elseif {$nitem == \"xrandr_mode\"} {\n" |
| " set nitem \"xrandr\"\n" |
| " } elseif {$nitem == \"unixpw_list\"} {\n" |
| " set nitem \"unixpw\"\n" |
| " } elseif {$nitem == \"unixpw_nis_list\"} {\n" |
| " set nitem \"unixpw_nis\"\n" |
| " } elseif {$nitem == \"stunnel_pem\"} {\n" |
| " set nitem \"stunnel\"\n" |
| " } elseif {$nitem == \"ssl_pem\"} {\n" |
| " set nitem \"ssl\"\n" |
| " } elseif {$nitem == \"wireframe_mode\"} {\n" |
| " set nitem \"wireframe\"\n" |
| " } elseif {$nitem == \"solid_color\"} {\n" |
| " set nitem \"solid\"\n" |
| " }\n" |
| " return $nitem\n" |
| "}\n" |
| "\n" |
| "proc get_start_x11vnc_cmd {{show_rc 0}} {\n" |
| " global cmd_var menu_var default_var unset_str x11vnc_prog\n" |
| "\n" |
| " set xterm_cmd \"xterm -iconic -geometry 80x35 -title x11vnc-console -e\"\n" |
| "\n" |
| " set cmd [split $xterm_cmd]\n" |
| "\n" |
| " lappend cmd $x11vnc_prog\n" |
| "\n" |
| " lappend cmd \"-gui\"\n" |
| " lappend cmd \"none\"\n" |
| "\n" |
| " set rc_txt \"\"\n" |
| "\n" |
| " set saw_id 0\n" |
| "\n" |
| " foreach item [lsort [array names menu_var]] {\n" |
| " if {$item == \"gui\"} {\n" |
| " continue\n" |
| " } elseif {![active_when_starting $item]} {\n" |
| " continue\n" |
| " } elseif {[is_action $item]} {\n" |
| " continue\n" |
| " } elseif {$item == \"debug_gui\"} {\n" |
| " continue\n" |
| " } elseif {$item == \"WindowView\"} {\n" |
| " continue\n" |
| " }\n" |
| "\n" |
| " if {$item == \"id\" || $item == \"sid\"} {\n" |
| " set val $menu_var($item);\n" |
| " if {$val == \"0x0\" || $val == \"root\"} {\n" |
| " continue\n" |
| " }\n" |
| " }\n" |
| " if {$item == \"sid\" && $saw_id} {\n" |
| " continue\n" |
| " }\n" |
| " if {$item == \"id\"} {\n" |
| " set saw_id 1\n" |
| " } elseif {$item == \"httpport\" && $menu_var($item) == \"0\"} {\n" |
| " continue\n" |
| " } elseif {$item == \"progressive\" && $menu_var($item) == \"0\"} {\n" |
| " continue\n" |
| " } elseif {$item == \"dontdisconnect\" && $menu_var($item) == \"-1\"} {\n" |
| " continue\n" |
| " } elseif {$item == \"alwaysshared\" && $menu_var($item) == \"-1\"} {\n" |
| " continue\n" |
| " }\n" |
| "\n" |
| " if {[value_is_bool $item]} {\n" |
| " if {[info exists menu_var($item)]} {\n" |
| " set add 1\n" |
| " if {[info exists default_var($item)]} {\n" |
| " if {$menu_var($item) == $default_var($item)} {\n" |
| " set add 0;\n" |
| " }\n" |
| " } elseif {! $menu_var($item)} {\n" |
| " set add 0\n" |
| " }\n" |
| " if {$add} {\n" |
| " lappend cmd \"-$item\"\n" |
| " append rc_txt \"-$item\\n\"\n" |
| " }\n" |
| " }\n" |
| " } elseif {[value_is_string $item]} {\n" |
| " if {![info exists menu_var($item)]} {\n" |
| " continue\n" |
| " }\n" |
| " if {$menu_var($item) != \"\" && $menu_var($item) != $unset_str} {\n" |
| " set add 1\n" |
| " set nitem [get_nitem $item]\n" |
| "\n" |
| " if {[info exists default_var($item)]} {\n" |
| " if {$menu_var($item) == $default_var($item)} {\n" |
| " set add 0;\n" |
| " }\n" |
| " }\n" |
| " if {$add} {\n" |
| " lappend cmd \"-$nitem\"\n" |
| " set mv $menu_var($item)\n" |
| "\n" |
| " if {[regexp {^~} $mv]} {\n" |
| " if {$item == \"auth\" ||\n" |
| " $item == \"rc\" ||\n" |
| " $item == \"accept\" || \n" |
| " $item == \"connect\" || \n" |
| " $item == \"allow\" || \n" |
| " $item == \"passwdfile\" || \n" |
| " $item == \"o\" || \n" |
| " $item == \"logfile\" || \n" |
| " $item == \"remap\" || \n" |
| " $item == \"httpdir\"} { \n" |
| " set mv [tilde_expand $mv]\n" |
| " }\n" |
| " }\n" |
| " \n" |
| " lappend cmd $mv\n" |
| " set mt $mv\n" |
| " regsub -all {#} $mt {\\#} mt\n" |
| " append rc_txt \"-$nitem $mt\\n\"\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| " lappend cmd \"2>\"\n" |
| " lappend cmd \"/dev/null\"\n" |
| " lappend cmd \"&\"\n" |
| " \n" |
| " if {$show_rc} {\n" |
| " return $rc_txt\n" |
| " } else {\n" |
| " return $cmd\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc start_x11vnc {} {\n" |
| " global menu_var unset_str\n" |
| " global x11vnc_prog x11vnc_xdisplay\n" |
| " global connected_to_x11vnc\n" |
| "\n" |
| " if {$connected_to_x11vnc} {\n" |
| " append_text \"\\n\"\n" |
| " append_text \"WARNING: Still connected to an x11vnc server.\\n\"\n" |
| " append_text \"WARNING: Use \\\"stop\\\" or \\\"detach\\\" first.\\n\"\n" |
| " return 0\n" |
| " }\n" |
| "\n" |
| " if {![double_check_start_x11vnc]} {\n" |
| " return\n" |
| " }\n" |
| "\n" |
| " set x11vnc_xdisplay \"\"\n" |
| " if {[info exists menu_var(display)]} {\n" |
| " if {$menu_var(display) != \"\" && $menu_var(display) != $unset_str} {\n" |
| " set x11vnc_xdisplay $menu_var(display)\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " set cmd [get_start_x11vnc_cmd]\n" |
| "\n" |
| " set str [join $cmd]\n" |
| " regsub { -e} $str \" -e \\\\\\n \" str\n" |
| "\n" |
| " if {0} {\n" |
| " puts \"running: $str\"\n" |
| " foreach word $cmd {\n" |
| " puts \" word: $word\"\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " append_text \"Starting x11vnc in an iconified xterm with command:\\n\"\n" |
| " append_text \" $str\\n\\n\"\n" |
| " catch {[eval exec $cmd]}\n" |
| " after 500\n" |
| " try_connect_and_query_all 3\n" |
| " if {!$connected_to_x11vnc} {\n" |
| " append_text \"\\nStarting x11vnc seems to have failed.\\n\"\n" |
| " if {[regexp -- {-o } $str] || [regexp -- {-logfile} $str]} {\n" |
| " append_text \"Examine the logfile (Debugging -> show-logfile) for error messages.\\n\"\n" |
| " } else {\n" |
| " append_text \"Rerun with a logfile (if needed) and examine the logfile\\n\"\n" |
| " append_text \"(Debugging -> show-logfile) for error messages.\\n\"\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc run_remote_cmd_via_sock {opts} {\n" |
| " global client_sock\n" |
| "\n" |
| " set db 0\n" |
| " if {[file channels $client_sock] == \"\"} {\n" |
| " set client_sock \"\"\n" |
| " return \"fail\"\n" |
| " }\n" |
| " if {[eof $client_sock]} {\n" |
| " catch {close $client_sock}\n" |
| " set client_sock \"\"\n" |
| " return \"fail\"\n" |
| " }\n" |
| " set result \"\"\n" |
| " \n" |
| " setup_client_sock 0\n" |
| "\n" |
| " set docmd \"\"\n" |
| " foreach opt $opts {\n" |
| " if {$opt == \"-R\"} {\n" |
| " set docmd \"-R\"\n" |
| " continue\n" |
| " } elseif {$opt == \"-Q\"} {\n" |
| " set docmd \"-Q\"\n" |
| " continue\n" |
| " }\n" |
| "\n" |
| " if {$docmd == \"\"} {\n" |
| " continue\n" |
| " } elseif {$docmd == \"-R\"} {\n" |
| " set str \"cmd=$opt\"\n" |
| " } elseif {$docmd == \"-Q\"} {\n" |
| " set str \"qry=$opt\"\n" |
| " } else {\n" |
| " set docmd \"\"\n" |
| " continue\n" |
| " }\n" |
| "\n" |
| " if {$db} {puts stderr \"run_remote_cmd_via_sock: $docmd \\\"$str\\\"\"}\n" |
| " catch {puts $client_sock $str}\n" |
| " if {$db} {puts stderr \"run_remote_cmd_via_sock: flush\"}\n" |
| " catch {flush $client_sock}\n" |
| " if {$db} {puts stderr \"run_remote_cmd_via_sock: gets\"}\n" |
| " catch {gets $client_sock res}\n" |
| " if {$db} {puts stderr \"run_remote_cmd_via_sock: \\\"$res\\\"\"}\n" |
| " set res [string trim $res]\n" |
| "\n" |
| " if [regexp {=clients:} $res] {\n" |
| " regsub {^.*=clients:} $res \"\" cres\n" |
| " regsub {,aro=.*$} $cres \"\" cres\n" |
| " regsub {,ans=.*$} $cres \"\" cres\n" |
| " if {$cres == \"none\"} {\n" |
| " set cres \"\"\n" |
| " }\n" |
| " update_clients_menu $cres\n" |
| " set client_str $cres\n" |
| " set_client_balloon $cres\n" |
| " }\n" |
| "\n" |
| " if [regexp {^clients:} $res] {\n" |
| " regsub {^clients:} $res \"\" tmp\n" |
| " if {$tmp == \"none\"} {\n" |
| " set tmp \"\"\n" |
| " }\n" |
| " update_clients_menu $tmp\n" |
| " set client_str $tmp\n" |
| " set_client_balloon $tmp\n" |
| "\n" |
| " if ![regexp {^clients} $opt] {\n" |
| " # we could block here...\n" |
| " if {$db} {puts stderr \"run_remote_cmd_via_sock: gets\"}\n" |
| " gets $client_sock res\n" |
| " if {$db} {puts stderr \"run_remote_cmd_via_sock: \\\"$res\\\"\"}\n" |
| " set res [string trim $res]\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " set docmd \"\"\n" |
| "\n" |
| " if {$res != \"\"} {\n" |
| " append result \"$res\\n\"\n" |
| " }\n" |
| " }\n" |
| " \n" |
| " setup_client_sock 1\n" |
| "\n" |
| " set result [string trim $result]\n" |
| "\n" |
| " return $result\n" |
| "}\n" |
| "\n" |
| "proc run_remote_cmd {opts} {\n" |
| " global menu_var x11vnc_prog x11vnc_cmdline x11vnc_xdisplay\n" |
| " global x11vnc_auth_file x11vnc_connect_file\n" |
| " global client_sock\n" |
| "\n" |
| " set debug [in_debug_mode]\n" |
| "\n" |
| " if {[lindex $opts 0] == \"-R\" && [lindex $opts 1] == \"noremote\"} {\n" |
| " set str [join $opts]\n" |
| " if ![double_check_noremote] {\n" |
| " append_text \"skipping: x11vnc $str\"\n" |
| " return \"\"\n" |
| " } else {\n" |
| " append_text \"running: x11vnc $str (please do \\\"Actions -> detach\\\" to clean things up)\\n\"\n" |
| " append_text \"subsequent -R/-Q commands should fail...\"\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " if {$client_sock != \"\"} {\n" |
| " menus_disable\n" |
| " stop_watch on\n" |
| " set result [run_remote_cmd_via_sock $opts]\n" |
| " stop_watch off\n" |
| " menus_enable\n" |
| " if {$result != \"fail\"} {\n" |
| " return $result\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " set cmd \"\"\n" |
| "\n" |
| " lappend cmd $x11vnc_prog;\n" |
| "\n" |
| " if {$x11vnc_connect_file != \"\"} {\n" |
| " lappend cmd \"-connect\"\n" |
| " lappend cmd $x11vnc_connect_file\n" |
| " } else {\n" |
| " if {$x11vnc_xdisplay != \"\"} {\n" |
| " lappend cmd \"-display\"\n" |
| " lappend cmd $x11vnc_xdisplay\n" |
| " }\n" |
| " if {$x11vnc_auth_file != \"\"} {\n" |
| " lappend cmd \"-auth\"\n" |
| " lappend cmd $x11vnc_auth_file\n" |
| " }\n" |
| " }\n" |
| " lappend cmd \"-sync\"\n" |
| " foreach word $opts {\n" |
| " lappend cmd $word\n" |
| " }\n" |
| " lappend cmd \"2>\"\n" |
| " lappend cmd \"/dev/null\"\n" |
| "\n" |
| " if {0 || $debug} {\n" |
| " set str [join $cmd]\n" |
| " puts \"running: $str\"\n" |
| " foreach word $cmd {\n" |
| " puts \" word: $word\"\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " set output \"\"\n" |
| " menus_disable\n" |
| "\n" |
| " stop_watch on\n" |
| " catch {set output [eval exec $cmd]}\n" |
| " stop_watch off\n" |
| "\n" |
| " menus_enable\n" |
| " if {$debug} {\n" |
| " if {[string length $output] > 100} {\n" |
| " set str [string range $output 0 100]\n" |
| " append_text \"output: $str ...\\n\"\n" |
| " } else {\n" |
| " append_text \"output: $output\\n\"\n" |
| " }\n" |
| " }\n" |
| " return $output\n" |
| "}\n" |
| "\n" |
| "proc try_connect_and_query_all {{n 2}} {\n" |
| " for {set i 0} {$i < $n} {incr i} {\n" |
| " if {$i > 0} {\n" |
| " after 500\n" |
| " append_text \"trying again ...\\n\"\n" |
| " }\n" |
| " if {[try_connect]} {\n" |
| " query_all\n" |
| " break\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc try_connect {} {\n" |
| " global x11vnc_xdisplay connected_to_x11vnc reply_xdisplay\n" |
| " global menu_var unset_str\n" |
| "\n" |
| " set db 0\n" |
| "#dtime c1\n" |
| "\n" |
| " if {! $connected_to_x11vnc} {\n" |
| " if {[info exists menu_var(display)]} {\n" |
| " set d $menu_var(display)\n" |
| " if {$d != \"\" && $d != $unset_str && $d != $x11vnc_xdisplay} {\n" |
| " set x11vnc_xdisplay $menu_var(display)\n" |
| " append_text \"Setting X display to: $x11vnc_xdisplay\\n\"\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " set_info \"Pinging $x11vnc_xdisplay ...\"\n" |
| " set rargs [list \"-Q\" \"ping\"]\n" |
| " set result [run_remote_cmd $rargs]\n" |
| "#dtime c2a\n" |
| "\n" |
| " if {$db} {puts \"try_connect: \\\"$result\\\"\"}\n" |
| "\n" |
| " if {[regexp {^ans=ping:} $result]} {\n" |
| " regsub {^ans=ping:} $result {} reply_xdisplay\n" |
| " set msg \"Connected to $reply_xdisplay\"\n" |
| " set_info $msg\n" |
| " append_text \"$msg\\n\"\n" |
| " set_connected yes\n" |
| "\n" |
| " setup_client_channel\n" |
| "#dtime c2b\n" |
| " setup_client_sock 1\n" |
| " setup_client_tail\n" |
| "\n" |
| " fetch_displays\n" |
| "#dtime c3a\n" |
| " return 1\n" |
| " } else {\n" |
| " set str \"x11vnc server.\"\n" |
| " if {$x11vnc_xdisplay != \"\"} {\n" |
| " set str $x11vnc_xdisplay\n" |
| " }\n" |
| " set msg \"No reply from $str\"\n" |
| " set_info $msg\n" |
| " append_text \"$msg\\n\"\n" |
| " set_connected no\n" |
| " return 0\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc set_view_variable {val} {\n" |
| " global menu_var\n" |
| " set menu_var(WindowView) $val\n" |
| "}\n" |
| "proc get_view_variable {} {\n" |
| " global menu_var\n" |
| " if {![info exists menu_var(WindowView)]} {\n" |
| " set menu_var(WindowView) \"none\"\n" |
| " }\n" |
| " return $menu_var(WindowView)\n" |
| "}\n" |
| "\n" |
| "proc dono {a b c} {\n" |
| " exit 1;\n" |
| "}\n" |
| "\n" |
| "proc do_port_prompt {} {\n" |
| " global bfont ffont\n" |
| " global port_reply port_set\n" |
| "\n" |
| " set guess 5900\n" |
| " for {set i 0} {$i < 50} {incr i} {\n" |
| " set fh \"\"\n" |
| " set try [expr $guess + $i]\n" |
| " catch {set fh [socket -server dono $try]}\n" |
| " if {$fh != \"\"} {\n" |
| " catch {close $fh}\n" |
| " set guess $try\n" |
| " break;\n" |
| " }\n" |
| " }\n" |
| " set hn \"\"\n" |
| " catch {set hn [exec uname -n]}\n" |
| " if {$hn == \"\"} {\n" |
| " set hn \"hostname\"\n" |
| " }\n" |
| "\n" |
| " set text \" Set the x11vnc Listening Port:\n" |
| "\n" |
| " VNC Display :0 corresponds to TCP port 5900\n" |
| " VNC Display :1 corresponds to TCP port 5901\n" |
| " etc.\n" |
| "\n" |
| " In the Entry below, indicate a Port for x11vnc to listen on. \n" |
| "\n" |
| " Note that to connect to x11vnc, a VNC Viewer will need to\n" |
| " know your selection, for example:\n" |
| "\n" |
| " vncviewer $hn:0\n" |
| " vncviewer $hn:1\n" |
| " etc.\n" |
| "\n" |
| " Your firewall may block incoming connections to TCP ports;\n" |
| " if it does you may need to reconfigure it. \n" |
| " \n" |
| " You can also set some additional parameters:\n" |
| "\n" |
| " - Enable SSL encryption.\n" |
| " (requires an SSL enabled vncviewer, such as SSVNC) \n" |
| " - Listen only on localhost. (e.g. for an SSH tunnel)\n" |
| " - Enable UltraVNC or TightVNC File transfer.\n" |
| "\"\n" |
| " set port_set $guess\n" |
| " set port_reply \"\"\n" |
| "\n" |
| " toplevel .pp\n" |
| " wm title .pp \"Select x11vnc port\"\n" |
| "\n" |
| " wm protocol . WM_DELETE_WINDOW \"destroy .; exit\"\n" |
| " wm protocol .pp WM_DELETE_WINDOW \"destroy .pp; exit\"\n" |
| "\n" |
| " label .pp.m -text \"$text\" -relief ridge -justify left -font $ffont\n" |
| "\n" |
| " global tk_version\n" |
| " set tkold 0\n" |
| " if [info exists tk_version] {\n" |
| " if [regexp {^8\\.[0-3]$} $tk_version] {\n" |
| " set tkold 1\n" |
| " }\n" |
| " if [regexp {^[3-7]\\.} $tk_version] {\n" |
| " set tkold 1\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " if {$tkold} {\n" |
| " frame .pp.f -bd 1 -relief ridge\n" |
| " } else {\n" |
| " frame .pp.f -bd 1 -relief ridge -pady 2\n" |
| " }\n" |
| " label .pp.f.l -text \"Port: \" -font $bfont\n" |
| " entry .pp.f.e -width 8 -textvariable port_set -font $ffont\n" |
| " global enable_ssl; set enable_ssl 0\n" |
| " if [info exists env(X11VNC_SSL_ENABLED)] {\n" |
| " set enable_ssl 1\n" |
| " }\n" |
| " checkbutton .pp.f.ssl -relief raised -pady 3 -padx 3 -text \"Enable SSL\" -variable enable_ssl -font $bfont\n" |
| " global localhost; set localhost 0\n" |
| " if [info exists env(X11VNC_LOCALHOST_ENABLED)] {\n" |
| " set localhost 1\n" |
| " }\n" |
| " checkbutton .pp.f.loc -relief raised -pady 3 -padx 3 -text \"Listen on localhost\" -variable localhost -font $bfont\n" |
| " pack .pp.f.l .pp.f.e -side left\n" |
| " pack .pp.f.loc .pp.f.ssl -side right\n" |
| "\n" |
| " if {$tkold} {\n" |
| " frame .pp.t -bd 1 -relief ridge\n" |
| " } else {\n" |
| " frame .pp.t -bd 1 -relief ridge -pady 2\n" |
| " }\n" |
| " global file_transfer; set file_transfer \"none\"\n" |
| " if [info exists env(X11VNC_FILETRANSFER_ENABLED)] {\n" |
| " set file_transfer $env(X11VNC_FILETRANSFER_ENABLED)\n" |
| " }\n" |
| " label .pp.t.l -text \"File Transfer: \" -font $bfont\n" |
| " radiobutton .pp.t.none -text \"None\" -variable file_transfer -value \"none\" -font $bfont\n" |
| " radiobutton .pp.t.ultra -text \"UltraVNC\" -variable file_transfer -value \"ultra\" -font $bfont\n" |
| " radiobutton .pp.t.tight -text \"TightVNC\" -variable file_transfer -value \"tight\" -font $bfont\n" |
| " pack .pp.t.l .pp.t.none .pp.t.ultra .pp.t.tight -side left\n" |
| "\n" |
| " frame .pp.o -bd 1 -relief ridge\n" |
| " button .pp.o.ok -text \"OK\" -command \"set port_reply 1; destroy .pp\" -font $bfont\n" |
| " button .pp.o.cancel -text \"Cancel\" -command \"set port_reply 0; destroy .pp\" -font $bfont\n" |
| " pack .pp.o.ok .pp.o.cancel -side left -fill x -expand 1\n" |
| " pack .pp.m -side top -fill x -expand 1 \n" |
| " pack .pp.f .pp.t .pp.o -side top -fill x\n" |
| "\n" |
| " focus .pp.f.e\n" |
| " .pp.f.e icursor end\n" |
| "\n" |
| " wm withdraw .pp\n" |
| " update\n" |
| " center_win .pp\n" |
| "\n" |
| " wm minsize .pp [winfo width .pp] [winfo height .pp]\n" |
| "\n" |
| " bind .pp.f.e <KeyPress-Return> \"set port_reply 1; destroy .pp\"\n" |
| "\n" |
| " vwait port_reply\n" |
| "\n" |
| " if {$port_reply} {\n" |
| " regsub -all {^:} $port_set \"\" port_set\n" |
| " regsub -all {[ \\t]} $port_set \"\" port_set\n" |
| " if {[regexp {^[0-9][0-9]*$} $port_set]} {\n" |
| " if {$port_set < 0} {\n" |
| " set port_set [expr 0 - $port_set]\n" |
| " } elseif {$port_set < 200} {\n" |
| " set port_set [expr $port_set + 5900]\n" |
| " } \n" |
| " puts \"$port_set:ssl${enable_ssl}:localhost$localhost:ft_$file_transfer\"\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc change_view_state {} {\n" |
| " global menu_var gui_current_state\n" |
| "\n" |
| " set new [get_view_variable]\n" |
| "\n" |
| " if {![info exists gui_current_state]} {\n" |
| " set gui_current_state \"\"\n" |
| " }\n" |
| " set old $gui_current_state\n" |
| " #puts \"$old -> $new\"\n" |
| "\n" |
| " if {$old == $new} {\n" |
| " return\n" |
| " }\n" |
| "\n" |
| " if {$old == \"full\" || $old == \"icon\" || $old == \"tray\"} {\n" |
| " ;\n" |
| " } else {\n" |
| " set old \"none\"\n" |
| " }\n" |
| "\n" |
| " if {$new == \"full\" || $new == \"icon\" || $new == \"tray\"} {\n" |
| " if {$old == \"tray\"} {\n" |
| " # sigh XReparentWindow would be too easy...\n" |
| " # undo_tray_embed\n" |
| " restart_everything $new\n" |
| " destroy .\n" |
| " exit\n" |
| " }\n" |
| " make_gui $new\n" |
| " if {$new == \"tray\"} {\n" |
| " wm withdraw .\n" |
| " }\n" |
| " } else {\n" |
| " set_view_variable $old\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc setup_client_tail {} {\n" |
| " global client_tail\n" |
| " if {$client_tail != \"\"} {\n" |
| " fileevent $client_tail readable read_client_tail\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc setup_client_sock {{enable 1}} {\n" |
| " global client_sock\n" |
| " if {$client_sock != \"\"} {\n" |
| " if {$enable} {\n" |
| " fileevent $client_sock readable read_client_sock\n" |
| " } else {\n" |
| " fileevent $client_sock readable \"\"\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "proc setup_tray_embed {} {\n" |
| " update\n" |
| " set w [winfo width .]\n" |
| " set h [winfo height .]\n" |
| " if {$w < 24} {\n" |
| " set w 24\n" |
| " }\n" |
| " if {$h < 24} {\n" |
| " set h 24\n" |
| " }\n" |
| " wm minsize . $w $h\n" |
| " set wid [winfo id .] \n" |
| " push_new_value \"remote-cmd\" \"remote-cmd\" \"trayembed:$wid\" 0\n" |
| "}\n" |
| "\n" |
| "proc restart_everything {gui_mode} {\n" |
| " global env gui_argv0 x11vnc_prog full_win\n" |
| " global icon_mode_at_startup\n" |
| " global tray_embed tray_running\n" |
| " if {$gui_mode == \"full\"} {\n" |
| " set env(X11VNC_ICON_MODE) 0\n" |
| " } elseif {$gui_mode == \"icon\"} {\n" |
| " set env(X11VNC_ICON_MODE) 1\n" |
| " } elseif {$gui_mode == \"tray\"} {\n" |
| " if {$tray_running} {\n" |
| " set env(X11VNC_ICON_MODE) \"RUNNING\"\n" |
| " } else {\n" |
| " set env(X11VNC_ICON_MODE) \"TRAY\"\n" |
| " }\n" |
| " }\n" |
| " puts stderr \"\"\n" |
| " puts stderr \"tkx11vnc: restarting gui to leave tray mode.\"\n" |
| " puts stderr \" new gui will be running in the background.\"\n" |
| " puts stderr \" use kill(1) rather than Ctrl-C to kill it.\"\n" |
| " puts stderr \"\"\n" |
| " if {[info exists env(X11VNC_RESTART_DEPTH)]} {\n" |
| " set n $env(X11VNC_RESTART_DEPTH)\n" |
| " incr n\n" |
| " set env(X11VNC_RESTART_DEPTH) $n\n" |
| " } else {\n" |
| " set env(X11VNC_RESTART_DEPTH) 0\n" |
| " }\n" |
| " set env(X11VNC_ICON_SETPASS) \"\"\n" |
| "\n" |
| " if {![info exists env(X11VNC_WISHCMD)]} {\n" |
| " puts stderr \"failure in restart_everything.\"\n" |
| " exit 1;\n" |
| " }\n" |
| "\n" |
| " set code [exec $x11vnc_prog -printgui]\n" |
| " if {[string length $code] < 20000} {\n" |
| " puts stderr \"failure in restart_everything.\"\n" |
| " exit 1;\n" |
| " }\n" |
| " set tmp \"/tmp/x11vnc[pid]\"\n" |
| " append tmp [clock clicks]\n" |
| " set tmp2 \"\"\n" |
| " catch {set tmp2 [exec mktemp $tmp.XXXXXX 2>/dev/null]}\n" |
| " if {$tmp2 != \"\" && [file exists $tmp2]} {\n" |
| " set tmp $tmp2\n" |
| " } else {\n" |
| " file delete -force $tmp\n" |
| " if {[file exists $tmp]} {\n" |
| " puts stderr \"failure in restart_everything.\"\n" |
| " exit 1;\n" |
| " }\n" |
| " }\n" |
| " set fh [open $tmp \"a\"]\n" |
| " if {![file owned $tmp]} {\n" |
| " puts stderr \"failure in restart_everything.\"\n" |
| " exit 1;\n" |
| " }\n" |
| " file attributes $tmp -permissions \"0400\"\n" |
| " puts $fh $code\n" |
| " close $fh\n" |
| "\n" |
| " #puts stderr [exec ls -l $tmp]\n" |
| "\n" |
| " wm withdraw .\n" |
| " catch {wm withdraw $full_win}\n" |
| " update\n" |
| "\n" |
| " exec $env(X11VNC_WISHCMD) $tmp &\n" |
| " after 2000\n" |
| " file delete -force $tmp\n" |
| " \n" |
| " destroy .\n" |
| " exit\n" |
| "}\n" |
| "\n" |
| "proc undo_tray_embed {} {\n" |
| " set wid [winfo id .] \n" |
| " push_new_value \"remote-cmd\" \"remote-cmd\" \"trayunembed:$wid\" 0\n" |
| "}\n" |
| "\n" |
| "############################################################################\n" |
| "# main:\n" |
| "\n" |
| "if [info exists env(X11VNC_GUI_TIME)] {\n" |
| " dtime M\n" |
| "}\n" |
| "\n" |
| "wm withdraw .\n" |
| "\n" |
| "global env x11vnc_prog x11vnc_cmdline x11vnc_xdisplay x11vnc_connect;\n" |
| "global x11vnc_xdisplay0\n" |
| "global x11vnc_client_file x11vnc_gui_geom x11vnc_started vnc_url\n" |
| "global x11vnc_gui_params\n" |
| "global x11vnc_auth_file x11vnc_connect_file beginner_mode simple_gui_created\n" |
| "global helpall helptext helpremote helplabel hostname osname\n" |
| "global all_settings reply_xdisplay always_update\n" |
| "global max_text_height max_text_width\n" |
| "global text_height\n" |
| "global menu_var unset_str menus_disabled\n" |
| "global bfont ffont sfont snfont old_labels have_labelframes\n" |
| "global connected_to_x11vnc\n" |
| "global cache_all_query_vars\n" |
| "global last_query_all_time query_all_freq client_tail client_sock client_info_read\n" |
| "global icon_mode icon_mode_at_startup x11vnc_icon_mode\n" |
| "global tray_embed tray_running icon_setpasswd icon_embed_id\n" |
| "global icon_noadvanced icon_minimal\n" |
| "global make_gui_count text_area_str\n" |
| "global gui_argv0 gui_start_mode\n" |
| "global screen_height screen_width\n" |
| "\n" |
| "set unset_str \"(unset)\"\n" |
| "set vnc_url $unset_str\n" |
| "set connected_to_x11vnc 0\n" |
| "set menus_disabled 0\n" |
| "set max_text_height 40\n" |
| "set max_text_width 90\n" |
| "set text_height 14\n" |
| "set bfont \"-adobe-helvetica-bold-r-*-*-*-120-*-*-*-*-*-*\"\n" |
| "set sfont \"-adobe-helvetica-bold-r-*-*-*-100-*-*-*-*-*-*\"\n" |
| "set snfont \"-adobe-helvetica-medium-r-*-*-*-100-*-*-*-*-*-*\"\n" |
| "set ffont \"fixed\"\n" |
| "\n" |
| "set got_helv 0\n" |
| "catch {\n" |
| " foreach fam [font families] {\n" |
| " if {$fam == \"helvetica\"} {\n" |
| " set got_helv 1\n" |
| " }\n" |
| " if {$fam == \"Helvetica\"} {\n" |
| " set got_helv 1\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "if {$got_helv} {\n" |
| " set bfont \"Helvetica -12 bold\"\n" |
| " set sfont \"Helvetica -10 bold\"\n" |
| " set snfont \"Helvetica -10\"\n" |
| "}\n" |
| "\n" |
| "set ls \"\"\n" |
| "catch {set ls [font metrics $bfont -linespace]}\n" |
| "if {$ls != \"\" && $ls > 14} {\n" |
| " # some recent setups have BIG rendering for the above fonts.\n" |
| " # on recent (8/08) debian these are really ragged:\n" |
| " set bfont \"-adobe-helvetica-bold-r-*-*-*-90-*-*-*-*-*-*\"\n" |
| " set sfont \"-adobe-helvetica-bold-r-*-*-*-75-*-*-*-*-*-*\"\n" |
| " set snfont \"-adobe-helvetica-medium-r-*-*-*-75-*-*-*-*-*-*\"\n" |
| "\n" |
| " set ls \"\"\n" |
| " catch {set ls [font metrics $bfont -linespace]}\n" |
| " if {$ls != \"\" && $ls < 14} {\n" |
| " # these are bigger but look better... but for how long?\n" |
| " set bfont \"-adobe-helvetica-bold-r-*-*-*-100-*-*-*-*-*-*\"\n" |
| " set sfont \"-adobe-helvetica-bold-r-*-*-*-80-*-*-*-*-*-*\"\n" |
| " set snfont \"-adobe-helvetica-medium-r-*-*-*-80-*-*-*-*-*-*\"\n" |
| "\n" |
| " # maybe consider... {-font font Font {Helvetica -12 bold} {Helvetica -12 bold}}\n" |
| " # or stick with system font like ssvnc.\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "# need to check if \"fixed\" font under XFT on tk8.5 is actually fixed width!!\n" |
| "set ls \"\"\n" |
| "catch {set ls [font metrics $ffont -linespace]}\n" |
| "set fs \"\"\n" |
| "catch {set fs [font metrics $ffont -fixed]}\n" |
| "set redo 0\n" |
| "if {$fs != \"\" && $fs != \"1\"} {\n" |
| " set redo 1\n" |
| "}\n" |
| "if {$ls != \"\" && $ls > 14} {\n" |
| " set redo 1\n" |
| "}\n" |
| "if {$redo} {\n" |
| " foreach fn [font names] {\n" |
| " if {$fn == \"TkFixedFont\"} {\n" |
| " set ffont $fn\n" |
| " break\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "set help_indent 24;\n" |
| "set reply_xdisplay \"\"\n" |
| "set all_settings \"None so far.\"\n" |
| "set always_update 1\n" |
| "set cache_all_query_vars \"\"\n" |
| "set query_all_freq 120\n" |
| "set last_query_all_time [clock seconds]\n" |
| "set client_tail \"\"\n" |
| "set client_sock \"\"\n" |
| "set client_info_read 0\n" |
| "set make_gui_count 0\n" |
| "set text_area_str \"\"\n" |
| "set gui_argv0 $argv0\n" |
| "set gui_start_mode \"\"\n" |
| "\n" |
| "if {$tk_version < 8.0} {\n" |
| " puts stderr \"\"\n" |
| " puts stderr \"*** tkx11vnc: tk version is old $tk_version, please use 8.0 or higher.\"\n" |
| " puts stderr \"*** will try to continue with reduced functionality...\"\n" |
| " puts stderr \"\"\n" |
| "}\n" |
| "if {[regexp {^[34]} $tk_version] || $tk_version == \"8.0\"} {\n" |
| " set old_labels 1\n" |
| "} else {\n" |
| " set old_labels 0\n" |
| "}\n" |
| "set have_labelframes 1\n" |
| "if {$tk_version < 8.4} {\n" |
| " set have_labelframes 0\n" |
| "}\n" |
| "\n" |
| "set screen_height [winfo screenheight .]\n" |
| "set screen_width [winfo screenwidth .]\n" |
| "if {$screen_height < 700} {\n" |
| " # short screen, netbook?\n" |
| " set max_text_height 30\n" |
| " if {$screen_height < 500} {\n" |
| " # short screen, PDA?\n" |
| " set max_text_height 22\n" |
| " set text_height 13\n" |
| " if {$screen_height <= 360} {\n" |
| " # very short.\n" |
| " set max_text_height 16\n" |
| " set max_text_width 60\n" |
| " set text_height 11\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "if {[info exists env(X11VNC_GUI_TEXT_HEIGHT)]} {\n" |
| " set max_text_height $env(X11VNC_GUI_TEXT_HEIGHT)\n" |
| "}\n" |
| "if {[info exists env(X11VNC_GUI_TEXT_WIDTH)]} {\n" |
| " set max_text_width $env(X11VNC_GUI_TEXT_WIDTH)\n" |
| "}\n" |
| "\n" |
| "if {\"$argv\" == \"-spit\"} {\n" |
| " set fh [open $argv0 r]\n" |
| " puts \"#ifndef _TKX11VNC_H\"\n" |
| " puts \"#define _TKX11VNC_H\"\n" |
| " puts \"#ifdef NOGUI\"\n" |
| " puts \"char gui_code\\[\\] = \\\"\\\";\"\n" |
| " puts \"#else\"\n" |
| " puts \"/*\"\n" |
| " puts \" * tkx11vnc.h: generated by 'tkx11vnc -spit'\"\n" |
| " puts \" * Abandon all hope, ye who enter here...\"\n" |
| " puts \" * ...edit tkx11vnc instead.\"\n" |
| " puts \" */\"\n" |
| " puts \" char gui_code\\[\\] =\"\n" |
| " while {[gets $fh line] > -1} {\n" |
| " regsub -all {\\\\} $line {\\\\\\\\} line\n" |
| " regsub -all {\"} $line {\\\\\"} line\n" |
| " puts \"\\\"$line\\\\n\\\"\"\n" |
| " }\n" |
| " puts \"#endif\"\n" |
| " puts \"/* ifdef NOGUI */\"\n" |
| " puts \"#endif\"\n" |
| " puts \"/* ifndef _TKX11VNC_H */\"\n" |
| " close $fh\n" |
| " puts \";\"\n" |
| " exit 0\n" |
| "}\n" |
| "\n" |
| "set_view_variable \"full\"\n" |
| "\n" |
| "#puts [exec env | grep X11VNC]\n" |
| "\n" |
| "# Read environment for clues:\n" |
| "\n" |
| "set x11vnc_client_file \"\";\n" |
| "if {[info exists env(X11VNC_CLIENT_FILE)]} {\n" |
| " set x11vnc_client_file $env(X11VNC_CLIENT_FILE);\n" |
| " set file $x11vnc_client_file\n" |
| "\n" |
| " set client_tail \"\"\n" |
| " if {[file exists $file] && [file isfile $file]} {\n" |
| " if {[file readable $file] && [file owned $file]} {\n" |
| " set client_tail [open \"|tail -f $x11vnc_client_file\" \"r\"]\n" |
| " }\n" |
| " }\n" |
| " if {$client_tail != \"\"} {\n" |
| " gets $client_tail tmp\n" |
| " if [eof $client_tail] {\n" |
| "#puts \"eof $client_tail\"\n" |
| " clean_client_tail\n" |
| " set client_tail \"\"\n" |
| " }\n" |
| " }\n" |
| " catch {file delete -force $x11vnc_client_file}\n" |
| "}\n" |
| "\n" |
| "if {[info exists env(X11VNC_PROG)]} {\n" |
| " set x11vnc_prog $env(X11VNC_PROG);\n" |
| "} else {\n" |
| " set x11vnc_prog \"x11vnc\";\n" |
| "}\n" |
| "\n" |
| "if {[info exists env(X11VNC_CMDLINE)]} {\n" |
| " set x11vnc_cmdline $env(X11VNC_CMDLINE);\n" |
| "} else {\n" |
| " set x11vnc_cmdline \"\";\n" |
| "}\n" |
| "\n" |
| "if {[info exists env(X11VNC_CONNECT)]} {\n" |
| " set x11vnc_connect 1\n" |
| "} else {\n" |
| " set x11vnc_connect 0;\n" |
| "}\n" |
| "\n" |
| "if {[info exists env(X11VNC_GUI_GEOM)]} {\n" |
| " set x11vnc_gui_geom $env(X11VNC_GUI_GEOM);\n" |
| "} else {\n" |
| " set x11vnc_gui_geom \"\"\n" |
| "}\n" |
| "if {[info exists env(X11VNC_GUI_PARAMS)]} {\n" |
| " set x11vnc_gui_params $env(X11VNC_GUI_PARAMS);\n" |
| "} else {\n" |
| " set x11vnc_gui_params \"\"\n" |
| "}\n" |
| "\n" |
| "if {[info exists env(X11VNC_FONT_BOLD)]} {\n" |
| " set bfont $env(X11VNC_FONT_BOLD)\n" |
| "}\n" |
| "if {[info exists env(X11VNC_FONT_BOLD_SMALL)]} {\n" |
| " set sfont $env(X11VNC_FONT_BOLD_SMALL)\n" |
| "}\n" |
| "if {[info exists env(X11VNC_FONT_REG_SMALL)]} {\n" |
| " set snfont $env(X11VNC_FONT_REG_SMALL)\n" |
| "}\n" |
| "if {[info exists env(X11VNC_FONT_FIXED)]} {\n" |
| " set ffont $env(X11VNC_FONT_FIXED)\n" |
| "}\n" |
| "\n" |
| "if {[info exists env(X11VNC_CONNECT_FILE)]} {\n" |
| " set x11vnc_connect_file $env(X11VNC_CONNECT_FILE);\n" |
| "} else {\n" |
| " set x11vnc_connect_file \"\";\n" |
| "}\n" |
| "\n" |
| "set x11vnc_started 0\n" |
| "if {[info exists env(X11VNC_STARTED)]} {\n" |
| " set x11vnc_started 1\n" |
| "}\n" |
| "\n" |
| "set x11vnc_xdisplay \"\"\n" |
| "if {[info exists env(X11VNC_XDISPLAY)]} {\n" |
| " set x11vnc_xdisplay $env(X11VNC_XDISPLAY);\n" |
| " set x11vnc_connect 1\n" |
| "\n" |
| "} elseif {$argv != \"\" && [regexp {:[0-9]} $argv]} {\n" |
| " set env(X11VNC_XDISPLAY) \"$argv\"\n" |
| " set x11vnc_xdisplay \"$argv\"\n" |
| " set x11vnc_connect 1\n" |
| "\n" |
| "} elseif {[info exists env(DISPLAY)]} {\n" |
| " set x11vnc_xdisplay $env(DISPLAY);\n" |
| "} else {\n" |
| " set x11vnc_xdisplay \":0\";\n" |
| "}\n" |
| "set x11vnc_xdisplay0 $x11vnc_xdisplay\n" |
| "\n" |
| "if {[info exists env(X11VNC_AUTH_FILE)]} {\n" |
| " set x11vnc_auth_file $env(X11VNC_AUTH_FILE)\n" |
| "} else {\n" |
| " set x11vnc_auth_file \"\"\n" |
| "}\n" |
| "\n" |
| "set simple_gui_created 0\n" |
| "if {[info exists env(X11VNC_SIMPLE_GUI)]} {\n" |
| " set beginner_mode 1\n" |
| "} else {\n" |
| " set beginner_mode 0\n" |
| "}\n" |
| "\n" |
| "set icon_mode 0\n" |
| "set x11vnc_icon_mode 0\n" |
| "set tray_embed 0\n" |
| "set tray_running 0\n" |
| "\n" |
| "if {![info exists env(X11VNC_ICON_MODE_AT_STARTUP)]} {\n" |
| " if {[info exists env(X11VNC_ICON_MODE)]} {\n" |
| " if {$env(X11VNC_ICON_MODE) != 0} {\n" |
| " set env(X11VNC_ICON_MODE_AT_STARTUP) 1\n" |
| " } else {\n" |
| " set env(X11VNC_ICON_MODE_AT_STARTUP) 0\n" |
| " }\n" |
| " } else {\n" |
| " set env(X11VNC_ICON_MODE_AT_STARTUP) 0\n" |
| " }\n" |
| "}\n" |
| "set icon_mode_at_startup $env(X11VNC_ICON_MODE_AT_STARTUP)\n" |
| "\n" |
| "if {![info exists env(X11VNC_ICON_MODE)]} {\n" |
| " set icon_mode 0\n" |
| "} elseif {$env(X11VNC_ICON_MODE) == \"\" || $env(X11VNC_ICON_MODE) == \"0\"} {\n" |
| " set icon_mode 0\n" |
| "} else {\n" |
| " set icon_mode 1\n" |
| " set_view_variable \"icon\"\n" |
| " if [regexp -nocase {TRAY} $env(X11VNC_ICON_MODE)] {\n" |
| " set tray_embed 1\n" |
| " }\n" |
| " if [regexp -nocase {RUNNING} $env(X11VNC_ICON_MODE)] {\n" |
| " set tray_running 1\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "set icon_setpasswd 0\n" |
| "if {[info exists env(X11VNC_ICON_SETPASS)]} {\n" |
| " if {$env(X11VNC_ICON_SETPASS) != \"\"} {\n" |
| " set icon_setpasswd 1\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "set icon_noadvanced 0\n" |
| "if {[info exists env(X11VNC_ICON_NOADVANCED)]} {\n" |
| " set icon_noadvanced 1\n" |
| "}\n" |
| "\n" |
| "set icon_minimal 0\n" |
| "if {[info exists env(X11VNC_ICON_MINIMAL)]} {\n" |
| " set icon_minimal 1\n" |
| "}\n" |
| "\n" |
| "if {[info exists env(X11VNC_ICON_EMBED_ID)]} {\n" |
| " set icon_embed_id $env(X11VNC_ICON_EMBED_ID)\n" |
| "} else {\n" |
| " set icon_embed_id \"\"\n" |
| "}\n" |
| "\n" |
| "\n" |
| "set hostname [exec uname -n]\n" |
| "set osname [exec uname]\n" |
| "\n" |
| "if {[regexp -nocase {IRIX} $osname]} {\n" |
| " # IRIX \"fixed\" font is huge and doublespaced... \n" |
| " set ffont $snfont\n" |
| "}\n" |
| "if {[regexp -nocase {Darwin} $osname]} {\n" |
| " set ffont {Monaco 10}\n" |
| " set bfont {system}\n" |
| "}\n" |
| "\n" |
| "if {\"$argv\" == \"-portprompt\"} {\n" |
| " do_port_prompt\n" |
| " exit 0\n" |
| "}\n" |
| "\n" |
| "#puts [exec env]\n" |
| "#puts \"x11vnc_xdisplay: $x11vnc_xdisplay\"\n" |
| "\n" |
| "set env(X11VNC_STD_HELP) 1\n" |
| "\n" |
| "# scrape the help output for the text and remote control vars:\n" |
| "parse_help;\n" |
| "parse_remote_help;\n" |
| "parse_query_help;\n" |
| "\n" |
| "# tweaks to duplicate help text:\n" |
| "tweak_remote_help lock deny\n" |
| "tweak_remote_help unlock deny\n" |
| "\n" |
| "tweak_both quiet q\n" |
| "tweak_help logfile o\n" |
| "tweak_both xwarppointer xwarp\n" |
| "tweak_both screen_blank sb\n" |
| "\n" |
| "set_template\n" |
| "\n" |
| "set_name \"tkx11vnc\"\n" |
| "\n" |
| "key_bindings;\n" |
| "\n" |
| "get_default_vars\n" |
| "\n" |
| "dtime D\n" |
| "\n" |
| "proc check_setpasswd {} {\n" |
| " global env icon_setpasswd\n" |
| " global do_props_msg\n" |
| " set do_props_msg \"\"\n" |
| " if {$icon_setpasswd} {\n" |
| " set m \"\\n\"\n" |
| " set m \"${m} Note the x11vnc icon in the system tray.\\n\" \n" |
| " set m \"${m} This panel is its 'Properties' dialog.\\n\" \n" |
| " set m \"${m}\\n\" \n" |
| " set m \"${m} To specify a Session Password and to\\n\" \n" |
| " set m \"${m} allow VNC viewers to connect, follow\\n\" \n" |
| " set m \"${m} these steps:\\n\" \n" |
| " set m \"${m}\\n\" \n" |
| " set m \"${m} Enter a passwd in the Password field\\n\" \n" |
| " set m \"${m} (it can be left blank.) You can also\\n\" \n" |
| " set m \"${m} supply a ViewOnly passwd if desired.\\n\" \n" |
| " set m \"${m}\\n\" \n" |
| " set m \"${m} Set 'Accept Connections' and then Press \\n\" \n" |
| " set m \"${m} 'Apply' to allow incoming connections.\\n\" \n" |
| " set m \"${m}\\n\" \n" |
| " set m \"${m} No Viewer can connect until you do this.\\n\" \n" |
| " set m \"${m}\\n\" \n" |
| " set m \"${m} The passwords are only for this x11vnc\\n\" \n" |
| " set m \"${m} session and are not saved. Run x11vnc\\n\" \n" |
| " set m \"${m} manually for more control (e.g. -rfbauth \\n\" \n" |
| " set m \"${m} for a saved password.)\\n\" \n" |
| " set m \"${m}\\n\" \n" |
| " set m \"${m} See 'Help' for details on each option.\\n\" \n" |
| "\n" |
| " global x11vnc_cmdline\n" |
| "\n" |
| " set dossl 0\n" |
| " if {[info exists x11vnc_cmdline]} {\n" |
| " if [regexp -- {-ssl} $x11vnc_cmdline] {\n" |
| " set dossl 1\n" |
| " }\n" |
| " }\n" |
| " if {$dossl || [info exists env(X11VNC_GOT_SSL)]} {\n" |
| " set m \"${m}\\n\" \n" |
| " set m \"${m} SSL encryption mode active. You can\\n\" \n" |
| " set m \"${m} find your Public Cert in the Logfile\\n\" \n" |
| " set m \"${m} and also the ~/.vnc/certs directory.\\n\" \n" |
| " }\n" |
| "\n" |
| " if {[info exists env(X11VNC_SETPASS_FAIL)]} {\n" |
| " set pp 5900\n" |
| " if {[info exists env(X11VNC_GOT_RFBPORT_VAL)]} {\n" |
| " if {$env(X11VNC_GOT_RFBPORT_VAL) > 0} {\n" |
| " set pp $env(X11VNC_GOT_RFBPORT_VAL)\n" |
| " }\n" |
| " }\n" |
| " \n" |
| " set m \" The x11vnc program failed to start! \\n\"\n" |
| " set m \"${m}\\n\" \n" |
| " set m \"${m} Maybe there is another VNC server\\n\"\n" |
| " set m \"${m} already listening on port $pp?\\n\"\n" |
| " set m \"${m}\\n\" \n" |
| " set m \"${m} You will need to start over after\\n\"\n" |
| " set m \"${m} you make sure x11vnc can start.\\n\"\n" |
| " }\n" |
| " \n" |
| " set do_props_msg $m\n" |
| " do_props\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "if {0} {\n" |
| " if {[info exists env(X11VNC_ICON_SETPASS)]} {\n" |
| " if {$env(X11VNC_ICON_SETPASS) == \"2\"} {\n" |
| " global icon_mode_at_startup icon_mode\n" |
| " set icon_mode_at_startup 1\n" |
| " set icon_mode 2\n" |
| " }\n" |
| " }\n" |
| "}\n" |
| "\n" |
| "if {$icon_mode} {\n" |
| " if {$icon_mode == 2} {\n" |
| " make_gui \"full\"\n" |
| " } elseif {$tray_embed} {\n" |
| " make_gui \"tray\"\n" |
| " } else {\n" |
| " make_gui \"icon\"\n" |
| " }\n" |
| " dtime G\n" |
| " old_balloon\n" |
| " check_setpasswd\n" |
| " push_new_value \"remote-cmd\" \"remote-cmd\" \"Q:clients\" 1\n" |
| "} else {\n" |
| " make_gui \"full\"\n" |
| " dtime G\n" |
| " check_setpasswd\n" |
| "}\n" |
| "\n" |
| "\n" |
| "# main loop.\n" |
| #endif |
| /* ifdef NOGUI */ |
| #endif |
| /* ifndef _TKX11VNC_H */ |
| ; |