Ejemplo n.º 1
0
def run_mode(script_file, parser, options, args, mode):
    #configure default logging handler:
    if os.name=="posix" and os.getuid()==0 and mode!="proxy":
        warn("\nWarning: running as root")

    configure_logging(options, mode)

    try:
        ssh_display = len(args)>0 and (args[0].startswith("ssh/") or args[0].startswith("ssh:"))
        if mode in ("start", "shadow") and ssh_display:
            #ie: "xpra start ssh:HOST:DISPLAY --start-child=xterm"
            return run_remote_server(parser, options, args, mode)
        elif (mode in ("start", "upgrade", "proxy") and supports_server) or (mode=="shadow" and supports_shadow):
            nox()
            from xpra.scripts.server import run_server
            return run_server(parser, options, mode, script_file, args)
        elif mode in ("attach", "detach", "screenshot", "version", "info", "control"):
            return run_client(parser, options, args, mode)
        elif mode in ("stop", "exit") and (supports_server or supports_shadow):
            nox()
            return run_stopexit(mode, parser, options, args)
        elif mode == "list" and (supports_server or supports_shadow):
            return run_list(parser, options, args)
        elif mode in ("_proxy", "_proxy_start", "_shadow_start") and (supports_server or supports_shadow):
            nox()
            return run_proxy(parser, options, script_file, args, mode)
        else:
            parser.error("invalid mode '%s'" % mode)
            return 1
    except KeyboardInterrupt, e:
        sys.stderr.write("\ncaught %s, exiting\n" % repr(e))
        return 128+signal.SIGINT
Ejemplo n.º 2
0
def run_mode(script_file, parser, options, args, mode):
    #configure default logging handler:
    if os.name=="posix" and os.getuid()==0 and mode!="proxy":
        warn("\nWarning: running as root")

    configure_logging(options, mode)

    try:
        ssh_display = len(args)>0 and (args[0].startswith("ssh/") or args[0].startswith("ssh:"))
        if mode in ("start", "shadow") and ssh_display:
            #ie: "xpra start ssh:HOST:DISPLAY --start-child=xterm"
            return run_remote_server(parser, options, args, mode)
        elif (mode in ("start", "upgrade", "proxy") and supports_server) or (mode=="shadow" and supports_shadow):
            nox()
            from xpra.scripts.server import run_server
            return run_server(parser, options, mode, script_file, args)
        elif mode in ("attach", "detach", "screenshot", "version", "info", "control"):
            return run_client(parser, options, args, mode)
        elif mode in ("stop", "exit") and (supports_server or supports_shadow):
            nox()
            return run_stopexit(mode, parser, options, args)
        elif mode == "list" and (supports_server or supports_shadow):
            return run_list(parser, options, args)
        elif mode in ("_proxy", "_proxy_start", "_shadow_start") and (supports_server or supports_shadow):
            nox()
            return run_proxy(parser, options, script_file, args, mode)
        else:
            parser.error("invalid mode '%s'" % mode)
            return 1
    except KeyboardInterrupt, e:
        sys.stderr.write("\ncaught %s, exiting\n" % repr(e))
        return 128+signal.SIGINT
