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
.\" SUCH DAMAGE.
.\"
.Dd November 12, 2025
.Dd November 30, 2025
.Dt HGAME 4
.Os
.Sh NAME
@@ -69,8 +69,9 @@ prompt, or add it to
To give user applications access to the game controllers,
allow user access to the
.Pa /dev/input/event*
nodes with
.Xr devfs.rules 5 .
nodes with inclusion of user in the
.Em games
group.
.Sh HARDWARE
The
.Nm
+4 -1
View File
@@ -21,7 +21,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.Dd September 19, 2020
.Dd November 30, 2025
.Dt PS4DSHOCK 4
.Os
.Sh NAME
@@ -55,6 +55,9 @@ The
device presents the game controller as a
.Ar evdev
type device.
It is accessible to members of the
.Em games
group.
.Sh SYSCTL VARIABLES
Next parameters are available as
.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
.\" SUCH DAMAGE.
.\"
.Dd September 16, 2020
.Dd November 30, 2025
.Dt XB360GP 4
.Os
.Sh NAME
@@ -56,6 +56,9 @@ The
device presents the game controller as a
.Ar evdev
type device.
It is accessible to members of the
.Em games
group.
.Sh SYSCTL VARIABLES
The following variable is available as both
.Xr sysctl 8
+6 -1
View File
@@ -33,8 +33,10 @@
#include <sys/param.h>
#include <sys/bus.h>
#include <sys/conf.h>
#include <sys/kernel.h>
#include <sys/module.h>
#include <sys/stat.h>
#include <sys/sysctl.h>
#include <dev/evdev/input.h>
@@ -170,8 +172,11 @@ hgame_final_cb(HIDMAP_CB_ARGS)
{
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_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 */
return (ENOSYS);
+8 -1
View File
@@ -37,10 +37,12 @@
#include <sys/param.h>
#include <sys/bus.h>
#include <sys/conf.h>
#include <sys/kernel.h>
#include <sys/lock.h>
#include <sys/malloc.h>
#include <sys/module.h>
#include <sys/stat.h>
#include <sys/sx.h>
#include <sys/sysctl.h>
@@ -806,8 +808,11 @@ ps4dshock_final_cb(HIDMAP_CB_ARGS)
{
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_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 */
return (ENOSYS);
@@ -886,6 +891,8 @@ ps4dsacc_final_cb(HIDMAP_CB_ARGS)
if (HIDMAP_CB_GET_STATE() == HIDMAP_CB_IS_ATTACHING) {
evdev_support_event(evdev, EV_ABS);
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 */
return (ENOSYS);