diff --git a/tools/libinput-replay.py b/tools/libinput-replay.py index 8a3e27c5..c0fc8d31 100755 --- a/tools/libinput-replay.py +++ b/tools/libinput-replay.py @@ -30,6 +30,7 @@ import math import multiprocessing import argparse from pathlib import Path +from tempfile import NamedTemporaryFile try: import libevdev @@ -315,9 +316,8 @@ def create_device_quirk(device, quirks): return quirk -def setup_quirks(recording): +def setup_quirks(recording) -> Path | None: devices = fetch(recording, "devices") - overrides = None quirks = [] for d in devices: qs = d.get("quirks") or [] @@ -331,27 +331,22 @@ def setup_quirks(recording): if not quirks: return None - overrides = Path("/etc/libinput/local-overrides.quirks") - if overrides.exists(): - print( - "{} exists, please move it out of the way first".format(overrides), - file=sys.stderr, - ) - sys.exit(1) + runtime_dir = ( + Path(os.getenv("XDG_RUNTIME_DIR", f"/run/user/{os.geteuid()}")) / "libinput" + ) + runtime_dir.mkdir(exist_ok=True, parents=True) + with NamedTemporaryFile( + mode="w+", + dir=runtime_dir, + suffix=".quirks", + prefix="libinput-replay", + delete=False, + ) as fd: + fd.write("# This file was generated by libinput replay\n") + fd.write("# Unless libinput replay is running right now, remove this file.\n") + fd.write("\n\n".join(quirks)) - overrides.parent.mkdir(exist_ok=True) - try: - with overrides.open("w+") as fd: - fd.write("# This file was generated by libinput replay\n") - fd.write( - "# Unless libinput replay is running right now, remove this file.\n" - ) - fd.write("\n\n".join(quirks)) - except IOError: - error("Warning: Couldn't write to {}, please re-run as root".format(overrides)) - return None - - return overrides + return Path(fd.name) def check_file(recording): @@ -413,6 +408,7 @@ def main(): finally: if quirks_file: quirks_file.unlink() + quirks_file.parent.unlink() if __name__ == "__main__":