Ejemplo n.º 3
0
def main(script_file, cmdline):
    #################################################################
    ## NOTE NOTE NOTE
    ##
    ## If you modify anything here, then remember to update the man page
    ## (xpra.1) as well!
    ##
    ## NOTE NOTE NOTE
    #################################################################
    if XPRA_LOCAL_SERVERS_SUPPORTED:
        start_str = "\t%prog start DISPLAY\n"
        list_str = "\t%prog list\n"
        upgrade_str = "\t%prog upgrade DISPLAY"
        note_str = ""
        stop_str = "\t%prog stop [DISPLAY]\n"
    else:
        start_str = ""
        list_str = ""
        upgrade_str = ""
        note_str = "(This xpra installation does not support starting local servers.)"
        stop_str = ""
    parser = OptionParser(version="xpra v%s" % xpra.__version__,
                          usage="".join([
                              "\n", start_str, "\t%prog attach [DISPLAY]\n",
                              "\t%prog detach [DISPLAY]\n",
                              "\t%prog screenshot filename [DISPLAY]\n",
                              "\t%prog info [DISPLAY]\n",
                              "\t%prog version [DISPLAY]\n", stop_str,
                              list_str, upgrade_str, note_str
                          ]))
    if XPRA_LOCAL_SERVERS_SUPPORTED:
        group = OptionGroup(
            parser, "Server Options",
            "These options are only relevant on the server when using the 'start' or 'upgrade' mode."
        )
        group.add_option(
            "--start-child",
            action="append",
            dest="children",
            metavar="CMD",
            help="program to spawn in new server (may be repeated)")
        group.add_option(
            "--exit-with-children",
            action="store_true",
            dest="exit_with_children",
            default=False,
            help="Terminate server when --start-child command(s) exit")
        group.add_option("--no-daemon",
                         action="store_false",
                         dest="daemon",
                         default=True,
                         help="Don't daemonize when running as a server")
        group.add_option(
            "--use-display",
            action="store_true",
            dest="use_display",
            default=False,
            help="Use an existing display rather than starting one with xvfb")
        group.add_option(
            "--xvfb",
            action="store",
            dest="xvfb",
            default=
            "Xvfb +extension Composite -screen 0 3840x2560x24+32 -nolisten tcp -noreset -auth $XAUTHORITY",
            metavar="CMD",
            help="How to run the headless X server (default: '%default')")
        group.add_option(
            "--no-randr",
            action="store_false",
            dest="randr",
            default=True,
            help=
            "Disables X11 randr support, xrandr allows the virtual display to be resized to match the client's dimensions (if supported by Xvfb)"
        )
        group.add_option("--bind-tcp",
                         action="store",
                         dest="bind_tcp",
                         default=None,
                         metavar="[HOST]:PORT",
                         help="Listen for connections over TCP (insecure)")
        parser.add_option_group(group)

    group = OptionGroup(
        parser, "Server Controlled Features",
        "These options can be used to turn off certain features, "
        "they can be specified on the client or on the server, "
        "but the client cannot enable them if they are disabled on the server."
    )
    group.add_option("--no-clipboard",
                     action="store_false",
                     dest="clipboard",
                     default=True,
                     help="Disable clipboard support")
    group.add_option(
        "--no-pulseaudio",
        action="store_false",
        dest="pulseaudio",
        default=True,
        help="Disable pulseaudio support via X11 root window properties")
    group.add_option(
        "--no-mmap",
        action="store_false",
        dest="mmap",
        default=True,
        help="Disable memory mapped transfers for local connections")
    group.add_option(
        "--readonly",
        action="store_true",
        dest="readonly",
        default=False,
        help="Ignore all keyboard input and mouse events from the clients")
    parser.add_option_group(group)

    group = OptionGroup(
        parser, "Client Picture Encoding and Compression Options",
        "These options are used by the client to specify the desired picture and network data compression."
    )
    group.add_option(
        "--encoding",
        action="store",
        metavar="ENCODING",
        dest="encoding",
        type="str",
        help="What image compression algorithm to use: %s. Default: %s" %
        (", ".join(ENCODINGS), DEFAULT_ENCODING))
    if "jpeg" in ENCODINGS:
        group.add_option(
            "--jpeg-quality",
            action="store",
            metavar="LEVEL",
            dest="jpegquality",
            type="int",
            default="80",
            help="Use jpeg compression with given quality (1-100). Default: 80"
        )
        group.add_option(
            "-b",
            "--max-bandwidth",
            action="store",
            dest="max_bandwidth",
            type="float",
            default=0.0,
            metavar="BANDWIDTH (kB/s)",
            help=
            "Specify the link's maximal receive speed to auto-adjust JPEG quality, 0.0 disables. (default: disabled)"
        )
    group.add_option(
        "--auto-refresh-delay",
        action="store",
        dest="auto_refresh_delay",
        type="float",
        default=0.0,
        metavar="DELAY",
        help="Idle delay in seconds before doing automatic lossless refresh." +
        " 0.0 to disable." + " Default: %default.")
    group.add_option(
        "-z",
        "--compress",
        action="store",
        dest="compression_level",
        type="int",
        default=3,
        metavar="LEVEL",
        help="How hard to work on compressing data." +
        " You generally do not need to use this option," +
        " the default value should be adequate." +
        " 0 to disable compression," +
        " 9 for maximal (slowest) compression. Default: %default.")
    parser.add_option_group(group)

    group = OptionGroup(
        parser, "Client Features Options",
        "These options control client features that affect the appearance or the keyboard."
    )
    group.add_option(
        "--session-name",
        action="store",
        dest="session_name",
        default=None,
        help=
        "The name of this session, which may be used in notifications, menus, etc. Default: Xpra"
    )
    group.add_option(
        "--title",
        action="store",
        dest="title",
        default="@title@ on @client-machine@",
        help=
        "Text which is shown as window title, may use remote metadata variables (default: '@title@ on @client-machine@')"
    )
    group.add_option(
        "--window-icon",
        action="store",
        dest="window_icon",
        default=None,
        help=
        "Path to the default image which will be used for all windows (the application may override this)"
    )
    # let the platform specific code add its own options:
    # adds "--no-tray" for platforms that support it
    add_client_options(group)
    group.add_option(
        "--tray-icon",
        action="store",
        dest="tray_icon",
        default=None,
        help=
        "Path to the image which will be used as icon for the system-tray or dock"
    )
    group.add_option(
        "--key-shortcut",
        action="append",
        dest="key_shortcuts",
        type="str",
        default=[],
        help="Define key shortcuts that will trigger specific actions." +
        " Defaults to 'Meta+Shift+F4:quit' if no shortcuts are defined.")
    group.add_option(
        "--no-keyboard-sync",
        action="store_false",
        dest="keyboard_sync",
        default=True,
        help=
        "Disable keyboard state synchronization, prevents keys from repeating on high latency links but also may disrupt applications which access the keyboard directly"
    )
    parser.add_option_group(group)

    group = OptionGroup(
        parser, "Advanced Options",
        "These options apply to both client and server. Please refer to the man page for details."
    )
    group.add_option(
        "--password-file",
        action="store",
        dest="password_file",
        default=None,
        help=
        "The file containing the password required to connect (useful to secure TCP mode)"
    )
    group.add_option(
        "--socket-dir",
        action="store",
        dest="sockdir",
        default=None,
        help=
        "Directory to place/look for the socket files in (default: $XPRA_SOCKET_DIR or '~/.xpra')"
    )
    group.add_option(
        "-d",
        "--debug",
        action="store",
        dest="debug",
        default=None,
        metavar="FILTER1,FILTER2,...",
        help="List of categories to enable debugging for (or \"all\")")
    parser.add_option_group(group)

    group = OptionGroup(parser, "Advanced Client Options",
                        "Please refer to the man page for details.")
    group.add_option("--ssh",
                     action="store",
                     dest="ssh",
                     default=DEFAULT_SSH_CMD,
                     metavar="CMD",
                     help="How to run ssh (default: '%default')")
    group.add_option(
        "--mmap-group",
        action="store_true",
        dest="mmap_group",
        default=False,
        help=
        "When creating the mmap file with the client, set the group permission on the mmap file to the same value as the owner of the server socket file we connect to (default: '%default')"
    )
    group.add_option(
        "--enable-pings",
        action="store_true",
        dest="send_pings",
        default=False,
        help="Send ping packets every second to gather latency statistics")
    group.add_option(
        "--remote-xpra",
        action="store",
        dest="remote_xpra",
        default=".xpra/run-xpra",
        metavar="CMD",
        help="How to run xpra on the remote host (default: '%default')")
    parser.add_option_group(group)

    (options, args) = parser.parse_args(cmdline[1:])
    if "jpeg" not in ENCODINGS:
        #ensure the default values are set even though
        #the option is not shown to the user as it is not available
        options.jpegquality = 80
        options.max_bandwidth = 0

    if not args:
        parser.error("need a mode")
    if options.encoding and options.encoding not in ENCODINGS:
        parser.error("encoding %s is not supported, try: %s" %
                     (options.encoding, ", ".join(ENCODINGS)))

    def toggle_logging(level):
        if not options.debug:
            logging.root.setLevel(level)
            return
        categories = options.debug.split(",")
        for cat in categories:
            if cat.startswith("-"):
                logging.getLogger(cat[1:]).setLevel(logging.INFO)
            if cat == "all":
                logger = logging.root
            else:
                logger = logging.getLogger(cat)
            logger.setLevel(level)

    def dump_frames(*arsg):
        import traceback
        frames = sys._current_frames()
        print("")
        print("found %s frames:" % len(frames))
        for fid, frame in frames.items():
            print("%s - %s:" % (fid, frame))
            traceback.print_stack(frame)
        print("")

    if options.debug is not None:
        toggle_logging(logging.DEBUG)
    else:
        toggle_logging(logging.INFO)
    logging.root.addHandler(logging.StreamHandler(sys.stderr))
    if os.name == "posix":

        def sigusr1(*args):
            dump_frames()
            toggle_logging(logging.DEBUG)

        def sigusr2(*args):
            toggle_logging(logging.INFO)

        signal.signal(signal.SIGUSR1, sigusr1)
        signal.signal(signal.SIGUSR2, sigusr2)

    mode = args.pop(0)
    if mode in ("start", "upgrade") and XPRA_LOCAL_SERVERS_SUPPORTED:
        nox()
        from xpra.scripts.server import run_server
        return run_server(parser, options, mode, script_file, args)
    elif mode in ("attach", "detach", "screenshot", "version", "info"):
        return run_client(parser, options, args, mode)
    elif mode == "stop" and XPRA_LOCAL_SERVERS_SUPPORTED:
        nox()
        return run_stop(parser, options, args)
    elif mode == "list" and XPRA_LOCAL_SERVERS_SUPPORTED:
        return run_list(parser, options, args)
    elif mode == "_proxy" and XPRA_LOCAL_SERVERS_SUPPORTED:
        nox()
        return run_proxy(parser, options, args)
    else:
        parser.error("invalid mode '%s'" % mode)
        return 1
