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
816d7e06
Commit
816d7e06
authored
Aug 10, 2006
by
runge
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
x11vnc: first pass at touchscreens via uinput.
parent
0bc50a9d
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
330 additions
and
125 deletions
+330
-125
ChangeLog
x11vnc/ChangeLog
+3
-0
README
x11vnc/README
+83
-57
help.c
x11vnc/help.c
+37
-23
linuxfb.c
x11vnc/linuxfb.c
+24
-14
uinput.c
x11vnc/uinput.c
+131
-3
uinput.h
x11vnc/uinput.h
+4
-0
x11vnc.1
x11vnc/x11vnc.1
+38
-24
x11vnc.c
x11vnc/x11vnc.c
+6
-2
x11vnc.h
x11vnc/x11vnc.h
+1
-0
x11vnc_defs.c
x11vnc/x11vnc_defs.c
+3
-2
No files found.
x11vnc/ChangeLog
View file @
816d7e06
2006-08-10 Karl Runge <runge@karlrunge.com>
* x11vnc: first pass at touchscreens via uinput.
2006-08-02 Karl Runge <runge@karlrunge.com>
2006-08-02 Karl Runge <runge@karlrunge.com>
* x11vnc: add -ssltimeout option; tweak ssl timeouts.
* x11vnc: add -ssltimeout option; tweak ssl timeouts.
...
...
x11vnc/README
View file @
816d7e06
This diff is collapsed.
Click to expand it.
x11vnc/help.c
View file @
816d7e06
...
@@ -620,34 +620,38 @@ void print_help(int mode) {
...
@@ -620,34 +620,38 @@ void print_help(int mode) {
" above command is run as the user who just authenticated
\n
"
" above command is run as the user who just authenticated
\n
"
" via the login and password prompt.
\n
"
" via the login and password prompt.
\n
"
"
\n
"
"
\n
"
" Also in the case of -unixpw, the user logging in
\n
"
" Also in the case of -unixpw, the user logging in
can
\n
"
"
can place a colon at the end of his username and
\n
"
"
place a colon at the end of his username and supply
\n
"
"
supply a few options: scale=, scale_cursor= (or sc=),
\n
"
"
a few options: scale=, scale_cursor= (or sc=), solid
\n
"
"
solid (or so), id=, clear_mods (or cm), clear_keys
\n
"
"
(or so), id=, clear_mods (or cm), clear_keys (or ck),
\n
"
"
(or ck), repeat, speeds= (or sp=), readtimeout=
\n
"
"
repeat, speeds= (or sp=), readtimeout= (or rd=), or
\n
"
"
(or rd=), or rotate= (or ro=) separated by commas if there is more than one.
\n
"
"
rotate= (or ro=) separated by commas if there is more
\n
"
"
After the user logs in successfully, these options will
\n
"
"
than one. After the user logs in successfully, these
\n
"
" be applied to the VNC screen. For example,
\n
"
"
options will
be applied to the VNC screen. For example,
\n
"
"
\n
"
"
\n
"
" login: fred:scale=3/4,sc=1,repeat
\n
"
" login: fred:scale=3/4,sc=1,repeat
\n
"
" Password: ...
\n
"
" Password: ...
\n
"
"
\n
"
"
\n
"
" login: runge:sp=modem,rd=120,solid
=root:
\n
"
" login: runge:sp=modem,rd=120,solid
\n
"
"
\n
"
"
\n
"
" for convenience m/n implies scale= e.g. fred:3/4
\n
"
" for convenience m/n implies scale= e.g. fred:3/4 If you
\n
"
" To disable this set the environment variable
\n
"
" type and enter your password incorrectly, to retrieve
\n
"
" X11VNC_NO_UNIXPW_OPTS=1. To set any other options,
\n
"
" your long
\"
login:
\"
line press the Up arrow once
\n
"
" the user can use the gui (x11vnc -gui connect) or the
\n
"
" (before typing anything else).
\n
"
" remote control method (x11vnc -R opt:val) during his
\n
"
" VNC session.
\n
"
"
\n
"
"
\n
"
" So the combination of -display WAIT:cmd=... and
\n
"
" To disable the option setting set the environment
\n
"
" -unixpw allows automatic pairing of an unix
\n
"
" variable X11VNC_NO_UNIXPW_OPTS=1 before starting x11vnc.
\n
"
" authenticated VNC user with his desktop. This could
\n
"
" To set any other options, the user can use the gui
\n
"
" be very useful on SunRays and also any system where
\n
"
" (x11vnc -gui connect) or the remote control method
\n
"
" multiple users share a given machine. The user does
\n
"
" (x11vnc -R opt:val) during his VNC session.
\n
"
" not need to remember special ports or passwords set up
\n
"
"
\n
"
" for his desktop and VNC.
\n
"
" The combination of -display WAIT:cmd=... and -unixpw
\n
"
" allows automatic pairing of an unix authenticated VNC
\n
"
" user with his desktop. This could be very useful on
\n
"
" SunRays and also any system where multiple users share
\n
"
" a given machine. The user does not need to remember
\n
"
" special ports or passwords set up for his desktop
\n
"
" and VNC.
\n
"
"
\n
"
"
\n
"
" A nice way to use WAIT:cmd=... is out of inetd(8)
\n
"
" A nice way to use WAIT:cmd=... is out of inetd(8)
\n
"
" (it automatically forks a new x11vnc for each user).
\n
"
" (it automatically forks a new x11vnc for each user).
\n
"
...
@@ -1181,7 +1185,7 @@ void print_help(int mode) {
...
@@ -1181,7 +1185,7 @@ void print_help(int mode) {
" unreliable (especially if the user takes much time to
\n
"
" unreliable (especially if the user takes much time to
\n
"
" ponder the Certificate dialogs in his browser, Java VM,
\n
"
" ponder the Certificate dialogs in his browser, Java VM,
\n
"
" or VNC Viewer applet. That's right 3 separate
\"
Are
\n
"
" or VNC Viewer applet. That's right 3 separate
\"
Are
\n
"
" you sure you want to connect
\"
dialogs!)
\n
"
" you sure you want to connect
?
\"
dialogs!)
\n
"
"
\n
"
"
\n
"
" So use the -https option to provide a separate, more
\n
"
" So use the -https option to provide a separate, more
\n
"
" reliable HTTPS port that x11vnc will listen on. If
\n
"
" reliable HTTPS port that x11vnc will listen on. If
\n
"
...
@@ -2714,6 +2718,16 @@ void print_help(int mode) {
...
@@ -2714,6 +2718,16 @@ void print_help(int mode) {
" cause jerkiness or unexpected behavior with menus, etc.
\n
"
" cause jerkiness or unexpected behavior with menus, etc.
\n
"
" Use reset=0 to disable.
\n
"
" Use reset=0 to disable.
\n
"
"
\n
"
"
\n
"
" If the uinput device has an absolute pointer (as opposed
\n
"
" to a normal mouse that is a relative pointer) you can
\n
"
" specify the option
\"
abs
\"
. Note that a touchpad
\n
"
" on a laptop is an absolute device t some degree.
\n
"
" This (usually) avoids all the problems with mouse
\n
"
" acceleration. If x11vnc has trouble deducing the size
\n
"
" of the device, use
\"
abs=WxH
\"
. Furthermore, if the
\n
"
" device is a touchscreen (assumed to have an absolute
\n
"
" pointer) use
\"
touch
\"
or
\"
touch=WxH
\"
.
\n
"
"
\n
"
" If you set the env. var X11VNC_UINPUT_THRESHOLDS then
\n
"
" If you set the env. var X11VNC_UINPUT_THRESHOLDS then
\n
"
" the thresh=n mode will be enabled. It it currently
\n
"
" the thresh=n mode will be enabled. It it currently
\n
"
" not working well. If |dx| <= thresh and |dy| < thresh
\n
"
" not working well. If |dx| <= thresh and |dy| < thresh
\n
"
...
...
x11vnc/linuxfb.c
View file @
816d7e06
...
@@ -94,20 +94,6 @@ char *console_guess(char *str, int *fd) {
...
@@ -94,20 +94,6 @@ char *console_guess(char *str, int *fd) {
}
}
}
}
if
(
do_input
)
{
if
(
tty
>=
0
&&
tty
<
64
)
{
pipeinput_str
=
(
char
*
)
malloc
(
10
);
sprintf
(
pipeinput_str
,
"CONSOLE%d"
,
tty
);
rfbLog
(
"console_guess: file pipeinput %s
\n
"
,
pipeinput_str
);
initialize_pipeinput
();
}
else
if
(
have_uinput
)
{
pipeinput_str
=
strdup
(
"UINPUT"
);
rfbLog
(
"console_guess: file pipeinput %s
\n
"
,
pipeinput_str
);
initialize_pipeinput
();
}
}
if
(
!
atparms
)
{
if
(
!
atparms
)
{
#if LIBVNCSERVER_HAVE_LINUX_FB_H
#if LIBVNCSERVER_HAVE_LINUX_FB_H
#if LIBVNCSERVER_HAVE_SYS_IOCTL_H
#if LIBVNCSERVER_HAVE_SYS_IOCTL_H
...
@@ -153,6 +139,30 @@ char *console_guess(char *str, int *fd) {
...
@@ -153,6 +139,30 @@ char *console_guess(char *str, int *fd) {
#endif
#endif
}
}
if
(
atparms
)
{
int
gw
,
gh
,
gb
;
if
(
sscanf
(
atparms
,
"%dx%dx%d"
,
&
gw
,
&
gh
,
&
gb
)
==
3
)
{
fb_x
=
gw
;
fb_y
=
gh
;
fb_b
=
gb
;
}
}
if
(
do_input
)
{
if
(
tty
>=
0
&&
tty
<
64
)
{
pipeinput_str
=
(
char
*
)
malloc
(
10
);
sprintf
(
pipeinput_str
,
"CONSOLE%d"
,
tty
);
rfbLog
(
"console_guess: file pipeinput %s
\n
"
,
pipeinput_str
);
initialize_pipeinput
();
}
else
if
(
have_uinput
)
{
pipeinput_str
=
strdup
(
"UINPUT"
);
rfbLog
(
"console_guess: file pipeinput %s
\n
"
,
pipeinput_str
);
initialize_pipeinput
();
}
}
if
(
!
atparms
)
{
if
(
!
atparms
)
{
rfbLog
(
"console_guess: could not get @ parameters.
\n
"
);
rfbLog
(
"console_guess: could not get @ parameters.
\n
"
);
return
NULL
;
return
NULL
;
...
...
x11vnc/uinput.c
View file @
816d7e06
...
@@ -28,9 +28,15 @@ int initialize_uinput(void);
...
@@ -28,9 +28,15 @@ int initialize_uinput(void);
int
set_uinput_accel
(
char
*
str
);
int
set_uinput_accel
(
char
*
str
);
int
set_uinput_thresh
(
char
*
str
);
int
set_uinput_thresh
(
char
*
str
);
void
set_uinput_reset
(
int
ms
);
void
set_uinput_reset
(
int
ms
);
void
set_uinput_always
(
int
);
void
set_uinput_touchscreen
(
int
);
void
set_uinput_abs
(
int
);
char
*
get_uinput_accel
();
char
*
get_uinput_accel
();
char
*
get_uinput_thresh
();
char
*
get_uinput_thresh
();
int
get_uinput_reset
();
int
get_uinput_reset
();
int
get_uinput_always
();
int
get_uinput_touchscreen
();
int
get_uinput_abs
();
void
parse_uinput_str
(
char
*
str
);
void
parse_uinput_str
(
char
*
str
);
void
uinput_pointer_command
(
int
mask
,
int
x
,
int
y
,
rfbClientPtr
client
);
void
uinput_pointer_command
(
int
mask
,
int
x
,
int
y
,
rfbClientPtr
client
);
void
uinput_key_command
(
int
down
,
int
keysym
,
rfbClientPtr
client
);
void
uinput_key_command
(
int
down
,
int
keysym
,
rfbClientPtr
client
);
...
@@ -51,6 +57,9 @@ static int bmask = 0;
...
@@ -51,6 +57,9 @@ static int bmask = 0;
static
char
*
injectable
=
NULL
;
static
char
*
injectable
=
NULL
;
static
char
*
uinput_dev
=
NULL
;
static
char
*
uinput_dev
=
NULL
;
static
int
uinput_touchscreen
=
0
;
static
int
uinput_abs
=
0
;
static
int
abs_x
=
0
,
abs_y
=
0
;
static
char
*
devs
[]
=
{
static
char
*
devs
[]
=
{
"/dev/misc/uinput"
,
"/dev/misc/uinput"
,
...
@@ -78,9 +87,12 @@ int check_uinput(void) {
...
@@ -78,9 +87,12 @@ int check_uinput(void) {
if
(
maj
<
2
)
{
if
(
maj
<
2
)
{
return
0
;
return
0
;
}
else
if
(
maj
==
2
)
{
}
else
if
(
maj
==
2
)
{
/* hmmm IPAQ 2.4.19-rmk6-pxa1-hh37 works... */
#if 0
if (min < 6) {
if (min < 6) {
return 0;
return 0;
}
}
#endif
}
}
}
}
}
}
...
@@ -210,6 +222,35 @@ int initialize_uinput(void) {
...
@@ -210,6 +222,35 @@ int initialize_uinput(void) {
ioctl
(
fd
,
UI_SET_KEYBIT
,
BTN_FORWARD
);
ioctl
(
fd
,
UI_SET_KEYBIT
,
BTN_FORWARD
);
ioctl
(
fd
,
UI_SET_KEYBIT
,
BTN_BACK
);
ioctl
(
fd
,
UI_SET_KEYBIT
,
BTN_BACK
);
if
(
uinput_touchscreen
)
{
ioctl
(
fd
,
UI_SET_KEYBIT
,
BTN_TOUCH
);
rfbLog
(
"uinput: touchscreen enabled.
\n
"
);
}
if
(
uinput_touchscreen
||
uinput_abs
)
{
int
gw
=
abs_x
,
gh
=
abs_y
;
if
(
!
gw
||
!
gh
)
{
gw
=
fb_x
;
gh
=
fb_y
;
}
if
(
!
gw
||
!
gh
)
{
gw
=
dpy_x
;
gh
=
dpy_y
;
}
abs_x
=
gw
;
abs_y
=
gh
;
ioctl
(
fd
,
UI_SET_EVBIT
,
EV_ABS
);
ioctl
(
fd
,
UI_SET_ABSBIT
,
ABS_X
);
ioctl
(
fd
,
UI_SET_ABSBIT
,
ABS_Y
);
udev
.
absmin
[
ABS_X
]
=
0
;
udev
.
absmax
[
ABS_X
]
=
gw
;
udev
.
absfuzz
[
ABS_X
]
=
0
;
udev
.
absflat
[
ABS_X
]
=
0
;
udev
.
absmin
[
ABS_Y
]
=
0
;
udev
.
absmax
[
ABS_Y
]
=
gh
;
udev
.
absfuzz
[
ABS_Y
]
=
0
;
udev
.
absflat
[
ABS_Y
]
=
0
;
rfbLog
(
"uinput: absolute pointer enabled at %dx%d.
\n
"
,
abs_x
,
abs_y
);
set_uinput_accel_xy
(
1
.
0
,
1
.
0
);
}
write
(
fd
,
&
udev
,
sizeof
(
udev
));
write
(
fd
,
&
udev
,
sizeof
(
udev
));
if
(
ioctl
(
fd
,
UI_DEV_CREATE
)
!=
0
)
{
if
(
ioctl
(
fd
,
UI_DEV_CREATE
)
!=
0
)
{
...
@@ -287,6 +328,14 @@ void set_uinput_always(int a) {
...
@@ -287,6 +328,14 @@ void set_uinput_always(int a) {
uinput_always
=
a
;
uinput_always
=
a
;
}
}
void
set_uinput_touchscreen
(
int
b
)
{
uinput_touchscreen
=
b
;
}
void
set_uinput_abs
(
int
b
)
{
uinput_abs
=
b
;
}
char
*
get_uinput_accel
(
void
)
{
char
*
get_uinput_accel
(
void
)
{
return
uinput_accel_str
;
return
uinput_accel_str
;
}
}
...
@@ -301,6 +350,14 @@ int get_uinput_always(void) {
...
@@ -301,6 +350,14 @@ int get_uinput_always(void) {
return
uinput_always
;
return
uinput_always
;
}
}
int
get_uinput_touchscreen
(
void
)
{
return
uinput_touchscreen
;
}
int
get_uinput_abs
(
void
)
{
return
uinput_abs
;
}
void
parse_uinput_str
(
char
*
in
)
{
void
parse_uinput_str
(
char
*
in
)
{
char
*
p
,
*
q
,
*
str
=
strdup
(
in
);
char
*
p
,
*
q
,
*
str
=
strdup
(
in
);
...
@@ -309,6 +366,10 @@ void parse_uinput_str(char *in) {
...
@@ -309,6 +366,10 @@ void parse_uinput_str(char *in) {
injectable
=
strdup
(
"KMB"
);
injectable
=
strdup
(
"KMB"
);
}
}
uinput_touchscreen
=
0
;
uinput_abs
=
0
;
abs_x
=
abs_y
=
0
;
p
=
strtok
(
str
,
","
);
p
=
strtok
(
str
,
","
);
while
(
p
)
{
while
(
p
)
{
if
(
p
[
0
]
==
'/'
)
{
if
(
p
[
0
]
==
'/'
)
{
...
@@ -336,6 +397,24 @@ void parse_uinput_str(char *in) {
...
@@ -336,6 +397,24 @@ void parse_uinput_str(char *in) {
free
(
injectable
);
free
(
injectable
);
}
}
injectable
=
strdup
(
p
);
injectable
=
strdup
(
p
);
}
else
if
(
strstr
(
p
,
"touch"
)
==
p
)
{
int
gw
,
gh
;
q
=
strchr
(
p
,
'='
);
set_uinput_touchscreen
(
1
);
set_uinput_abs
(
1
);
if
(
q
&&
sscanf
(
q
+
1
,
"%dx%d"
,
&
gw
,
&
gh
)
==
2
)
{
abs_x
=
gw
;
abs_y
=
gh
;
}
}
else
if
(
strstr
(
p
,
"abs"
)
==
p
)
{
int
gw
,
gh
;
q
=
strchr
(
p
,
'='
);
set_uinput_abs
(
1
);
if
(
q
&&
sscanf
(
q
+
1
,
"%dx%d"
,
&
gw
,
&
gh
)
==
2
)
{
abs_x
=
gw
;
abs_y
=
gh
;
}
}
else
{
}
else
{
rfbLog
(
"invalid UINPUT option: %s
\n
"
,
p
);
rfbLog
(
"invalid UINPUT option: %s
\n
"
,
p
);
clean_up_exit
(
1
);
clean_up_exit
(
1
);
...
@@ -373,6 +452,36 @@ static void ptr_move(int dx, int dy) {
...
@@ -373,6 +452,36 @@ static void ptr_move(int dx, int dy) {
#endif
#endif
}
}
static
void
ptr_abs
(
int
x
,
int
y
)
{
#ifdef UINPUT_OK
struct
input_event
ev
;
if
(
injectable
&&
strchr
(
injectable
,
'M'
)
==
NULL
)
{
return
;
}
memset
(
&
ev
,
0
,
sizeof
(
ev
));
if
(
db
)
fprintf
(
stderr
,
"ptr_abs(%d, %d)
\n
"
,
x
,
y
);
gettimeofday
(
&
ev
.
time
,
NULL
);
ev
.
type
=
EV_ABS
;
ev
.
code
=
ABS_Y
;
ev
.
value
=
y
;
write
(
fd
,
&
ev
,
sizeof
(
ev
));
ev
.
type
=
EV_ABS
;
ev
.
code
=
ABS_X
;
ev
.
value
=
x
;
write
(
fd
,
&
ev
,
sizeof
(
ev
));
ev
.
type
=
EV_SYN
;
ev
.
code
=
SYN_REPORT
;
ev
.
value
=
0
;
write
(
fd
,
&
ev
,
sizeof
(
ev
));
#endif
}
static
int
inside_thresh
(
int
dx
,
int
dy
,
int
thr
)
{
static
int
inside_thresh
(
int
dx
,
int
dy
,
int
thr
)
{
if
(
thresh_or
)
{
if
(
thresh_or
)
{
/* this is peeking at qt-embedded qmouse_qws.cpp */
/* this is peeking at qt-embedded qmouse_qws.cpp */
...
@@ -528,7 +637,10 @@ static void button_click(int down, int btn) {
...
@@ -528,7 +637,10 @@ static void button_click(int down, int btn) {
ev
.
type
=
EV_KEY
;
ev
.
type
=
EV_KEY
;
ev
.
value
=
down
;
ev
.
value
=
down
;
if
(
btn
==
1
)
{
if
(
uinput_touchscreen
)
{
ev
.
code
=
BTN_TOUCH
;
if
(
db
)
fprintf
(
stderr
,
"set code to BTN_TOUCH
\n
"
);
}
else
if
(
btn
==
1
)
{
ev
.
code
=
BTN_LEFT
;
ev
.
code
=
BTN_LEFT
;
}
else
if
(
btn
==
2
)
{
}
else
if
(
btn
==
2
)
{
ev
.
code
=
BTN_MIDDLE
;
ev
.
code
=
BTN_MIDDLE
;
...
@@ -583,7 +695,7 @@ void uinput_pointer_command(int mask, int x, int y, rfbClientPtr client) {
...
@@ -583,7 +695,7 @@ void uinput_pointer_command(int mask, int x, int y, rfbClientPtr client) {
do_reset
=
1
;
do_reset
=
1
;
if
(
mask
||
bmask
)
{
if
(
mask
||
bmask
)
{
do_reset
=
0
;
/* do not do reset if mous
t
button down */
do_reset
=
0
;
/* do not do reset if mous
e
button down */
}
else
if
(
!
input
.
motion
)
{
}
else
if
(
!
input
.
motion
)
{
do_reset
=
0
;
do_reset
=
0
;
}
else
if
(
now
<
last_zero
+
zero_delay
)
{
}
else
if
(
now
<
last_zero
+
zero_delay
)
{
...
@@ -600,6 +712,18 @@ void uinput_pointer_command(int mask, int x, int y, rfbClientPtr client) {
...
@@ -600,6 +712,18 @@ void uinput_pointer_command(int mask, int x, int y, rfbClientPtr client) {
if
(
uinput_always
&&
!
mask
&&
!
bmask
&&
input
.
motion
)
{
if
(
uinput_always
&&
!
mask
&&
!
bmask
&&
input
.
motion
)
{
do_reset
=
1
;
do_reset
=
1
;
}
}
if
(
uinput_abs
)
{
#if 0
/* this is a bad idea... need to do something else */
if (do_reset) {
ptr_abs(dpy_x, dpy_y);
usleep(10*1000);
ptr_abs(x, y);
usleep(10*1000);
}
#endif
do_reset
=
0
;
}
if
(
do_reset
)
{
if
(
do_reset
)
{
static
int
first
=
1
;
static
int
first
=
1
;
...
@@ -696,7 +820,11 @@ void uinput_pointer_command(int mask, int x, int y, rfbClientPtr client) {
...
@@ -696,7 +820,11 @@ void uinput_pointer_command(int mask, int x, int y, rfbClientPtr client) {
if
(
input
.
motion
)
{
if
(
input
.
motion
)
{
if
(
x
!=
last_x
||
y
!=
last_y
)
{
if
(
x
!=
last_x
||
y
!=
last_y
)
{
ptr_rel
(
x
-
last_x
,
y
-
last_y
);
if
(
uinput_abs
)
{
ptr_abs
(
x
,
y
);
}
else
{
ptr_rel
(
x
-
last_x
,
y
-
last_y
);
}
last_x
=
x
;
last_x
=
x
;
last_y
=
y
;
last_y
=
y
;
}
}
...
...
x11vnc/uinput.h
View file @
816d7e06
...
@@ -9,10 +9,14 @@ extern int set_uinput_accel(char *str);
...
@@ -9,10 +9,14 @@ extern int set_uinput_accel(char *str);
extern
int
set_uinput_thresh
(
char
*
str
);
extern
int
set_uinput_thresh
(
char
*
str
);
extern
void
set_uinput_reset
(
int
ms
);
extern
void
set_uinput_reset
(
int
ms
);
extern
void
set_uinput_always
(
int
);
extern
void
set_uinput_always
(
int
);
extern
void
set_uinput_touchscreen
(
int
);
extern
void
set_uinput_abs
(
int
);
extern
char
*
get_uinput_accel
();
extern
char
*
get_uinput_accel
();
extern
char
*
get_uinput_thresh
();
extern
char
*
get_uinput_thresh
();
extern
int
get_uinput_reset
();
extern
int
get_uinput_reset
();
extern
int
get_uinput_always
();
extern
int
get_uinput_always
();
extern
int
get_uinput_touchscreen
();
extern
int
get_uinput_abs
();
extern
void
parse_uinput_str
(
char
*
str
);
extern
void
parse_uinput_str
(
char
*
str
);
extern
void
uinput_pointer_command
(
int
mask
,
int
x
,
int
y
,
rfbClientPtr
client
);
extern
void
uinput_pointer_command
(
int
mask
,
int
x
,
int
y
,
rfbClientPtr
client
);
extern
void
uinput_key_command
(
int
down
,
int
keysym
,
rfbClientPtr
client
);
extern
void
uinput_key_command
(
int
down
,
int
keysym
,
rfbClientPtr
client
);
...
...
x11vnc/x11vnc.1
View file @
816d7e06
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
.TH X11VNC "1" "August 2006" "x11vnc " "User Commands"
.TH X11VNC "1" "August 2006" "x11vnc " "User Commands"
.SH NAME
.SH NAME
x11vnc - allow VNC connections to real X11 displays
x11vnc - allow VNC connections to real X11 displays
version: 0.8.3, lastmod: 2006-08-
02
version: 0.8.3, lastmod: 2006-08-
10
.SH SYNOPSIS
.SH SYNOPSIS
.B x11vnc
.B x11vnc
[OPTION]...
[OPTION]...
...
@@ -740,34 +740,38 @@ In the case of \fB-unixpw\fR (but not \fB-unixpw_nis),\fR then the
...
@@ -740,34 +740,38 @@ In the case of \fB-unixpw\fR (but not \fB-unixpw_nis),\fR then the
above command is run as the user who just authenticated
above command is run as the user who just authenticated
via the login and password prompt.
via the login and password prompt.
.IP
.IP
Also in the case of \fB-unixpw,\fR the user logging in
Also in the case of \fB-unixpw,\fR the user logging in
can
can place a colon at the end of his username and
place a colon at the end of his username and supply
supply a few options: scale=, scale_cursor= (or sc=),
a few options: scale=, scale_cursor= (or sc=), solid
solid (or so), id=, clear_mods (or cm), clear_keys
(or so), id=, clear_mods (or cm), clear_keys (or ck),
(or ck), repeat, speeds= (or sp=), readtimeout=
repeat, speeds= (or sp=), readtimeout= (or rd=), or
(or rd=), or rotate= (or ro=) separated by commas if there is more than one.
rotate= (or ro=) separated by commas if there is more
After the user logs in successfully, these options will
than one. After the user logs in successfully, these
be applied to the VNC screen. For example,
options will
be applied to the VNC screen. For example,
.IP
.IP
login: fred:scale=3/4,sc=1,repeat
login: fred:scale=3/4,sc=1,repeat
Password: ...
Password: ...
.IP
.IP
login: runge:sp=modem,rd=120,solid
=root:
login: runge:sp=modem,rd=120,solid
.IP
.IP
for convenience m/n implies scale= e.g. fred:3/4
for convenience m/n implies scale= e.g. fred:3/4 If you
To disable this set the environment variable
type and enter your password incorrectly, to retrieve
X11VNC_NO_UNIXPW_OPTS=1. To set any other options,
your long "login:" line press the Up arrow once
the user can use the gui (x11vnc \fB-gui\fR connect) or the
(before typing anything else).
remote control method (x11vnc \fB-R\fR opt:val) during his
VNC session.
.IP
.IP
So the combination of \fB-display\fR WAIT:cmd=... and
To disable the option setting set the environment
\fB-unixpw\fR allows automatic pairing of an unix
variable X11VNC_NO_UNIXPW_OPTS=1 before starting x11vnc.
authenticated VNC user with his desktop. This could
To set any other options, the user can use the gui
be very useful on SunRays and also any system where
(x11vnc \fB-gui\fR connect) or the remote control method
multiple users share a given machine. The user does
(x11vnc \fB-R\fR opt:val) during his VNC session.
not need to remember special ports or passwords set up
.IP
for his desktop and VNC.
The combination of \fB-display\fR WAIT:cmd=... and \fB-unixpw\fR
allows automatic pairing of an unix authenticated VNC
user with his desktop. This could be very useful on
SunRays and also any system where multiple users share
a given machine. The user does not need to remember
special ports or passwords set up for his desktop
and VNC.
.IP
.IP
A nice way to use WAIT:cmd=... is out of
A nice way to use WAIT:cmd=... is out of
.IR inetd (8)
.IR inetd (8)
...
@@ -1340,7 +1344,7 @@ adds a few seconds delay to each connection and can be
...
@@ -1340,7 +1344,7 @@ adds a few seconds delay to each connection and can be
unreliable (especially if the user takes much time to
unreliable (especially if the user takes much time to
ponder the Certificate dialogs in his browser, Java VM,
ponder the Certificate dialogs in his browser, Java VM,
or VNC Viewer applet. That's right 3 separate "Are
or VNC Viewer applet. That's right 3 separate "Are
you sure you want to connect" dialogs!)
you sure you want to connect
?
" dialogs!)
.IP
.IP
So use the \fB-https\fR option to provide a separate, more
So use the \fB-https\fR option to provide a separate, more
reliable HTTPS port that x11vnc will listen on. If
reliable HTTPS port that x11vnc will listen on. If
...
@@ -3182,6 +3186,16 @@ in 1 jump), This correction seems to be needed but can
...
@@ -3182,6 +3186,16 @@ in 1 jump), This correction seems to be needed but can
cause jerkiness or unexpected behavior with menus, etc.
cause jerkiness or unexpected behavior with menus, etc.
Use reset=0 to disable.
Use reset=0 to disable.
.IP
.IP
If the uinput device has an absolute pointer (as opposed
to a normal mouse that is a relative pointer) you can
specify the option "abs". Note that a touchpad
on a laptop is an absolute device t some degree.
This (usually) avoids all the problems with mouse
acceleration. If x11vnc has trouble deducing the size
of the device, use "abs=WxH". Furthermore, if the
device is a touchscreen (assumed to have an absolute
pointer) use "touch" or "touch=WxH".
.IP
If you set the env. var X11VNC_UINPUT_THRESHOLDS then
If you set the env. var X11VNC_UINPUT_THRESHOLDS then
the thresh=n mode will be enabled. It it currently
the thresh=n mode will be enabled. It it currently
not working well. If |dx| <= thresh and |dy| < thresh
not working well. If |dx| <= thresh and |dy| < thresh
...
...
x11vnc/x11vnc.c
View file @
816d7e06
...
@@ -3234,14 +3234,18 @@ int main(int argc, char* argv[]) {
...
@@ -3234,14 +3234,18 @@ int main(int argc, char* argv[]) {
rfb_desktop_name
=
strdup
(
argv_vnc
[
argc_vnc
-
1
]);
rfb_desktop_name
=
strdup
(
argv_vnc
[
argc_vnc
-
1
]);
}
}
initialize_pipeinput
();
/*
/*
* Create the XImage corresponding to the display framebuffer.
* Create the XImage corresponding to the display framebuffer.
*/
*/
fb0
=
initialize_xdisplay_fb
();
fb0
=
initialize_xdisplay_fb
();
/*
* In some cases (UINPUT touchscreens) we need the dpy_x dpy_y
* to initialize pipeinput. So we do it after fb is created.
*/
initialize_pipeinput
();
/*
/*
* n.b. we do not have to X_LOCK any X11 calls until watch_loop()
* n.b. we do not have to X_LOCK any X11 calls until watch_loop()
* is called since we are single-threaded until then.
* is called since we are single-threaded until then.
...
...
x11vnc/x11vnc.h
View file @
816d7e06
...
@@ -345,6 +345,7 @@ extern Visual *default_visual; /* the default visual (unless -visual) */
...
@@ -345,6 +345,7 @@ extern Visual *default_visual; /* the default visual (unless -visual) */
extern
int
bpp
,
depth
;
extern
int
bpp
,
depth
;
extern
int
indexed_color
;
extern
int
indexed_color
;
extern
int
dpy_x
,
dpy_y
;
/* size of display */
extern
int
dpy_x
,
dpy_y
;
/* size of display */
extern
int
fb_x
,
fb_y
,
fb_b
;
/* fb size and bpp guesses at display */
extern
int
off_x
,
off_y
;
/* offsets for -sid */
extern
int
off_x
,
off_y
;
/* offsets for -sid */
extern
int
wdpy_x
,
wdpy_y
;
/* for actual sizes in case of -clip */
extern
int
wdpy_x
,
wdpy_y
;
/* for actual sizes in case of -clip */
extern
int
cdpy_x
,
cdpy_y
,
coff_x
,
coff_y
;
/* the -clip params */
extern
int
cdpy_x
,
cdpy_y
,
coff_x
,
coff_y
;
/* the -clip params */
...
...
x11vnc/x11vnc_defs.c
View file @
816d7e06
...
@@ -15,7 +15,7 @@ int xtrap_base_event_type = 0;
...
@@ -15,7 +15,7 @@ int xtrap_base_event_type = 0;
int
xdamage_base_event_type
=
0
;
int
xdamage_base_event_type
=
0
;
/* date +'lastmod: %Y-%m-%d' */
/* date +'lastmod: %Y-%m-%d' */
char
lastmod
[]
=
"0.8.3 lastmod: 2006-08-
02
"
;
char
lastmod
[]
=
"0.8.3 lastmod: 2006-08-
10
"
;
/* X display info */
/* X display info */
...
@@ -27,7 +27,8 @@ Window window = None, rootwin = None; /* polled window, root window (usu. same)
...
@@ -27,7 +27,8 @@ Window window = None, rootwin = None; /* polled window, root window (usu. same)
Visual
*
default_visual
=
NULL
;
/* the default visual (unless -visual) */
Visual
*
default_visual
=
NULL
;
/* the default visual (unless -visual) */
int
bpp
=
0
,
depth
=
0
;
int
bpp
=
0
,
depth
=
0
;
int
indexed_color
=
0
;
int
indexed_color
=
0
;
int
dpy_x
,
dpy_y
;
/* size of display */
int
dpy_x
=
0
,
dpy_y
=
0
;
/* size of display */
int
fb_x
=
0
,
fb_y
=
0
,
fb_b
=
0
;
/* fb size and bpp guesses at display */
int
off_x
,
off_y
;
/* offsets for -sid */
int
off_x
,
off_y
;
/* offsets for -sid */
int
wdpy_x
,
wdpy_y
;
/* for actual sizes in case of -clip */
int
wdpy_x
,
wdpy_y
;
/* for actual sizes in case of -clip */
int
cdpy_x
,
cdpy_y
,
coff_x
,
coff_y
;
/* the -clip params */
int
cdpy_x
,
cdpy_y
,
coff_x
,
coff_y
;
/* the -clip params */
...
...
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