Stefan Dirsch
df71d7e848
OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/tigervnc?expand=0&rev=199
195 lines
5.5 KiB
Python
195 lines
5.5 KiB
Python
#!/usr/bin/python3
|
|
|
|
# This is wrapper for x0vncserver that translate most common x11vnc arguments
|
|
# to x0vncserver's arguments
|
|
|
|
import argparse
|
|
import socket
|
|
import os
|
|
import sys
|
|
|
|
def is_port_free(port):
|
|
try:
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
sock.bind(('', port))
|
|
sock.close()
|
|
return True
|
|
except socket.error as e:
|
|
return False
|
|
|
|
def find_free_port(starting_port):
|
|
for port in range(starting_port, 6000):
|
|
if is_port_free(port):
|
|
return port
|
|
return None
|
|
|
|
parser = argparse.ArgumentParser(add_help=False)
|
|
|
|
parser.add_argument('-help', '-h', action='help')
|
|
parser.add_argument('--version', '-V', action='store_true')
|
|
|
|
parser.add_argument('-storepasswd', nargs=2)
|
|
|
|
parser.add_argument('-display')
|
|
parser.add_argument('-auth')
|
|
parser.add_argument('-N', action='store_true')
|
|
parser.add_argument('-rfbport', type=int)
|
|
parser.add_argument('-autoport', type=int, default=5900)
|
|
parser.add_argument('-6', dest='yes6', action='store_true')
|
|
parser.add_argument('-no6', action='store_true')
|
|
|
|
#parser.add_argument('-once', action='store_true') # TODO: Add support to x0vncserver
|
|
parser.add_argument('-forever', '-many', action='store_true')
|
|
parser.add_argument('-viewonly', action='store_true')
|
|
|
|
#parser.add_argument('-shared', action='store_true') # TODO?
|
|
parser.add_argument('-alwaysshared', action='store_true')
|
|
parser.add_argument('-nevershared', action='store_true')
|
|
parser.add_argument('-dontdisconnect', action='store_true')
|
|
|
|
#parser.add_argument('-timeout', nargs=1, type=int) # TODO?
|
|
|
|
parser.add_argument('-clip')
|
|
parser.add_argument('-deferupdate', type=int)
|
|
parser.add_argument('-noshm', action='store_true')
|
|
|
|
#parser.add_argument('-allow', nargs=1) # TODO?
|
|
#parser.add_argument('-localhost') # TODO?
|
|
|
|
parser.add_argument('-rfbauth')
|
|
parser.add_argument('-nopw', action='store_true')
|
|
parser.add_argument('-unixpw')
|
|
|
|
# Accepted, but ignored arguments
|
|
ignored_arguments = ['-v', '-verbose', '-q', '-quiet']
|
|
parser.add_argument(*ignored_arguments, dest='ignored_argument', action='store_true')
|
|
|
|
|
|
print('Warning: x11vnc is deprecated in favor of x0vncserver.')
|
|
print(' This is a wrapper that maps the most common set of x11vnc')
|
|
print(' arguments to x0vncserver arguments.')
|
|
print()
|
|
print(' Use x0vncserver directly if you want encrypted connection.')
|
|
print()
|
|
|
|
args = parser.parse_args()
|
|
|
|
|
|
# Warnings
|
|
if args.ignored_argument:
|
|
print('Warning: x11vnc wrapper accepts but ignores following arguments:')
|
|
print(', '.join(ignored_arguments))
|
|
|
|
|
|
# vncpasswd
|
|
if args.storepasswd:
|
|
(password, passwdfile) = args.storepasswd
|
|
|
|
os.execlp('vncpasswd.arg', 'vncpasswd.arg', passwdfile, password)
|
|
|
|
|
|
# x0vncserver
|
|
new_args = ['x0vncserver']
|
|
|
|
default_security_type = 'None'
|
|
security_type = default_security_type
|
|
|
|
if args.version:
|
|
new_args.append('-version')
|
|
|
|
if args.display:
|
|
new_args.append('-display')
|
|
new_args.append(args.display)
|
|
|
|
if args.auth:
|
|
os.environ['XAUTHORITY'] = args.auth
|
|
|
|
if args.N:
|
|
display = args.display or os.environ['DISPLAY']
|
|
if not display:
|
|
print('No display set')
|
|
sys.exit(1)
|
|
port = int(display.split(':')[-1]) + 5900
|
|
if is_port_free(port):
|
|
new_args.append('-rfbport')
|
|
new_args.append(str(port))
|
|
else:
|
|
print('Port %d is already used'%port)
|
|
sys.exit(1)
|
|
|
|
if args.rfbport:
|
|
new_args.append('-rfbport')
|
|
new_args.append(str(args.rfbport))
|
|
else:
|
|
port = find_free_port(args.autoport)
|
|
new_args.append('-rfbport')
|
|
new_args.append(str(port))
|
|
|
|
if args.yes6:
|
|
new_args.append('-UseIPv6')
|
|
if args.no6:
|
|
new_args.append('-UseIPv6=0')
|
|
|
|
if args.forever:
|
|
# This is default in x0vncserver
|
|
pass
|
|
|
|
if args.viewonly:
|
|
new_args.append('-AcceptKeyEvents=0')
|
|
new_args.append('-AcceptPointerEvents=0')
|
|
new_args.append('-AcceptCutText=0')
|
|
new_args.append('-AcceptSetDesktopSize=0')
|
|
|
|
if args.alwaysshared:
|
|
new_args.append('-AlwaysShared')
|
|
if args.nevershared:
|
|
new_args.append('-NeverShared')
|
|
if args.dontdisconnect:
|
|
new_args.append('-DisconnectClients=0')
|
|
else:
|
|
new_args.append('-DisconnectClients')
|
|
|
|
if args.clip:
|
|
new_args.append('-Geometry')
|
|
new_args.append(args.clip)
|
|
|
|
if args.deferupdate:
|
|
new_args.append('-DeferUpdate')
|
|
new_args.append(str(args.deferupdate))
|
|
|
|
if args.noshm:
|
|
new_args.append('-UseSHM=0')
|
|
|
|
if args.rfbauth:
|
|
security_type = 'VncAuth'
|
|
new_args.append('-PasswordFile')
|
|
new_args.append(args.rfbauth)
|
|
|
|
if args.unixpw:
|
|
security_type = 'Plain'
|
|
new_args.append('-PlainUsers')
|
|
new_args.append(args.unixpw)
|
|
|
|
new_args.append('-SecurityTypes')
|
|
new_args.append(security_type)
|
|
|
|
if not args.nopw:
|
|
# Note: This is the same warning as the original x11vnc gives
|
|
if security_type == default_security_type:
|
|
print("""
|
|
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
|
|
#@ @#
|
|
#@ ** WARNING ** WARNING ** WARNING ** WARNING ** @#
|
|
#@ @#
|
|
#@ YOU ARE RUNNING X11VNC WITHOUT A PASSWORD!! @#
|
|
#@ @#
|
|
#@ This means anyone with network access to this computer @#
|
|
#@ may be able to view and control your desktop. @#
|
|
#@ @#
|
|
#@ >>> If you did not mean to do this Press CTRL-C now!! <<< @#
|
|
#@ @#
|
|
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
|
|
""")
|
|
|
|
os.execvp('x0vncserver', new_args)
|