Ejemplo n.º 4
0
    if os.name == "posix":

        def sigusr1(*args):
            dump_frames()
            toggle_logging(logging.DEBUG)

        def sigusr2(*args):
            toggle_logging(logging.INFO)

        signal.signal(signal.SIGUSR1, sigusr1)
        signal.signal(signal.SIGUSR2, sigusr2)

    if mode in ("start", "upgrade") and XPRA_LOCAL_SERVERS_SUPPORTED:
        nox()
        from xpra.scripts.server import run_server
        return run_server(parser, options, mode, script_file, args)
    elif mode in ("attach", "detach", "screenshot", "version", "info"):
        return run_client(parser, options, args, mode)
    elif mode == "stop" and XPRA_LOCAL_SERVERS_SUPPORTED:
        nox()
        return run_stop(parser, options, args)
    elif mode == "list" and XPRA_LOCAL_SERVERS_SUPPORTED:
        return run_list(parser, options, args)
    elif mode == "_proxy" and XPRA_LOCAL_SERVERS_SUPPORTED:
        nox()
        return run_proxy(parser, options, args)
    else:
        parser.error("invalid mode '%s'" % mode)
        return 1

Ejemplo n.º 5
0
        toggle_logging(logging.INFO)

    #register posix signals for debugging:
    if os.name=="posix":
        def sigusr1(*args):
            dump_frames()
            toggle_logging(logging.DEBUG)
        def sigusr2(*args):
            toggle_logging(logging.INFO)
        signal.signal(signal.SIGUSR1, sigusr1)
        signal.signal(signal.SIGUSR2, sigusr2)

    if mode in ("start", "upgrade") and XPRA_LOCAL_SERVERS_SUPPORTED:
        nox()
        from xpra.scripts.server import run_server
        return run_server(parser, options, mode, script_file, args)
    elif mode in ("attach", "detach", "screenshot", "version", "info"):
        return run_client(parser, options, args, mode)
    elif mode == "stop" and XPRA_LOCAL_SERVERS_SUPPORTED:
        nox()
        return run_stop(parser, options, args)
    elif mode == "list" and XPRA_LOCAL_SERVERS_SUPPORTED:
        return run_list(parser, options, args)
    elif mode == "_proxy" and XPRA_LOCAL_SERVERS_SUPPORTED:
        nox()
        return run_proxy(parser, options, args)
    else:
        parser.error("invalid mode '%s'" % mode)
        return 1

