From f9977dba9c1bc467c259326b6af3fca30211df1c Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 16 Oct 2025 13:37:15 +1000 Subject: [PATCH] tools/replay: set the multiprocessing start method to fork Python 3.14 has changed from fork to forkserver[1] which causes libinput replay to fail with the following error when starting the subprocesses: ValueError: ctypes objects containing pointers cannot be pickled This is caused by the libevdev device being passed to the sub process. A more proper fix may be to only initialize the device in the subprocess and then signal the process to start replaying. But meanwhile, switching back to fork will do. [1] https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods Closes #1204 Part-of: --- tools/libinput-replay.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/libinput-replay.py b/tools/libinput-replay.py index c0fc8d31..beb4dc24 100755 --- a/tools/libinput-replay.py +++ b/tools/libinput-replay.py @@ -369,6 +369,8 @@ def check_file(recording): def main(): + multiprocessing.set_start_method("fork") + parser = argparse.ArgumentParser(description="Replay a device recording") parser.add_argument( "recording",