SKIP_UI = envbool("XPRA_SKIP_UI", False) VERIFY_HOSTKEY = envbool("XPRA_SSH_VERIFY_HOSTKEY", True) VERIFY_STRICT = envbool("XPRA_SSH_VERIFY_STRICT", False) ADD_KEY = envbool("XPRA_SSH_ADD_KEY", True) #which authentication mechanisms are enabled with paramiko: NONE_AUTH = envbool("XPRA_SSH_NONE_AUTH", True) PASSWORD_AUTH = envbool("XPRA_SSH_PASSWORD_AUTH", True) AGENT_AUTH = envbool("XPRA_SSH_AGENT_AUTH", True) KEY_AUTH = envbool("XPRA_SSH_KEY_AUTH", True) PASSWORD_AUTH = envbool("XPRA_SSH_PASSWORD_AUTH", True) PASSWORD_RETRY = envint("XPRA_SSH_PASSWORD_RETRY", 2) assert PASSWORD_RETRY>=0 MAGIC_QUOTES = envbool("XPRA_SSH_MAGIC_QUOTES", True) TEST_COMMAND_TIMEOUT = envint("XPRA_SSH_TEST_COMMAND_TIMEOUT", 10) EXEC_STDOUT_TIMEOUT = envfloat("XPRA_SSH_EXEC_STDOUT_TIMEOUT", 2) EXEC_STDERR_TIMEOUT = envfloat("XPRA_SSH_EXEC_STDERR_TIMEOUT", 0) def keymd5(k) -> str: import binascii f = bytestostr(binascii.hexlify(k.get_fingerprint())) s = "MD5" while f: s += ":"+f[:2] f = f[2:] return s def force_focus(): from xpra.platform.gui import force_focus as _force_focus
log = Logger("proxy") authlog = Logger("proxy", "auth") from xpra.util import LOGIN_TIMEOUT, AUTHENTICATION_ERROR, SESSION_NOT_FOUND, SERVER_ERROR, repr_ellipsized, print_nested_dict, csv, envfloat, envbool, typedict from xpra.os_util import get_username_for_uid, get_groups, get_home_for_uid, bytestostr, getuid, getgid, WIN32, POSIX from xpra.server.proxy.proxy_instance_process import ProxyInstanceProcess from xpra.server.server_core import ServerCore from xpra.server.control_command import ArgsControlCommand, ControlError from xpra.child_reaper import getChildReaper from xpra.scripts.config import make_defaults_struct, PROXY_START_OVERRIDABLE_OPTIONS from xpra.scripts.main import parse_display_name, connect_to, start_server_subprocess from xpra.make_thread import start_thread PROXY_SOCKET_TIMEOUT = envfloat("XPRA_PROXY_SOCKET_TIMEOUT", "0.1") PROXY_WS_TIMEOUT = envfloat("XPRA_PROXY_WS_TIMEOUT", "1.0") assert PROXY_SOCKET_TIMEOUT>0, "invalid proxy socket timeout" CAN_STOP_PROXY = envbool("XPRA_CAN_STOP_PROXY", False) MAX_CONCURRENT_CONNECTIONS = 200 class ProxyServer(ServerCore): """ This is the proxy server you can launch with "xpra proxy", once authenticated, it will dispatch the connection to the session found using the authenticator's get_sessions() function. """
from xpra.server.control_command import ArgsControlCommand, ControlError from xpra.child_reaper import getChildReaper from xpra.scripts.parsing import parse_bool from xpra.scripts.config import make_defaults_struct, PROXY_START_OVERRIDABLE_OPTIONS, OPTION_TYPES from xpra.scripts.main import parse_display_name, connect_to, start_server_subprocess from xpra.make_thread import start_thread from xpra.log import Logger log = Logger("proxy") authlog = Logger("proxy", "auth") glib = import_glib() freeze_support() PROXY_SOCKET_TIMEOUT = envfloat("XPRA_PROXY_SOCKET_TIMEOUT", "0.1") PROXY_WS_TIMEOUT = envfloat("XPRA_PROXY_WS_TIMEOUT", "1.0") assert PROXY_SOCKET_TIMEOUT > 0, "invalid proxy socket timeout" CAN_STOP_PROXY = envbool("XPRA_CAN_STOP_PROXY", getuid() != 0) STOP_PROXY_SOCKET_TYPES = os.environ.get("XPRA_STOP_PROXY_SOCKET_TYPES", "unix-domain,named-pipe").split(",") PROXY_INSTANCE_THREADED = envbool("XPRA_PROXY_INSTANCE_THREADED", False) PROXY_CLEANUP_GRACE_PERIOD = envfloat("XPRA_PROXY_CLEANUP_GRACE_PERIOD", "0.5") MAX_CONCURRENT_CONNECTIONS = envint("XPRA_PROXY_MAX_CONCURRENT_CONNECTIONS", 200) if WIN32: #DEFAULT_ENV_WHITELIST = "ALLUSERSPROFILE,APPDATA,COMMONPROGRAMFILES,COMMONPROGRAMFILES(X86),COMMONPROGRAMW6432,COMPUTERNAME,COMSPEC,FP_NO_HOST_CHECK,LOCALAPPDATA,NUMBER_OF_PROCESSORS,OS,PATH,PATHEXT,PROCESSOR_ARCHITECTURE,PROCESSOR_ARCHITECTURE,PROCESSOR_IDENTIFIER,PROCESSOR_LEVEL,PROCESSOR_REVISION,PROGRAMDATA,PROGRAMFILES,PROGRAMFILES(X86),PROGRAMW6432,PSMODULEPATH,PUBLIC,SYSTEMDRIVE,SYSTEMROOT,TEMP,TMP,USERDOMAIN,WORKGROUP,USERNAME,USERPROFILE,WINDIR,XPRA_REDIRECT_OUTPUT,XPRA_LOG_FILENAME,XPRA_ALL_DEBUG" DEFAULT_ENV_WHITELIST = "*" else: DEFAULT_ENV_WHITELIST = "LANG,HOSTNAME,PWD,TERM,SHELL,SHLVL,PATH"
from xpra.exit_codes import EXIT_INTERNAL_ERROR from xpra.platform.features import REINIT_WINDOWS from xpra.platform.gui import (get_antialias_info, get_icc_info, get_display_icc_info, show_desktop, get_cursor_size, get_xdpi, get_ydpi, get_number_of_desktops, get_desktop_names, get_wm_name) from xpra.scripts.config import FALSE_OPTIONS from xpra.os_util import monotonic_time from xpra.util import iround, envint, envfloat, log_screen_sizes, engs, flatten_dict, XPRA_SCALING_NOTIFICATION_ID from xpra.client.mixins.stub_client_mixin import StubClientMixin MONITOR_CHANGE_REINIT = envint("XPRA_MONITOR_CHANGE_REINIT") MIN_SCALING = envfloat("XPRA_MIN_SCALING", "0.1") MAX_SCALING = envfloat("XPRA_MAX_SCALING", "8") SCALING_OPTIONS = [ float(x) for x in os.environ.get( "XPRA_TRAY_SCALING_OPTIONS", "0.25,0.5,0.666,1,1.25,1.5,2.0,3.0,4.0,5.0").split(",") if float(x) >= MIN_SCALING and float(x) <= MAX_SCALING ] SCALING_EMBARGO_TIME = int(os.environ.get("XPRA_SCALING_EMBARGO_TIME", "1000")) / 1000.0 def r4cmp( v, rounding=1000.0): #ignore small differences in floats for scale values return iround(v * rounding)
log = Logger("sound") gstlog = Logger("gstreamer") APPSINK = os.environ.get( "XPRA_SOURCE_APPSINK", "appsink name=sink emit-signals=true max-buffers=10 drop=true sync=false async=false qos=false" ) JITTER = envint("XPRA_SOUND_SOURCE_JITTER", 0) SOURCE_QUEUE_TIME = get_queue_time(50, "SOURCE_") BUFFER_TIME = envint("XPRA_SOUND_SOURCE_BUFFER_TIME", 0) #ie: 64 LATENCY_TIME = envint("XPRA_SOUND_SOURCE_LATENCY_TIME", 0) #ie: 32 BUNDLE_METADATA = envbool("XPRA_SOUND_BUNDLE_METADATA", True) LOG_CUTTER = envbool("XPRA_SOUND_LOG_CUTTER", False) SAVE_TO_FILE = os.environ.get("XPRA_SAVE_TO_FILE") CUTTER_THRESHOLD = envfloat("XPRA_CUTTER_THRESHOLD", "0.0001") CUTTER_PRE_LENGTH = envint("XPRA_CUTTER_PRE_LENGTH", 100) CUTTER_RUN_LENGTH = envint("XPRA_CUTTER_RUN_LENGTH", 1000) generation = AtomicInteger() class SoundSource(SoundPipeline): __gsignals__ = SoundPipeline.__generic_signals__.copy() __gsignals__.update({ "new-buffer": n_arg_signal(3), }) def __init__(self, src_type=None,
from xpra.version_util import full_version_str from xpra.util import envint, envfloat, typedict, DETACH_REQUEST, PROTOCOL_ERROR from xpra.os_util import bytestostr, get_machine_id from xpra.net.bytestreams import log_new_connection from xpra.net.socket_util import create_sockets, add_listen_socket, accept_connection, setup_local_sockets from xpra.net.net_util import get_network_caps from xpra.net.protocol import Protocol, CONNECTION_LOST, GIBBERISH from xpra.exit_codes import EXIT_OK, EXIT_FAILURE from xpra.client.mixins.stub_client_mixin import StubClientMixin from xpra.scripts.config import InitException, InitExit from xpra.log import Logger log = Logger("network") SOCKET_TIMEOUT = envfloat("XPRA_CLIENT_SOCKET_TIMEOUT", "0.1") MAX_CONCURRENT_CONNECTIONS = envint("XPRA_MAX_CONCURRENT_CONNECTIONS", 5) REQUEST_TIMEOUT = envint("XPRA_CLIENT_REQUEST_TIMEOUT", 10) class NetworkListener(StubClientMixin): """ Mixin for adding listening sockets to the client, those can be used for - requesting disconnection - info request """ def __init__(self): self.sockets = {} self.socket_info = {} self.socket_options = {}