sessiond-uaccess#
sessiond-uaccess is a sessiond client that grants device-node access to
active local sessions by writing POSIX ACL entries.
Installation#
sessiond-uaccess requires sessiond to be installed and enabled first.
On finix with flakes:
{
inputs.sessiond-uaccess.url = "git+https://tangled.org/r0chd.pl/sessiond-uaccess";
}
{ inputs, pkgs, ... }:
{
imports = [
inputs.sessiond-uaccess.finixModules.default
];
services.sessiond-uaccess = {
enable = true;
package = inputs.sessiond-uaccess.packages.${pkgs.system}.default;
};
}
With npins:
npins add git --name sessiond-uaccess https://tangled.org/r0chd.pl/sessiond-uaccess --branch master
{ pkgs, ... }:
let
sources = import ./npins;
sessiond-uaccess = import sources.sessiond-uaccess.outPath { };
in
{
imports = [
sessiond-uaccess.finixModules.default
];
services.sessiond-uaccess = {
enable = true;
package = sessiond-uaccess.packages.sessiond-uaccess;
};
}
To build it manually:
cargo build --release
The binary is written to target/release/sessiond-uaccess.
Usage#
sessiond-uaccess --rules-dirs PATH [--rules-dirs PATH...]
sessiond-uaccess connects to /run/sessiond.sock, loads every *.lua file
from each existing rules directory, scans existing udev devices, and then keeps
listening for new udev devices and session changes.
Rules#
Rules are Lua files that call device with an access mode and match function:
device {
access = "rw",
match = function(dev)
return dev.subsystem == "sound"
end,
}
The default rules in rules/70-uaccess.lua cover sound devices, cameras, DRI
devices, render and accelerator nodes, AMD KFD, KVM, rfkill, and optical drives.