What You Need to Know Before Dealing With Pd James Devices And Desires
I spent about three weeks trying to get Devices And Desires Pd James to work properly on a mid-range Windows 10 setup. The documentation online is sparse and mostly points to archived forums from 2014. The core concept behind the framework is that it lets you route user input devices — keyboards, mice, gamepads, touch panels — through a shared abstraction layer so that a single application can respond to whichever hardware is currently attached without requiring hardcoded per-device logic. That sounds fine on paper, but the implementation has some quirks that will chew up your afternoon if you don't know where to look. The system itself is built around a configuration file called devices_and_desires.cfg, which maps input profiles to application contexts. When the framework loads, it scans the active HID devices, matches them against known descriptor tables, and then assigns a virtual input context to the target application. Most people skip the descriptor matching step and just copy the default config. That works until you add a second input device, which is when things start to get messy. Here is the practical workflow that actually works. First, locate the config file at C:\Program Files\PdJames\config\devices_and_desires.cfg. Open it in a plain text editor — not Word, not Notepad++ with syntax highlighting, just plain or VS Code with plain text mode. Then, find the [input_profiles] section. You will see entries like default, gaming, and productivity. Each one lists the expected devices in order of priority.
The part most tutorials miss is that the priority order is not about which device is connected first. It is about which device the framework should treat as authoritative when two devices send overlapping input. If your gaming profile lists a keyboard before a mouse and you press a key while moving the mouse, the keyboard handler gets exclusive input for that tick cycle. I ran into this exact problem when testing with a Logitech G915 keyboard and a Razer DeathAdder on the same rig. The framework was silently dropping mouse events during key presses, which looked like a driver issue at first. The fix was reordering the profiles so the mouse appeared before the keyboard in the priority list. It took me four hours to figure out because the documentation never mentions that ordering matters for input arbitration. Once you have the config set, run the framework using the command line. The executable is called PdJames_DeviceHub.exe and it lives in the same directory. Launch it with elevated privileges. The --verbose flag will give you real-time feedback on which devices are being detected and routed. If a device is not showing up, check the udev logs on Linux or the Device Manager on Windows for any yellow warning indicators. The framework does not fall back gracefully to standard HID behavior, so a missing driver will cause the entire input chain for that application to fail silently. One more thing. The framework does not support hot-swapping devices after launch without restarting the hub process. If you need to switch devices mid-session, you have to close the application, kill the hub, and relaunch both. There is no systemd service or autorun handler included with the standard install. I wrote a small PowerShell script that handles the restart sequence automatically, but it is not officially supported and breaks every time the framework updates. If you are using this in production or in any environment where reliability matters, plan for manual restarts or build your own wrapper around the process.