def get_default_socket_dir():
Ejemplo n.º 6
0
def main(script_file, cmdline):
    #################################################################
    ## NOTE NOTE NOTE
    ##
    ## If you modify anything here, then remember to update the man page
    ## (xpra.1) as well!
    ##
    ## NOTE NOTE NOTE
    #################################################################
    if XPRA_LOCAL_SERVERS_SUPPORTED:
        start_str = "\t%prog start DISPLAY\n"
        list_str = "\t%prog list\n"
        upgrade_str = "\t%prog upgrade DISPLAY"
        note_str = ""
        stop_str = "\t%prog stop [DISPLAY]\n"
    else:
        start_str = ""
        list_str = ""
        upgrade_str = ""
        note_str = "(This xpra installation does not support starting local servers.)"
        stop_str = ""
    parser = OptionParser(version="xpra v%s" % xpra.__version__,
                          usage="".join(["\n",
                                         start_str,
                                         "\t%prog attach [DISPLAY]\n",
                                         "\t%prog detach [DISPLAY]\n",
                                         "\t%prog screenshot filename [DISPLAY]\n",
                                         "\t%prog version [DISPLAY]\n",
                                         stop_str,
                                         list_str,
                                         upgrade_str,
                                         note_str]))
    if XPRA_LOCAL_SERVERS_SUPPORTED:
        parser.add_option("--start-child", action="append",
                          dest="children", metavar="CMD",
                          help="program to spawn in new server (may be repeated)")
        parser.add_option("--exit-with-children", action="store_true",
                          dest="exit_with_children", default=False,
                          help="Terminate server when --start-child command(s) exit")
        parser.add_option("--no-daemon", action="store_false",
                          dest="daemon", default=True,
                          help="Don't daemonize when running as a server")
        parser.add_option("--use-display", action="store_true",
                          dest="use_display", default=False,
                          help="Use an existing display rather than starting one with xvfb")
        parser.add_option("--xvfb", action="store",
                          dest="xvfb", default="Xvfb +extension Composite -screen 0 3840x2560x24+32 -nolisten tcp -noreset -auth $XAUTHORITY", metavar="CMD",
                          help="How to run the headless X server (default: '%default')")
        parser.add_option("--no-randr", action="store_false",
                          dest="randr", default=True,
                          help="Disables X11 randr support, xrandr allows the virtual display to be resized to match the client's dimensions (if supported by Xvfb)")
        parser.add_option("--bind-tcp", action="store",
                          dest="bind_tcp", default=None,
                          metavar="[HOST]:PORT",
                          help="Listen for connections over TCP (insecure)")
    parser.add_option("--no-clipboard", action="store_false",
                      dest="clipboard", default=True,
                      help="Disable clipboard support")
    parser.add_option("--no-pulseaudio", action="store_false",
                      dest="pulseaudio", default=True,
                      help="Disable pulseaudio support via X11 root window properties")
    parser.add_option("--no-keyboard-sync", action="store_false",
                      dest="keyboard_sync", default=True,
                      help="Disable keyboard state synchronization, prevents keys from repeating on high latency links but also may disrupt applications which access the keyboard directly")
    # let the platform specific code add its own options:
    # adds "--no-tray" for platforms that support it
    add_client_options(parser)
    parser.add_option("--no-mmap", action="store_false",
                      dest="mmap", default=True,
                      help="Disable memory mapped transfers for local connections")
    parser.add_option("--password-file", action="store",
                      dest="password_file", default=None,
                      help="The file containing the password required to connect (useful to secure TCP mode)")
    parser.add_option("--session-name", action="store",
                      dest="session_name", default=None,
                      help="The name of this session, which may be used in notifications, menus, etc. Default: Xpra")
    parser.add_option("--title-suffix", action="store",
                      dest="title_suffix", default=None,
                      help="Text which is appended to the window's title (deprecated - use --title instead)")
    parser.add_option("--title", action="store",
                      dest="title", default="@title@ on @client-machine@",
                      help="Text which is shown as window title, may use remote metadata variables (default: '@title@ on @client-machine@')")
    parser.add_option("--window-icon", action="store",
                          dest="window_icon", default=None,
                          help="Path to the default image which will be used for all windows (the application may override this)")
    parser.add_option("--tray-icon", action="store",
                          dest="tray_icon", default=None,
                          help="Path to the image which will be used as icon for the system-tray or dock")
    parser.add_option("--encoding", action="store",
                      metavar="ENCODING",
                      dest="encoding", type="str",
                      help="What image compression algorithm to use: %s. Default: %s" % (", ".join(ENCODINGS), DEFAULT_ENCODING))
    if "jpeg" in ENCODINGS:
        parser.add_option("--jpeg-quality", action="store",
                          metavar="LEVEL",
                          dest="jpegquality", type="int", default="80",
                          help="Use jpeg compression with given quality (1-100). Default: 80")
        parser.add_option("-b", "--max-bandwidth", action="store",
                          dest="max_bandwidth", type="float", default=0.0, metavar="BANDWIDTH (kB/s)",
                          help="Specify the link's maximal receive speed to auto-adjust JPEG quality, 0.0 disables. (default: disabled)")
    parser.add_option("--auto-refresh-delay", action="store",
                      dest="auto_refresh_delay", type="float", default=0.0,
                      metavar="DELAY",
                      help="Idle delay in seconds before doing automatic lossless refresh."
                      + " 0.0 to disable."
                      + " Default: %default.")
    parser.add_option("--key-shortcut", action="append",
                      dest="key_shortcuts", type="str", default=[],
                      help="Define key shortcuts that will trigger specific actions."
                      + " Defaults to Meta+Shift+F4:quit if no shortcuts are defined.")
    parser.add_option("--readonly", action="store_true",
                      dest="readonly", default=False,
                      help="Ignore all keyboard input and mouse events from client")
    parser.add_option("-z", "--compress", action="store",
                      dest="compression_level", type="int", default=3,
                      metavar="LEVEL",
                      help="How hard to work on compressing data."
                      + " 0 to disable compression,"
                      + " 9 for maximal (slowest) compression. Default: %default.")
    parser.add_option("--ssh", action="store",
                      dest="ssh", default=DEFAULT_SSH_CMD, metavar="CMD",
                      help="How to run ssh (default: '%default')")
    parser.add_option("--socket-dir", action="store",
                      dest="sockdir", default="~/.xpra",
                      help="Directory to place the socket file in (default: '%default')")
    parser.add_option("--mmap-group", action="store_true",
                      dest="mmap_group", default=False,
                      help="When creating the mmap file with the client, set the group permission on the mmap file to the same value as the owner of the server socket file we connect to (default: '%default')")
    parser.add_option("--remote-xpra", action="store",
                      dest="remote_xpra", default=".xpra/run-xpra",
                      metavar="CMD",
                      help="How to run xpra on the remote host (default: '%default')")
    parser.add_option("-d", "--debug", action="store",
                      dest="debug", default=None, metavar="FILTER1,FILTER2,...",
                      help="List of categories to enable debugging for (or \"all\")")
    (options, args) = parser.parse_args(cmdline[1:])
    if "jpeg" not in ENCODINGS:
        #ensure the default values are set even though
        #the option is not shown to the user as it is not available
        options.jpegquality = 80
        options.max_bandwidth = 0

    if not args:
        parser.error("need a mode")
    if options.encoding and options.encoding not in ENCODINGS:
        parser.error("encoding %s is not supported, try: %s" % (options.encoding, ", ".join(ENCODINGS)))

    def toggle_logging(level):
        if not options.debug:
            logging.root.setLevel(level)
            return
        categories = options.debug.split(",")
        for cat in categories:
            if cat.startswith("-"):
                logging.getLogger(cat[1:]).setLevel(logging.INFO)
            if cat == "all":
                logger = logging.root
            else:
                logger = logging.getLogger(cat)
            logger.setLevel(level)

    def dump_frames(*arsg):
        import traceback
        frames = sys._current_frames()
        print("")
        print("found %s frames:" % len(frames))
        for fid,frame in frames.items():
            print("%s - %s:" % (fid, frame))
            traceback.print_stack(frame)
        print("")

    if options.debug is not None:
        toggle_logging(logging.DEBUG)
    else:
        toggle_logging(logging.INFO)
    logging.root.addHandler(logging.StreamHandler(sys.stderr))
    if os.name=="posix":
        def sigusr1(*args):
            dump_frames()
            toggle_logging(logging.DEBUG)
        def sigusr2(*args):
            toggle_logging(logging.INFO)
        signal.signal(signal.SIGUSR1, sigusr1)
        signal.signal(signal.SIGUSR2, sigusr2)

    mode = args.pop(0)
    if mode in ("start", "upgrade") and XPRA_LOCAL_SERVERS_SUPPORTED:
        nox()
        from xpra.scripts.server import run_server
        run_server(parser, options, mode, script_file, args)
    elif mode in ("attach", "detach", "screenshot", "version"):
        run_client(parser, options, args, mode)
    elif mode == "stop" and XPRA_LOCAL_SERVERS_SUPPORTED:
        nox()
        run_stop(parser, options, args)
    elif mode == "list" and XPRA_LOCAL_SERVERS_SUPPORTED:
        run_list(parser, options, args)
    elif mode == "_proxy" and XPRA_LOCAL_SERVERS_SUPPORTED:
        nox()
        run_proxy(parser, options, args)
    else:
        parser.error("invalid mode '%s'" % mode)
