def write_runner_shell_scripts(contents, overwrite=True): assert POSIX # This used to be given a display-specific name, but now we give it a # single fixed name and if multiple servers are started then the last one # will clobber the rest. This isn't great, but the tradeoff is that it # makes it possible to use bare 'ssh:hostname' display names and # autodiscover the proper numeric display name when only one xpra server # is running on the remote host. Might need to revisit this later if # people run into problems or autodiscovery turns out to be less useful # than expected. log = get_util_logger() MODE = 0o700 from xpra.platform.paths import get_script_bin_dirs for d in get_script_bin_dirs(): scriptdir = osexpand(d) if not os.path.exists(scriptdir): try: os.mkdir(scriptdir, MODE) except Exception as e: log("os.mkdir(%s, %s)", scriptdir, oct(MODE), exc_info=True) log.warn("Warning: failed to create script directory '%s':", scriptdir) log.warn(" %s", e) if scriptdir.startswith( "/var/run/user") or scriptdir.startswith("/run/user"): log.warn(" ($XDG_RUNTIME_DIR has not been created?)") continue scriptpath = os.path.join(scriptdir, "run-xpra") if os.path.exists(scriptpath) and not overwrite: continue # Write out a shell-script so that we can start our proxy in a clean # environment: try: with umask_context(0o022): h = os.open(scriptpath, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, MODE) try: os.write(h, contents) finally: os.close(h) except Exception as e: log("writing to %s", scriptpath, exc_info=True) log.error("Error: failed to write script file '%s':", scriptpath) log.error(" %s\n", e)
def write_runner_shell_scripts(contents, overwrite=True): # This used to be given a display-specific name, but now we give it a # single fixed name and if multiple servers are started then the last one # will clobber the rest. This isn't great, but the tradeoff is that it # makes it possible to use bare 'ssh:hostname' display names and # autodiscover the proper numeric display name when only one xpra server # is running on the remote host. Might need to revisit this later if # people run into problems or autodiscovery turns out to be less useful # than expected. log = get_util_logger() from xpra.platform.paths import get_script_bin_dirs for d in get_script_bin_dirs(): scriptdir = osexpand(d) if not os.path.exists(scriptdir): try: os.mkdir(scriptdir, 0o700) except Exception as e: log("os.mkdir(%s, 0o700)", scriptdir, exc_info=True) log.warn("Warning: failed to create script directory '%s':", scriptdir) log.warn(" %s", e) if scriptdir.startswith( "/var/run/user") or scriptdir.startswith("/run/user"): log.warn(" ($XDG_RUNTIME_DIR has not been created?)") continue scriptpath = os.path.join(scriptdir, "run-xpra") if os.path.exists(scriptpath) and not overwrite: continue # Write out a shell-script so that we can start our proxy in a clean # environment: try: with open(scriptpath, "w") as scriptfile: # Unix is a little silly sometimes: umask = os.umask(0) os.umask(umask) os.fchmod(scriptfile.fileno(), 0o700 & ~umask) scriptfile.write(contents.encode()) except Exception as e: log("writing to %s", scriptpath, exc_info=True) log.error("Error: failed to write script file '%s':", scriptpath) log.error(" %s\n", e)