Comment définir des autorisations dans / sys / permanent?

12

Je démarre X en tant qu'utilisateur et je dois régler la luminosité de mon clavier /sys/class/leds/asus\:\:kbd_backlight/brightness. Le /sys/répertoire est recréé après le redémarrage, de sorte que les autorisations seront également réinitialisées. Comment le configurer pour ne pas avoir à rendre le fichier accessible en écriture par tous les utilisateurs après chaque démarrage?

J'utilise Archlinux avec SDDM comme gestionnaire de connexion et KDE comme DE.

xoned
la source
2
Vous pouvez placer une commande dans un service de démarrage systemd.
goldilocks
Voulez-vous créer un propre service systemd qui définira les autorisations? Ou parlez-vous d'un fichier spécifique?
xoné
L'ancien. "Service" est le terme systemd, même si dans ce cas ce ne serait qu'une commande ponctuelle et non un démon. Vous pourriez en faire une sorte de service "divers" comme rc.local est sous sysV. Dans ce cas, le service exécute simplement un script shell et vous y mettez la commande.
goldilocks

Réponses:

13

Non, vous ne pouvez pas, l'autorisation de sysfs est définie dans l'espace du noyau et ne peut pas être modifiée avec les outils de l'espace utilisateur (sauf avec le support côté noyau).

Mais pour votre propre problème, vous pouvez configurer une entrée sudo qui permet à tout le monde d'écrire sur ce chemin, c'est-à-dire ALL ALL = (ALL) NOPASSWD: /usr/bin/tee /sys/class/leds/asus\:\:kbd_backlight/brightness

Et lorsque vous écrivez dans ce répertoire, utilisez un script comme celui-ci, echo 1 | sudo /usr/bin/tee "/sys/class/leds/asus::kbd_backlight/brightness"

Marguerite
la source
J'ai essayé, mais il demande toujours le mot de passe. J'ai également essayé d'ajouter un NOPASSWD: derrière le (ALL).
xonée
@Timo pouvez-vous réessayer? Voir mes mises à jour
marguerite
Ça fonctionne maintenant. Le problème était que mon entrée a été remplacée par une autre sans NOPASSWD. Et j'ai accepté votre réponse car c'était plus facile que les autres réponses. Merci a tous.
xonée
J'utilise Linux Mint Debian dans sony vaio et j'essaie de créer un fichier /sys/devices/platform/sony-laptop/kbd_backlightpour contrôler le rétroéclairage du clavier. J'ai changé le chemin dans votre code, ce qui conduit à cette erreur: bash: syntax error near unexpected token (`` La commande que j'ai tapée est ALL ALL = (ALL) NOPASSWD: /usr/bin/tee /sys/devices/platform/sony-laptop/kbd_backlightPlease help
Indra
Je ne pouvais pas faire fonctionner cela sur une machine Ubuntu jusqu'à ce que j'ajoute une virgule entre /usr/bin/teeet /sys/class.... Après un bref examen de la grammaire, man sudoersje pense que la virgule est nécessaire.
Sage Mitchell
4

Le /sysrépertoire sous Linux est faux, c'est une vue dans le noyau déguisé en fichiers. Donc, changer les autorisations en permanence signifie pirater le noyau, et ce serait mal avisé. Comme le disent les commentaires, peut-être qu'une systemdunité définissant ce serait une solution (en général, définissez la modification dans le cadre du processus de démarrage).

vonbrand
la source
4

J'ai eu un problème similaire, j'avais besoin de définir les autorisations avant d'exécuter le service incliné. Suite au commentaire de goldilocks j'ai créé ce script systemd:

$ cat /etc/systemd/system/setledspermissions.service

[Unit]
Description=Set leds writable to everybody
Before=nodered.service

[Service]
Type=oneshot
User=root
ExecStart=/bin/bash -c "/bin/chmod a+w /sys/class/leds/led0/*"

[Install]
WantedBy=multi-user.target

Après avoir écrit le fichier de service, je l'ai activé avec

$ sudo systemctl enable setledspermissions.service
$ sudo systemctl start setledspermissions.service
$ sudo systemctl status setledspermissions.service
hariseldon78
la source
Est-ce généralement la voie à suivre lorsque vous devez accorder un accès en écriture à des chemins / sys / spécifiques? Mon cas d'utilisation définit la luminosité du rétroéclairage de l'écran sur mon ĺaptop.
Richrd
Je suppose que c'est parce que le chemin sys est recréé à chaque démarrage. Mais je ne suis pas assez expert pour en être sûr.
hariseldon78