Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1# This file is part of Xpra. 

2# Copyright (C) 2010 Nathaniel Smith <njs@pobox.com> 

3# Copyright (C) 2010-2019 Antoine Martin <antoine@xpra.org> 

4# Xpra is released under the terms of the GNU GPL v2, or, at your option, any 

5# later version. See the file COPYING for details. 

6 

7import os.path 

8import sys 

9import site 

10 

11 

12def do_get_desktop_background_paths(): 

13 return [ 

14 "/usr/share/backgrounds/images/default.png", 

15 "/usr/share/backgrounds/images/*default*.png", 

16 "/usr/share/backgrounds/*default*png", 

17 "/usr/share/backgrounds/gnome/adwaita*.jpg", #Debian Stretch 

18 "/usr/share/backgrounds/images/*jpg", #CentOS 7 

19 ] 

20 

21 

22def do_get_install_prefix(): 

23 #special case for "user" installations, ie: 

24 #$HOME/.local/lib/python3.8/site-packages/xpra/platform/paths.py 

25 try: 

26 base = site.getuserbase() 

27 except Exception: 

28 base = site.USER_BASE 

29 if __file__.startswith(base): 

30 return base 

31 if sys.argv: 

32 p = sys.argv[0].find("/bin/xpra") 

33 if p>0: 

34 return sys.argv[0][:p] 

35 return sys.prefix 

36 

37def do_get_resources_dir(): 

38 #is there a better/cleaner way? 

39 from xpra.platform.paths import get_install_prefix 

40 options = [get_install_prefix(), sys.exec_prefix] + \ 

41 os.environ.get("XDG_DATA_DIRS", "/usr/local/share:/usr/share").split(":") 

42 for x in options: 

43 p = os.path.join(x, "share", "xpra") 

44 if os.path.exists(p) and os.path.isdir(p): 

45 return p 

46 try: 

47 # test for a local installation path (run from source tree): 

48 local_share_path = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), "..", "share", "xpra")) 

49 if os.path.exists(local_share_path) and os.path.isdir(local_share_path): 

50 return local_share_path 

51 except Exception: 

52 pass 

53 return os.getcwd() 

54 

55def do_get_app_dir(): 

56 from xpra.platform.paths import get_resources_dir 

57 return get_resources_dir() 

58 

59def do_get_icon_dir(): 

60 from xpra.platform.paths import get_app_dir 

61 return os.path.join(get_app_dir(), "icons") 

62 

63def do_get_libexec_dir(): 

64 from xpra.os_util import is_Fedora, is_CentOS, is_RedHat 

65 if is_Fedora() or is_CentOS() or is_RedHat(): 

66 return "/usr/libexec/" 

67 return "/usr/lib" 

68 

69def do_get_mmap_dir(): 

70 return _get_xpra_runtime_dir() or os.getenv("TMPDIR", "/tmp") 

71 

72def do_get_xpra_tmp_dir(): 

73 xrd = _get_xpra_runtime_dir() 

74 return os.path.join(xrd, "tmp") 

75 

76 

77def do_get_script_bin_dirs(): 

78 #versions before 0.17 only had "~/.xpra/run-xpra" 

79 script_bin_dirs = [] 

80 runtime_dir = _get_xpra_runtime_dir() 

81 if runtime_dir: 

82 script_bin_dirs.append(runtime_dir) 

83 return script_bin_dirs 

84 

85 

86def do_get_system_conf_dirs(): 

87 dirs = ["/etc/xpra", "/usr/local/etc/xpra"] 

88 for d in os.environ.get("XDG_CONFIG_DIRS", "/etc/xdg").split(":"): 

89 dirs.append(os.path.join(d, "xpra")) 

90 #hope the prefix is something like "/usr/local" or "$HOME/.local": 

91 from xpra.platform.paths import get_install_prefix 

92 prefix = get_install_prefix() 

93 if prefix not in ("/usr", "/usr/local"): 

94 if prefix.endswith(".local"): 

95 idir= os.path.join(prefix, "xpra") #ie: ~/.local/xpra 

96 else: 

97 idir= os.path.join(prefix, "/etc/xpra/") #ie: /someinstallpath/etc/xpra 

98 if idir not in dirs: 

99 dirs.append(idir) 

100 return dirs 

101 

102 

103def do_get_user_conf_dirs(uid): 

104 #per-user configuration location: 

105 #(but never use /root/.xpra or /root/.config/xpra) 

106 if uid is None: 

107 uid = os.getuid() 

108 dirs = [] 

109 if uid>0: 

110 dirs += [os.path.join(os.environ.get("XDG_CONFIG_HOME", "~/.config"), "xpra")] 

111 dirs.append("~/.xpra") 

112 return dirs 

113 

114 

115def get_runtime_dir(): 

116 runtime_dir = os.environ.get("XDG_RUNTIME_DIR") 

117 if runtime_dir or sys.platform.startswith("linux"): 

118 return "$XDG_RUNTIME_DIR" 

119 for d in ("/run/user", "/var/run/user"): 

120 if os.path.exists(d) and os.path.isdir(d): 

121 runtime_dir = d+"/$UID" 

122 break 

123 return runtime_dir 

124 

125def _get_xpra_runtime_dir(): 

126 runtime_dir = get_runtime_dir() 

127 if not runtime_dir: 

128 return None 

129 return os.path.join(runtime_dir, "xpra") 

130 

131def do_get_socket_dirs(): 

132 SOCKET_DIRS = [] 

133 runtime_dir = _get_xpra_runtime_dir() 

134 if runtime_dir: 

135 #private, per user: XDG_RUNTIME_DIR/xpra 

136 # (ie: "/run/user/1000/xpra") 

137 SOCKET_DIRS.append(runtime_dir) 

138 #for shared sockets (the 'xpra' group should own this directory): 

139 if os.path.exists("/run"): 

140 SOCKET_DIRS.append("/run/xpra") 

141 elif os.path.exists("/var/run"): 

142 SOCKET_DIRS.append("/var/run/xpra") 

143 #Debian and Ubuntu often don't create a reliable XDG_RUNTIME_DIR 

144 #other distros may not create one when using "su" 

145 SOCKET_DIRS.append("~/.xpra") 

146 return SOCKET_DIRS 

147 

148 

149def do_get_client_socket_dirs(): 

150 DIRS = [] 

151 runtime_dir = _get_xpra_runtime_dir() 

152 if runtime_dir: 

153 DIRS.append(os.path.join(runtime_dir, "clients")) 

154 return DIRS 

155 

156 

157def do_get_default_log_dirs(): 

158 log_dirs = [] 

159 v = _get_xpra_runtime_dir() 

160 if v: 

161 log_dirs.append(v) 

162 log_dirs.append("/tmp") 

163 return log_dirs 

164 

165def do_get_sound_command(): 

166 from xpra.platform.paths import get_xpra_command 

167 return get_xpra_command() 

168 

169def do_get_xpra_command(): 

170 #try to use the same "xpra" executable that launched this server, 

171 #whilst also preserving the python interpreter version: 

172 if sys.argv and sys.argv[0].lower().endswith("/xpra"): 

173 return ["python%i.%i" % (sys.version_info.major, sys.version_info.minor), sys.argv[0]] 

174 return ["xpra"]