Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
L
libvncserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
rasky
libvncserver
Commits
2cc1b1d3
Commit
2cc1b1d3
authored
Dec 20, 2004
by
runge
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
x11vnc: synchronous mode for -remote, string cleanup
parent
f28038b2
Changes
8
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
1303 additions
and
619 deletions
+1303
-619
ChangeLog
ChangeLog
+4
-0
cursor.c
libvncserver/cursor.c
+1
-0
ChangeLog
x11vnc/ChangeLog
+5
-0
README
x11vnc/README
+351
-228
tkx11vnc
x11vnc/tkx11vnc
+244
-18
tkx11vnc.h
x11vnc/tkx11vnc.h
+244
-18
x11vnc.1
x11vnc/x11vnc.1
+47
-18
x11vnc.c
x11vnc/x11vnc.c
+407
-337
No files found.
ChangeLog
View file @
2cc1b1d3
2004-12-19 Karl Runge <runge@karlrunge.com>
* x11vnc: string cleanup, synchronous remote-control option -sync
* libvncserver/cursor.c: zero underCursorBufferLen when cursor freed.
2004-12-16 Karl Runge <runge@karlrunge.com>
* test/encodingstest.c: fix decl bug in main()
* x11vnc: use XFIXES extension to show the exact cursor shape.
...
...
libvncserver/cursor.c
View file @
2cc1b1d3
...
...
@@ -529,6 +529,7 @@ void rfbSetCursor(rfbScreenInfoPtr rfbScreen,rfbCursorPtr c,rfbBool freeOld)
free
(
rfbScreen
->
underCursorBuffer
);
rfbScreen
->
underCursorBuffer
=
0
;
rfbScreen
->
underCursorBufferLen
=
0
;
if
(
rfbScreen
->
cursor
&&
(
freeOld
||
rfbScreen
->
cursor
->
cleanup
))
rfbFreeCursor
(
rfbScreen
->
cursor
);
...
...
x11vnc/ChangeLog
View file @
2cc1b1d3
2004-12-19 Karl Runge <runge@karlrunge.com>
* cleanup putenv, snprint, other string manip.
* add -sync mode to remote control for better control
* allow -remote and -query at same time.
2004-12-16 Karl Runge <runge@karlrunge.com>
* support for XFIXES extension to show the exact cursor shape,
working on Linux/Xorg and Solaris 10. disable with -noxfixes
...
...
x11vnc/README
View file @
2cc1b1d3
This diff is collapsed.
Click to expand it.
x11vnc/tkx11vnc
View file @
2cc1b1d3
...
...
@@ -47,6 +47,7 @@ catch {rename send {}}
# Q means it is an action worth querying after running.
# D means it is a good idea to delay a little before querying
# (i.e. perhaps it causes x11vnc to do a lot of work, new fb)
# No longer used, -sync is used instead.
# P means the string can be +/- appended/deleted (string may not
# be the same after the remote command)
# G means gui internal item
...
...
@@ -839,7 +840,8 @@ proc entry_delete {} {
# Utilities for remote control and updating vars.
proc push_new_value
{
item name new
{
query 1
}}
{
proc push_new_value0
{
item name new
{
query 1
}}
{
# old way w/o -sync
global menu_var always_update remote_output query_output
global delay_sleep extra_sleep extra_sleep_split
...
...
@@ -953,6 +955,125 @@ proc push_new_value {item name new {query 1}} {
}
}
proc push_new_value
{
item name new
{
query 1
}}
{
global menu_var always_update remote_output query_output
global delay_sleep extra_sleep extra_sleep_split
global query_result_list
set
debug
[
in_debug_mode]
set
getout 0
set
print_getout 0
;
set
do_query_all 0
set
newnew
""
if
{
$item
==
"disconnect"
}
{
set
newnew
"N/A"
set
do_query_all 1
}
elseif
{
$always_update
}
{
set
do_query_all 1
}
if
{
$item
==
"remote-cmd"
}
{
# kludge for arbitrary remote command:
if
{[
regexp
{
^Q:
}
$new
]}
{
# extra kludge for Q:var to mean -Q var
regsub
{
^Q:
}
$new
""
new
set
qonly 1
}
else
{
set
qonly 0
}
# need to extract item from new:
set
qtmp
$new
regsub
{
:.
*
$}
$qtmp
""
qtmp
if
{
$qonly
}
{
set
rargs
[
list
"-Q"
"
$qtmp
"
]
set
print_getout 1
set
qargs
""
}
else
{
set
rargs
[
list
"-R"
"
$new
"
]
set
qargs
""
}
set
getout 1
}
elseif
{[
value_is_string
$item
]}
{
# string var:
set
rargs
[
list
"-R"
"
$name
:
$new
"
]
set
qargs
[
list
"-Q"
"
$name
"
]
}
else
{
# boolean var:
set
rargs
[
list
"-R"
"
$name
"
]
set
qargs
[
list
"-Q"
"
$name
"
]
}
if
{!
$query
&&
!
$always_update
}
{
set
getout 1
}
elseif
{
$item
==
"noremote"
}
{
set
getout 1
}
elseif
{[
is_action
$item
]
&&
![
opt_match Q
$item
]
&&
$rargs
!=
""
}
{
set
getout 1
}
elseif
{[
regexp
{
^
(
sid|id
)
$}
$item
]
&&
![
regexp
{
^0x
}
$new
]}
{
set
getout 1
}
set
remote_output
""
set
query_output
""
if
{!
$debug
}
{
append_text
"x11vnc
$rargs
..."
}
if
{
$getout
}
{
set
remote_output
[
run_remote_cmd
$rargs
]
if
{
$print_getout
}
{
append_text
"
\t
$remote_output
"
}
append_text
"
\n
"
return
}
if
{
$do_query_all
}
{
set
all
[
all_query_vars]
set
qargs
[
list
"-Q"
$all
]
}
set
rqargs
[
concat
$rargs
$qargs
]
set
query
[
run_remote_cmd
$rqargs
]
set
query_output
$query
set
query_result_list
""
if
{
$newnew
!=
""
}
{
set
new
$newnew
}
if
{![
see_if_ok
$query
$item
"
$name
:
$new
"
]}
{
# failed
if
{[
regexp
{
^a..
=}
$query
]}
{
# but some result came back
# synchronize everything with a 2nd call.
set
query_output
[
query_all 1]
}
else
{
# server may be dead
if
{
$item
!=
"ping"
&&
$item
!=
"attach"
}
{
try_connect
}
}
}
else
{
# succeeded
# synchronize this variable (or variables)
# for a speedup used the list parsed by see_if_ok.
update_menu_vars
"USE_LIST"
if
{
$do_query_all
}
{
global all_settings
set
all_settings
$query
}
}
}
# For updating a string variable. Also used for simple OK/Skip dialogs
# with entry = 0.
proc entry_dialog
{
item
{
entry 1
}}
{
...
...
@@ -1042,14 +1163,25 @@ proc check_var {item} {
}
proc see_if_ok
{
query item expected
}
{
global query_result_list
set
ok 0
set
found
""
foreach q
[
split_query
$query
]
{
if
{[
regexp
"^
$item
:"
$q
]}
{
set
query_result_list
[
split_query
$query
]
foreach q
$query_result_list
{
# if {[regexp "^$item:" $q]} {
# set found $q
# }
if
{[
string first
"
$item
:"
$q
]
==
0
}
{
set
found
$q
}
if
{
$q
==
$expected
}
{
set
ok 1
if
{
$found
!=
""
}
{
break
;
}
}
}
if
{
$found
==
""
}
{
...
...
@@ -1076,23 +1208,26 @@ proc see_if_ok {query item expected} {
}
proc update_menu_vars
{{
query
""
}}
{
global all_settings menu_var
global all_settings menu_var
query_result_list
set
debug
[
in_debug_mode]
if
{
$query
==
""
}
{
set
qstr
$all_settings
if
{
$query
==
"USE_LIST"
}
{
;
}
elseif
{
$query
==
""
}
{
set
query_result_list
[
split_query
$all_settings
]
}
else
{
set
q
str
$query
set
q
uery_result_list
[
split_query
$query
]
}
foreach piece
[
split_query
$qstr
]
{
foreach piece
$query_result_list
{
if
{[
regexp
{
^
([
^:][^:]
*
)
:
(
.
*
)
$}
$piece
m0 item val]
}
{
if
{[
info exists menu_var
(
$item
)]}
{
set
old
$menu_var
(
$item
)
if
{
$val
==
"N/A"
}
{
continue
}
if
{
$debug
}
{
if
{
0
&&
$debug
}
{
puts
"setting menuvar:
$item
:
$old
->
$val
"
}
set
menu_var
(
$item
)
$val
...
...
@@ -1127,7 +1262,12 @@ proc clear_all {} {
proc all_query_vars
{}
{
global query_ans_list query_aro_list all_settings
global cache_all_query_vars
if
{
$cache_all_query_vars
!=
""
}
{
return
$cache_all_query_vars
}
set
qry
""
foreach item
$query_ans_list
{
if
{
$qry
==
""
}
{
...
...
@@ -1143,6 +1283,8 @@ proc all_query_vars {} {
append qry
",
$item
"
}
}
set
cache_all_query_vars
$qry
return
$qry
}
...
...
@@ -1151,8 +1293,6 @@ proc query_all {{quiet 0}} {
set
qry
[
all_query_vars]
#puts "into query_all $quiet"
set
qargs
[
list
"-Q"
$qry
]
set
all
[
run_remote_cmd
$qargs
]
...
...
@@ -1282,13 +1422,25 @@ proc do_action {item} {
}
}
proc ptime
{
time
}
{
set
usec
[
lindex
[
split
$time
]
0]
set
sec
[
format
"%.3f"
[
expr
"
$usec
/ 1000000.0"
]]
puts
"time:
$sec
secs."
}
proc do_var
{
item
}
{
global connected_to_x11vnc item_cascade menu_var
set
debug
[
in_debug_mode]
set
string 0
if
{[
is_action
$item
]}
{
# Menu item is action:
do_action
$item
if
{
$debug
}
{
ptime
[
time
{
do_action
$item
}]
}
else
{
do_action
$item
}
return
}
...
...
@@ -1313,7 +1465,11 @@ proc do_var {item} {
set
new 1
}
if
{
$connected_to_x11vnc
}
{
push_new_value
$item
$name
$new
1
if
{
$debug
}
{
ptime
[
time
{
push_new_value
$item
$name
$new
1
}]
}
else
{
push_new_value
$item
$name
$new
1
}
}
}
...
...
@@ -1364,7 +1520,8 @@ proc value_is_bool {item} {
}
}
proc split_query
{
query
}
{
proc split_query0
{
query
}
{
# original slower way with regexp/regsub
regsub
-all
{
aro
=}
$query
{
ans
=}
query
set
items
{}
while
{
1
}
{
...
...
@@ -1384,6 +1541,38 @@ proc split_query {query} {
return
$items
}
proc split_query
{
query
}
{
regsub
-all
{
aro
=}
$query
{
ans
=}
query
set
items
{}
while
{
1
}
{
set
n
[
string first
"ans="
$query
]
if
{
$n
< 0
}
{
break
}
set
from
[
expr
$n
+4]
set
m
[
string first
",ans="
$query
]
if
{
$m
< 0
}
{
set
more 0
set
item
[
string range
$query
$from
end]
}
else
{
set
more 1
set
to
[
expr
$m
-1
]
set
item
[
string range
$query
$from
$to
]
}
if
{
$item
!=
""
}
{
lappend items
$item
}
if
{
$more
}
{
incr m
set
query
[
string range
$query
$m
end]
}
else
{
set
query
""
}
}
return
$items
}
proc set_x11_display
{
name
}
{
global x11_display
set
x11_display
"x11vnc X display:
$name
"
...
...
@@ -1398,6 +1587,7 @@ proc no_x11_display {} {
proc no_vnc_display
{}
{
set_vnc_display
"(*none*)"
}
proc fetch_displays
{}
{
set
qargs
[
list
"-Q"
"display,vncdisplay"
]
...
...
@@ -1899,6 +2089,8 @@ proc get_start_x11vnc_cmd {} {
lappend cmd
$x11vnc_prog
set saw_id 0
foreach item [lsort [array names menu_var]] {
if {![active_when_starting
$item
]} {
continue
...
...
@@ -1906,6 +2098,27 @@ proc get_start_x11vnc_cmd {} {
if {[is_action
$item
]} {
continue
}
if {
$item
== "debug_gui"} {
continue
}
if {
$item
== "id" ||
$item
== "sid"} {
set val
$menu_var
(
$item
);
if {
$val
== "0x0" ||
$val
== "root"} {
continue
}
}
if {
$item
== "sid" &&
$saw_id
} {
continue
}
if {
$item
== "id"} {
set saw_id 1
}
if {
$item
== "progressive" &&
$menu_var
(
$item
) == "0"} {
continue
}
if {
$item
== "dontdisconnect" &&
$menu_var
(
$item
) == "-1"} {
continue
}
if {[value_is_bool
$item
]} {
if {[info exists menu_var(
$item
)]} {
...
...
@@ -1917,7 +2130,11 @@ proc get_start_x11vnc_cmd {} {
if {[info exists menu_var(
$item
)]} {
if {
$menu_var
(
$item
) != ""
&&
$menu_var
(
$item
) !=
$unset_str
} {
lappend cmd "-
$item
"
set nitem
$item
if {
$nitem
== "screen_blank"} {
set nitem "sb"
}
lappend cmd "-
$nitem
"
lappend cmd
$menu_var
(
$item
)
}
}
...
...
@@ -1996,6 +2213,7 @@ proc run_remote_cmd {opts} {
lappend cmd "-display"
lappend cmd
$x11vnc_xdisplay
}
lappend cmd "-sync"
foreach word
$opts
{
lappend cmd
$word
}
...
...
@@ -2011,11 +2229,18 @@ if {0} {
}
set output ""
menus_disable
stop_watch on
catch {set output [eval exec
$cmd
]}
stop_watch off
menus_enable
if {
$debug
} {
append_text "output:
$output
\n"
if {[string length
$output
] > 100} {
set str [string range
$output
0 100]
append_text "output:
$str
...\n"
} else {
append_text "output:
$output
\n"
}
}
return
$output
}
...
...
@@ -2083,6 +2308,7 @@ global menu_var unset_str
global bfont
global connected_to_x11vnc
global delay_sleep extra_sleep extra_sleep_split
global cache_all_query_vars
set unset_str "(unset)"
set connected_to_x11vnc 0
...
...
@@ -2093,9 +2319,9 @@ set help_indent 24;
set reply_xdisplay ""
set all_settings "None so far."
set always_update 1
set cache_all_query_vars ""
#set delay_sleep 500
#set extra_sleep 1500
# these are no longer used under x11vnc -sync:
set delay_sleep 350
set extra_sleep 1000
set extra_sleep_split 4
...
...
x11vnc/tkx11vnc.h
View file @
2cc1b1d3
This diff is collapsed.
Click to expand it.
x11vnc/x11vnc.1
View file @
2cc1b1d3
...
...
@@ -2,7 +2,7 @@
.TH X11VNC "1" "December 2004" "x11vnc " "User Commands"
.SH NAME
x11vnc - allow VNC connections to real X11 displays
version: 0.6.3pre, lastmod: 2004-12-1
7
version: 0.6.3pre, lastmod: 2004-12-1
9
.SH SYNOPSIS
.B x11vnc
[OPTION]...
...
...
@@ -661,28 +661,36 @@ To include button events use "Button1", ... etc.
.PP
\fB-nodragging\fR
.IP
Do not update the display during mouse dragging events
(mouse motion with a button held down). Greatly
improves response on slow setups, but you lose all
visual feedback for drags, text selection, and some
menu traversals.
Do not update the display during mouse dragging
events (mouse motion with a button held down).
Greatly improves response on slow setups, but you lose
all visual feedback for drags, text selection, and some
menu traversals. It overrides any \fB-pointer_mode\fR setting
(think of it as pointer_mode 0)
.PP
\fB-pointer_mode\fR \fIn\fR
.IP
Various pointer update schemes. The problem is pointer
motion can cause rapid changes on the screen, e.g. a
window drag. Neither x11vnc nor the bandwidth to the
vncviewers can keep up these rapid screen changes:
everything bogs down when dragging or scrolling.
Note that most video h/w is optimized for writing, not
reading (a 50X rate difference is possible) and x11vnc
is reading all the time. So a scheme has to be used to
"eat" much of that pointer input before re-polling the
screen. n can be 1 to 4. n=1 was the original scheme
used to about Jan 2004. n=2 is an improved scheme.
n=3 is basically a dynamic \fB-nodragging\fR mode: it detects
if the mouse drag motion has paused and refreshes
the display. n=4 is TBD. The default n is 2.
window drag. Neither x11vnc's screen polling nor the
bandwidth to the vncviewers can keep up these rapid
screen changes: everything bogs down when dragging
or scrolling. Note that most video h/w is optimized
for writing, not reading (a 50X rate difference is
possible) and x11vnc is reading all the time. So a
scheme has to be used to "eat" much of that pointer
input before re-polling the screen. n can be 1 to 4.
.IP
n=1 was the original scheme used to about Jan 2004: it
basically just skips \fB-input_skip\fR pointer events before
repolling the screen. n=2 is an improved scheme:
by watching the current rate it tries to detect if
it should try to "eat" more pointer events. n=3 is
basically a dynamic \fB-nodragging\fR mode: it detects if the
mouse drag motion has paused and refreshes the display.
n=4 is TBD, it will try measure screen read and client
write rates and try to insert "frames" between the
on/off states of mode 3. The default n is 2.
.PP
\fB-input_skip\fR \fIn\fR
.IP
...
...
@@ -1157,6 +1165,27 @@ button_mask mouse_x mouse_y bpp depth indexed_color
dpy_x dpy_y rfbport rfbwait rfbauth passwd alwaysshared
dontdisconnect httpdir enablehttpproxy
.PP
\fB-sync\fR
.IP
By default \fB-remote\fR commands are run asynchronously, that
is, the request is posted and the program immediately
exits. Use \fB-sync\fR to have the program wait for an
acknowledgement from the x11vnc server that command
was processed. On the other hand \fB-query\fR requests are
always processed synchronously because they have wait
for the result.
.IP
Also note that if both \fB-remote\fR and \fB-query\fR requests are
supplied on the command line, the \fB-remote\fR is processed
first (synchronously: no need for \fB-sync),\fR and then
the \fB-query\fR request is processed in the normal way.
This allows for a reliable way to see if the \fB-remote\fR
command was processed by querying for any new settings.
Note however that there is timeout of a few seconds so
if the x11vnc takes longer than that to process the
requests the requestor will think that a failure has
taken place.
.PP
\fB-noremote\fR
.IP
Do not process any remote control commands or queries.
...
...
x11vnc/x11vnc.c
View file @
2cc1b1d3
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment