xiwrap

slightly higher-level container setup utility
git clone https://git.ce9e.org/xiwrap.git

commit
3d2a7a6dd65889e6d539a4f802218a8fefedc57a
parent
5663dd30e70825a941486c32ec2612e1fd908a69
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2024-08-04 12:44
refactor: share code across build_dbus_*

Diffstat

M xiwrap.py 55 +++++++++++++++++++++++++++++--------------------------

1 files changed, 29 insertions, 26 deletions


diff --git a/xiwrap.py b/xiwrap.py

@@ -94,6 +94,17 @@ def expandvars(path, env):
   94    94     return os.path.expandvars(path)
   95    95 
   96    96 
   -1    97 class DBusProxy:
   -1    98     def __init__(self, rules, dest, src, sync_fd):
   -1    99         self.cmd = ['xdg-dbus-proxy', f'--fd={sync_fd}', dest, src, '--filter']
   -1   100         for value, typ in sorted(rules.items()):
   -1   101             self.cmd.append(f'--{typ}={value}')
   -1   102         self.fds = [sync_fd]
   -1   103 
   -1   104     def popen(self):
   -1   105         return subprocess.Popen(self.cmd, pass_fds=self.fds)
   -1   106 
   -1   107 
   97   108 class RuleSet:
   98   109     def __init__(self):
   99   110         self.env = {}
@@ -251,33 +262,25 @@ class RuleSet:
  251   262     def build_dbus_session(self):
  252   263         if not self.dbus_session:
  253   264             return None
  254    -1         cmd = [
  255    -1             'xdg-dbus-proxy',
  256    -1             f'--fd={self.sync_fds[1]}',
   -1   265         return DBusProxy(
   -1   266             self.dbus_session,
  257   267             os.getenv('DBUS_SESSION_BUS_ADDRESS'),
  258   268             DBUS_SESSION_SRC,
  259    -1             '--filter',
  260    -1         ]
  261    -1         for value, typ in sorted(self.dbus_session.items()):
  262    -1             cmd.append(f'--{typ}={value}')
  263    -1         return cmd
   -1   269             self.sync_fds[1],
   -1   270         )
  264   271 
  265   272     def build_dbus_system(self):
  266   273         if not self.dbus_system:
  267   274             return None
  268    -1         cmd = [
  269    -1             'xdg-dbus-proxy',
  270    -1             f'--fd={self.sync_fds[1]}',
   -1   275         return DBusProxy(
   -1   276             self.dbus_system,
  271   277             os.getenv(
  272   278                 'DBUS_SYSTEM_BUS_ADDRESS',
  273   279                 'unix:path=/var/run/dbus/system_bus_socket',
  274   280             ),
  275   281             DBUS_SYSTEM_SRC,
  276    -1             '--filter',
  277    -1         ]
  278    -1         for value, typ in sorted(self.dbus_system.items()):
  279    -1             cmd.append(f'--{typ}={value}')
  280    -1         return cmd
   -1   282             self.sync_fds[1],
   -1   283         )
  281   284 
  282   285 
  283   286 if __name__ == '__main__':
@@ -292,22 +295,22 @@ if __name__ == '__main__':
  292   295         sys.exit(1)
  293   296 
  294   297     cmd = rules.build(tail)
  295    -1     dbus_system_cmd = rules.build_dbus_system()
  296    -1     dbus_session_cmd = rules.build_dbus_session()
   -1   298     dbus_system = rules.build_dbus_system()
   -1   299     dbus_session = rules.build_dbus_session()
  297   300 
  298   301     if rules.usage:
  299   302         print(USAGE)
  300   303     elif rules.debug:
  301   304         print(' '.join(cmd))
  302    -1         if dbus_system_cmd:
  303    -1             print(' '.join(dbus_system_cmd))
  304    -1         if dbus_session_cmd:
  305    -1             print(' '.join(dbus_session_cmd))
   -1   305         if dbus_system:
   -1   306             print(' '.join(dbus_system.cmd))
   -1   307         if dbus_session:
   -1   308             print(' '.join(dbus_session.cmd))
  306   309     else:
  307    -1         if dbus_system_cmd:
  308    -1             subprocess.Popen(dbus_system_cmd, pass_fds=[rules.sync_fds[1]])
   -1   310         if dbus_system:
   -1   311             dbus_system.popen()
  309   312             os.read(rules.sync_fds[0], 8)
  310    -1         if dbus_session_cmd:
  311    -1             subprocess.Popen(dbus_session_cmd, pass_fds=[rules.sync_fds[1]])
   -1   313         if dbus_session:
   -1   314             dbus_session.popen()
  312   315             os.read(rules.sync_fds[0], 8)
  313   316         os.execvp('/usr/bin/bwrap', cmd)