Ejemplo n.º 7
0
def main(script_file, cmdline):
    #################################################################
    ## NOTE NOTE NOTE
    ##
    ## If you modify anything here, then remember to update the man page
    ## (xpra.1) as well!
    ##
    ## NOTE NOTE NOTE
    #################################################################
    parser = OptionParser(version="xpra v%s" % xpra.__version__,
                          usage=("\n"
                                 + "\t%prog start DISPLAY\n"
                                 + "\t%prog attach [DISPLAY]\n"
                                 + "\t%prog stop [DISPLAY]\n"
                                 + "\t%prog list\n"
                                 + "\t%prog upgrade DISPLAY"))
    parser.add_option("--start-child", action="append",
                      dest="children", metavar="CMD",
                      help="program to spawn in new server (may be repeated)")
    parser.add_option("--exit-with-children", action="store_true",
                      dest="exit_with_children", default=False,
                      help="Terminate server when --start-child command(s) exit")
    parser.add_option("--no-daemon", action="store_false",
                      dest="daemon", default=True,
                      help="Don't daemonize when running as a server")
    parser.add_option("--bind-tcp", action="store",
                      dest="bind_tcp", default=None,
                      metavar="[HOST]:PORT",
                      help="Listen for connections over TCP (insecure)")
    parser.add_option("--remote-xpra", action="store",
                      dest="remote_xpra", default=None, metavar="CMD",
                      help="How to run 'xpra' on the remote host")
    parser.add_option("-d", "--debug", action="store",
                      dest="debug", default=None, metavar="FILTER1,FILTER2,...",
                      help="List of categories to enable debugging for (or \"all\")")
    (options, args) = parser.parse_args(cmdline[1:])

    if not args:
        parser.error("need a mode")

    logging.root.setLevel(logging.INFO)
    if options.debug is not None:
        categories = options.debug.split(",")
        for cat in categories:
            if cat == "all":
                logger = logging.root
            else:
                logger = logging.getLogger(cat)
            logger.setLevel(logging.DEBUG)
    logging.root.addHandler(logging.StreamHandler(sys.stderr))

    mode = args.pop(0)
    if mode in ("start", "upgrade"):
        nox()
        from xpra.scripts.server import run_server
        run_server(parser, options, mode, script_file, args)
    elif mode == "attach":
        run_client(parser, options, args)
    elif mode == "stop":
        nox()
        run_stop(parser, options, args)
    elif mode == "list":
        run_list(parser, options, args)
    elif mode == "_proxy":
        nox()
        run_proxy(parser, options, args)
    else:
        parser.error("invalid mode '%s'" % mode)
