Как установить разрешения в / sys / constant?

12

Я запускаю X как пользователь и мне нужно установить яркость клавиатуры /sys/class/leds/asus\:\:kbd_backlight/brightness. /sys/Каталог пересоздался после перезагрузки, так что разрешения будут сброшены тоже. Как мне его настроить, чтобы мне не нужно было делать файл доступным для записи всем пользователям после каждой загрузки?

Я использую Archlinux с SDDM как менеджер входа в систему и KDE как DE.

xoned
источник
2
Вы можете поместить команду в службу загрузки systemd.
Златовласка
Вы хотите создать собственный сервис systemd, который устанавливает права доступа? Или вы говорите из определенного файла?
позвонил
Первый. «Сервис» - системный термин, хотя в этом случае это будет просто однократная команда, а не демон. Вы можете сделать это своего рода службой «разных вещей», например, rc.local под sysV. В этом случае служба просто запускает сценарий оболочки, и вы помещаете туда команду.
Златовласка

Ответы:

13

Нет, вы не можете, разрешение sysfs определено в пространстве ядра и не может быть изменено инструментами пользовательского пространства (если только не поддерживается сторона ядра).

Но для вашей собственной проблемы вы можете установить запись sudo, которая позволит каждому писать по этому пути, т.е. ALL ALL = (ALL) NOPASSWD: /usr/bin/tee /sys/class/leds/asus\:\:kbd_backlight/brightness

И когда вы пишете в этот каталог, используйте такой скрипт, echo 1 | sudo /usr/bin/tee "/sys/class/leds/asus::kbd_backlight/brightness"

маргаритка
источник
Я пробовал это, но он всегда запрашивает пароль. Я также попытался добавить NOPASSWD: позади (ВСЕ).
позвонил
@ Тимо, можешь попробовать еще раз? Смотрите мои обновления
маргаритка
Это работает сейчас. Проблема была в том, что моя запись была перезаписана другой без NOPASSWD. И я принял твой ответ, потому что это было проще, чем другие ответы. Спасибо всем.
позвонил
Я использую Linux Mint Debian в Sony Vaio и пытаюсь создать файл /sys/devices/platform/sony-laptop/kbd_backlightдля управления подсветкой клавиатуры. Я изменил путь в вашем коде, который приводит к этой ошибке: bash: syntax error near unexpected token ('`Я ввел следующую команду: ALL ALL = (ALL) NOPASSWD: /usr/bin/tee /sys/devices/platform/sony-laptop/kbd_backlightПожалуйста, помогите
Индра
Я не мог заставить это работать на машине с Ubuntu, пока не добавил запятую между /usr/bin/teeи /sys/class.... После краткого ознакомления с грамматикой man sudoersя подозреваю, что запятая необходима.
Мудрец Митчелл
4

/sysКаталог в Linux является поддельной, это взгляд в ядро нарядили в виде файлов. Таким образом, постоянно изменять права доступа означает взломать ядро, и это было бы опрометчиво. Как отмечается в комментариях, возможно, установка systemdмодуля это будет решением (в общем, установите изменение как часть процесса загрузки).

vonbrand
источник
4

У меня была похожая проблема, мне нужно было установить разрешения перед запуском службы. Следуя комментарию златовласки, я создал этот скрипт 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

После записи служебного файла я включил его

$ sudo systemctl enable setledspermissions.service
$ sudo systemctl start setledspermissions.service
$ sudo systemctl status setledspermissions.service
hariseldon78
источник
Это вообще путь, когда нужно предоставить доступ на запись к определенным / sys / paths? Мой пример использования - настройка яркости подсветки экрана на моем ноутбуке.
Ричард
Я думаю, это потому, что путь sys воссоздается при каждой загрузке. Но я не достаточно опытен, чтобы быть уверенным в этом.
hariseldon78