ubuntu-22.04.3-desktop-amd64/casper/filesystem/usr/bin/ubiquity

93 lines
3.2 KiB
Python
Executable File

#! /usr/bin/python3
# Wrapper script to run Ubiquity as root using the appropriate privilege
# escalation method for the frontend.
import os
import sys
sys.path.insert(0, '/usr/lib/ubiquity')
from ubiquity import osextras
def main():
newargv = []
frontend = None
toexec = []
i = 1
while i < len(sys.argv):
if not sys.argv[i].startswith('-'):
frontend = sys.argv[i]
elif sys.argv[i] == '--autopilot':
try:
os.environ['GTK_MODULES'] += os.pathsep + 'autopilot'
except KeyError:
os.environ['GTK_MODULES'] = 'autopilot'
newargv.append(sys.argv[i])
i += 1
if os.getuid() == 0:
# no privilege escalation required
inner = ['/usr/lib/ubiquity/bin/ubiquity'] + newargv
# Make sure ibus works
if (os.getenv("GTK_IM_MODULE") == "ibus" and
os.getenv("XDG_SESSION_COOKIE")):
ibus_path = os.path.expanduser("~/.config/ibus/bus")
if os.path.exists(ibus_path):
# Guess the path to the ibus config file
ibus_filename = "%s-unix-0" % (
os.getenv("XDG_SESSION_COOKIE").split("-")[0])
ibus_config = os.path.join(ibus_path, ibus_filename)
with open(ibus_config, "r") as fp:
for line in fp:
fields = line.strip().split('=', 1)
# If we get KEY=VALUE, export it in the environment
if len(fields) == 2:
os.environ[fields[0]] = fields[1]
# Ensure the OOM killer doesn't nom on us.
with open('/proc/%d/oom_score_adj' % os.getpid(), 'w') as fp:
fp.write('-1000')
# Disable storage automounting
udisks2 = '/usr/lib/udisks2/udisks2-inhibit'
if os.path.isfile(udisks2) and os.access(udisks2, os.X_OK):
toexec += [udisks2] + inner
elif osextras.find_on_path('udisks'):
toexec += ['udisks', '--inhibit', '--'] + inner
elif (osextras.find_on_path('hal-lock') and
not os.system('pgrep hald>/dev/null')):
toexec += ['hal-lock',
'--interface', 'org.freedesktop.Hal.Device.Storage',
'--exclusive', '--run', ' '.join(inner)]
else:
toexec += inner
else:
if frontend is None:
# Try to detect which frontend will be used by looking for a
# frontend module.
from importlib import util
frontend_names = ['gtk_ui', 'kde_ui']
for f in frontend_names:
if util.find_spec('ubiquity.frontend.%s' % f) is not None:
frontend = f
break
if frontend is None:
raise AttributeError('No frontend available; tried %s' %
', '.join(frontend_names))
toexec = ['pkexec', sys.argv[0]]
toexec.extend(newargv)
if 'UBIQUITY_WRAPPER_DEBUG' in os.environ:
print(toexec, file=sys.stderr)
os.execvp(toexec[0], toexec)
sys.exit(127)
if __name__ == '__main__':
main()