Ejemplo n.º 8
0
def main(script_file, cmdline):
    #################################################################
    ## NOTE NOTE NOTE
    ##
    ## If you modify anything here, then remember to update the man page
    ## (xpra.1) as well!
    ##
    ## NOTE NOTE NOTE
    #################################################################
    if XPRA_LOCAL_SERVERS_SUPPORTED:
        start_str = "\t%prog start DISPLAY\n"
        list_str = "\t%prog list\n"
        upgrade_str = "\t%prog upgrade DISPLAY"
        note_str = ""
    else:
        start_str = ""
        list_str = ""
        upgrade_str = ""
        note_str = "(This xpra install does not support starting local servers.)"
    parser = OptionParser(version="xpra v%s" % xpra.__version__,
                          usage="".join(["\n",
                                         start_str,
                                         "\t%prog attach [DISPLAY]\n",
                                         "\t%prog stop [DISPLAY]\n",
                                         list_str,
                                         upgrade_str,
                                         note_str]))
    if XPRA_LOCAL_SERVERS_SUPPORTED:
        parser.add_option("--start-child", action="append",
                          dest="children", metavar="CMD",
                          help="program to spawn in new server (may be repeated)")
        parser.add_option("--exit-with-children", action="store_true",
                          dest="exit_with_children", default=False,
                          help="Terminate server when --start-child command(s) exit")
        parser.add_option("--no-daemon", action="store_false",
                          dest="daemon", default=True,
                          help="Don't daemonize when running as a server")
        parser.add_option("--xvfb", action="store",
                          dest="xvfb", default="Xvfb", metavar="CMD",
                          help="How to run the headless X server (default: '%default')")
        parser.add_option("--bind-tcp", action="store",
                          dest="bind_tcp", default=None,
                          metavar="[HOST]:PORT",
                          help="Listen for connections over TCP (insecure)")
    parser.add_option("-z", "--compress", action="store",
                      dest="compression_level", type="int", default=3,
                      metavar="LEVEL",
                      help="How hard to work on compressing data."
                      + " 0 to disable compression,"
                      + " 9 for maximal (slowest) compression. Default: %default.")
    parser.add_option("--ssh", action="store",
                      dest="ssh", default=DEFAULT_SSH_CMD, metavar="CMD",
                      help="How to run ssh (default: '%default')")
    parser.add_option("--remote-xpra", action="store",
                      dest="remote_xpra", default=".xpra/run-xpra",
                      metavar="CMD",
                      help="How to run xpra on the remote host (default: '%default')")
    parser.add_option("-d", "--debug", action="store",
                      dest="debug", default=None, metavar="FILTER1,FILTER2,...",
                      help="List of categories to enable debugging for (or \"all\")")
    (options, args) = parser.parse_args(cmdline[1:])

    if not args:
        parser.error("need a mode")

    logging.root.setLevel(logging.INFO)
    if options.debug is not None:
        categories = options.debug.split(",")
        for cat in categories:
            if cat.startswith("-"):
                logging.getLogger(cat[1:]).setLevel(logging.INFO)
            if cat == "all":
                logger = logging.root
            else:
                logger = logging.getLogger(cat)
            logger.setLevel(logging.DEBUG)
    logging.root.addHandler(logging.StreamHandler(sys.stderr))

    mode = args.pop(0)
    
    if mode in ("start", "upgrade") and XPRA_LOCAL_SERVERS_SUPPORTED:
        nox()
        from xpra.scripts.server import run_server
        run_server(parser, options, mode, script_file, args)
    elif mode == "attach":
        try:
            run_client(parser, options, args)
        except KeyboardInterrupt:
            sys.stdout.write("Exiting on keyboard interrupt\n")
    elif mode == "stop":
        nox()
        run_stop(parser, options, args)
    elif mode == "list" and XPRA_LOCAL_SERVERS_SUPPORTED:
        run_list(parser, options, args)
    elif mode == "_proxy" and XPRA_LOCAL_SERVERS_SUPPORTED:
        nox()
        run_proxy(parser, options, args)
    else:
        parser.error("invalid mode '%s'" % mode)