From b9758d7af4dbd7fcf9d8a262100c48c0b43e7511 Mon Sep 17 00:00:00 2001 From: Max Gautier Date: Tue, 27 Aug 2024 14:24:40 +0200 Subject: [PATCH] Include udev/devd rules in Linux/FreeBSD install This allows RPCS3 to communicate with Dualshock 3,4 and DualSense controller out of the box on Linux distributions and FreeBSD, without the need for manual actions. --- rpcs3/CMakeLists.txt | 9 ++++++++ rpcs3/devd.conf | 49 ++++++++++++++++++++++++++++++++++++++++++++ rpcs3/udev.rules | 26 +++++++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 rpcs3/devd.conf create mode 100644 rpcs3/udev.rules diff --git a/rpcs3/CMakeLists.txt b/rpcs3/CMakeLists.txt index 226a126f26..23d41e33fd 100644 --- a/rpcs3/CMakeLists.txt +++ b/rpcs3/CMakeLists.txt @@ -179,3 +179,12 @@ if(UNIX AND NOT APPLE) install(DIRECTORY ../bin/test DESTINATION ${CMAKE_INSTALL_DATADIR}/rpcs3) endif() + +# Udev rules, per platform +if(CMAKE_SYSTEM_NAME MATCHES "Linux") + install(FILES udev.rules + DESTINATION ${CMAKE_INSTALL_LIBDIR}/udev/rules.d/ RENAME 99-rpcs3.rules) +elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + install(FILES devd.conf + DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/devd/ RENAME rpcs3.conf) +endif() diff --git a/rpcs3/devd.conf b/rpcs3/devd.conf new file mode 100644 index 0000000000..5617a392b7 --- /dev/null +++ b/rpcs3/devd.conf @@ -0,0 +1,49 @@ +# DualShock 3 +notify 100 { + match "system" "USB"; + match "subsystem" "INTERFACE"; + match "type" "ATTACH"; + match "vendor" "0x054c"; + match "product" "0x0268"; + action "chmod 0666 /dev/$cdev"; +}; + +# DualShock 4 +notify 100 { + match "system" "USB"; + match "subsystem" "INTERFACE"; + match "type" "ATTACH"; + match "vendor" "0x054c"; + match "product" "0x05c4"; + action "chmod 0666 /dev/$cdev"; +}; + +# DualShock 4 Wireless Adapter +notify 100 { + match "system" "USB"; + match "subsystem" "INTERFACE"; + match "type" "ATTACH"; + match "vendor" "0x054c"; + match "product" "0x0ba0"; + action "chmod 0666 /dev/$cdev"; +}; + +# DualShock 4 Slim +notify 100 { + match "system" "USB"; + match "subsystem" "INTERFACE"; + match "type" "ATTACH"; + match "vendor" "0x054c"; + match "product" "0x09cc"; + action "chmod 0666 /dev/$cdev"; +}; + +# DualSense +notify 100 { + match "system" "USB"; + match "subsystem" "INTERFACE"; + match "type" "ATTACH"; + match "vendor" "0x054c"; + match "product" "0x0ce6"; + action "chmod 0666 /dev/$cdev"; +}; diff --git a/rpcs3/udev.rules b/rpcs3/udev.rules new file mode 100644 index 0000000000..b86163721e --- /dev/null +++ b/rpcs3/udev.rules @@ -0,0 +1,26 @@ +# DualShock 3 over USB +KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0268", MODE="0666" + +# DualShock 3 over Bluetooth +KERNEL=="hidraw*", KERNELS=="*054C:0268*", MODE="0666" + +# DualShock 4 over USB +KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="05c4", MODE="0666" + +# DualShock 4 Wireless Adapter over USB +KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0ba0", MODE="0666" + +# DualShock 4 Slim over USB +KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="09cc", MODE="0666" + +# DualShock 4 over Bluetooth +KERNEL=="hidraw*", KERNELS=="*054C:05C4*", MODE="0666" + +# DualShock 4 Slim over Bluetooth +KERNEL=="hidraw*", KERNELS=="*054C:09CC*", MODE="0666" + +# PS5 DualSense controller over USB hidraw +KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0ce6", MODE="0666", TAG+="uaccess" + +# PS5 DualSense controller over bluetooth hidraw +KERNEL=="hidraw*", KERNELS=="*054C:0CE6*", MODE="0666", TAG+="uaccess"