hid: Make game controllers accessible to members of the game group

Their events have to be accessible by unprivileged users via e.g. libsdl.

MFC after:	1 month
This commit is contained in:
Vladimir Kondratyev
2025-12-01 23:42:15 +03:00
parent ecccc9d999
commit b6cad334e6
5 changed files with 26 additions and 7 deletions
+4 -3
View File
@@ -24,7 +24,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE. .\" SUCH DAMAGE.
.\" .\"
.Dd November 12, 2025 .Dd November 30, 2025
.Dt HGAME 4 .Dt HGAME 4
.Os .Os
.Sh NAME .Sh NAME
@@ -69,8 +69,9 @@ prompt, or add it to
To give user applications access to the game controllers, To give user applications access to the game controllers,
allow user access to the allow user access to the
.Pa /dev/input/event* .Pa /dev/input/event*
nodes with nodes with inclusion of user in the
.Xr devfs.rules 5 . .Em games
group.
.Sh HARDWARE .Sh HARDWARE
The The
.Nm .Nm
+4 -1
View File
@@ -21,7 +21,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE. .\" SUCH DAMAGE.
.\" .\"
.Dd September 19, 2020 .Dd November 30, 2025
.Dt PS4DSHOCK 4 .Dt PS4DSHOCK 4
.Os .Os
.Sh NAME .Sh NAME
@@ -55,6 +55,9 @@ The
device presents the game controller as a device presents the game controller as a
.Ar evdev .Ar evdev
type device. type device.
It is accessible to members of the
.Em games
group.
.Sh SYSCTL VARIABLES .Sh SYSCTL VARIABLES
Next parameters are available as Next parameters are available as
.Xr sysctl 8 .Xr sysctl 8
+4 -1
View File
@@ -21,7 +21,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE. .\" SUCH DAMAGE.
.\" .\"
.Dd September 16, 2020 .Dd November 30, 2025
.Dt XB360GP 4 .Dt XB360GP 4
.Os .Os
.Sh NAME .Sh NAME
@@ -56,6 +56,9 @@ The
device presents the game controller as a device presents the game controller as a
.Ar evdev .Ar evdev
type device. type device.
It is accessible to members of the
.Em games
group.
.Sh SYSCTL VARIABLES .Sh SYSCTL VARIABLES
The following variable is available as both The following variable is available as both
.Xr sysctl 8 .Xr sysctl 8
+6 -1
View File
@@ -33,8 +33,10 @@
#include <sys/param.h> #include <sys/param.h>
#include <sys/bus.h> #include <sys/bus.h>
#include <sys/conf.h>
#include <sys/kernel.h> #include <sys/kernel.h>
#include <sys/module.h> #include <sys/module.h>
#include <sys/stat.h>
#include <sys/sysctl.h> #include <sys/sysctl.h>
#include <dev/evdev/input.h> #include <dev/evdev/input.h>
@@ -170,8 +172,11 @@ hgame_final_cb(HIDMAP_CB_ARGS)
{ {
struct evdev_dev *evdev = HIDMAP_CB_GET_EVDEV(); struct evdev_dev *evdev = HIDMAP_CB_GET_EVDEV();
if (HIDMAP_CB_GET_STATE() == HIDMAP_CB_IS_ATTACHING) if (HIDMAP_CB_GET_STATE() == HIDMAP_CB_IS_ATTACHING) {
evdev_support_prop(evdev, INPUT_PROP_DIRECT); evdev_support_prop(evdev, INPUT_PROP_DIRECT);
evdev_set_cdev_mode(evdev, UID_ROOT, GID_GAMES,
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
}
/* Do not execute callback at interrupt handler and detach */ /* Do not execute callback at interrupt handler and detach */
return (ENOSYS); return (ENOSYS);
+8 -1
View File
@@ -37,10 +37,12 @@
#include <sys/param.h> #include <sys/param.h>
#include <sys/bus.h> #include <sys/bus.h>
#include <sys/conf.h>
#include <sys/kernel.h> #include <sys/kernel.h>
#include <sys/lock.h> #include <sys/lock.h>
#include <sys/malloc.h> #include <sys/malloc.h>
#include <sys/module.h> #include <sys/module.h>
#include <sys/stat.h>
#include <sys/sx.h> #include <sys/sx.h>
#include <sys/sysctl.h> #include <sys/sysctl.h>
@@ -806,8 +808,11 @@ ps4dshock_final_cb(HIDMAP_CB_ARGS)
{ {
struct evdev_dev *evdev = HIDMAP_CB_GET_EVDEV(); struct evdev_dev *evdev = HIDMAP_CB_GET_EVDEV();
if (HIDMAP_CB_GET_STATE() == HIDMAP_CB_IS_ATTACHING) if (HIDMAP_CB_GET_STATE() == HIDMAP_CB_IS_ATTACHING) {
evdev_support_prop(evdev, INPUT_PROP_DIRECT); evdev_support_prop(evdev, INPUT_PROP_DIRECT);
evdev_set_cdev_mode(evdev, UID_ROOT, GID_GAMES,
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
}
/* Do not execute callback at interrupt handler and detach */ /* Do not execute callback at interrupt handler and detach */
return (ENOSYS); return (ENOSYS);
@@ -886,6 +891,8 @@ ps4dsacc_final_cb(HIDMAP_CB_ARGS)
if (HIDMAP_CB_GET_STATE() == HIDMAP_CB_IS_ATTACHING) { if (HIDMAP_CB_GET_STATE() == HIDMAP_CB_IS_ATTACHING) {
evdev_support_event(evdev, EV_ABS); evdev_support_event(evdev, EV_ABS);
evdev_support_prop(evdev, INPUT_PROP_ACCELEROMETER); evdev_support_prop(evdev, INPUT_PROP_ACCELEROMETER);
evdev_set_cdev_mode(evdev, UID_ROOT, GID_GAMES,
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
} }
/* Do not execute callback at interrupt handler and detach */ /* Do not execute callback at interrupt handler and detach */
return (ENOSYS); return (ENOSYS);