Files
mutter/src/tests/logind_helpers.py
Jonas Ådahl e848f86514 tests/dbus-runner: Forward logind methods when not in KVM
This means one can run meta-dbus-runner.py effectively mocking
everything relevant except logind itself, meaning one can run from a TTY
and get permission to mode set etc, while still mocking things like
gsd-color, colord, etc.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2618>
2023-11-01 10:55:04 +00:00

48 lines
1.3 KiB
Python

import dbus
import os
import re
import sys
host_system_bus_connection = None
def ensure_system_bus(address):
global host_system_bus_connection
if host_system_bus_connection is None:
bus = dbus.bus.BusConnection(address)
host_system_bus_connection = bus
return host_system_bus_connection
def open_file_direct(major, minor):
sysfs_uevent_path = '/sys/dev/char/{}:{}/uevent'.format(major, minor)
sysfs_uevent = open(sysfs_uevent_path, 'r')
devname = None
for line in sysfs_uevent.readlines():
match = re.match('DEVNAME=(.*)', line)
if match:
devname = match[1]
break
sysfs_uevent.close()
if not devname:
raise dbus.exceptions.DBusException(f'Device file {major}:{minor} doesn\\\'t exist',
major=major, minor=minor)
fd = os.open('/dev/' + devname, os.O_RDWR | os.O_CLOEXEC)
unix_fd = dbus.types.UnixFd(fd)
os.close(fd)
return (unix_fd, False)
def call_host(address, object_path, interface, method, typesig, args):
bus = ensure_system_bus(address)
return bus.call_blocking('org.freedesktop.login1',
object_path,
interface,
method,
typesig,
args)