Como definir permissões em / sys / permanente?

12

Estou iniciando o X como usuário e preciso definir o brilho do teclado /sys/class/leds/asus\:\:kbd_backlight/brightness. O /sys/diretório é recriado após a reinicialização, portanto, as permissões serão redefinidas também. Como faço para configurá-lo para não precisar tornar o arquivo gravável por todos os usuários após cada inicialização?

Estou usando o Archlinux com o SDDM como gerenciador de login e o KDE como DE.

xonado
fonte
2
Você pode colocar um comando em um serviço de inicialização systemd.
precisa
Você pretende criar um próprio serviço systemd que defina as permissões? Ou você fala de um arquivo específico?
xoned em 23/03/13
O antigo. "Serviço" é o termo systemd, embora nesse caso seja apenas um comando único e não um daemon. Você pode torná-lo um tipo de serviço "material diverso", como o rc.local está em sysV. Nesse caso, o serviço apenas executa um script de shell e você coloca o comando lá.
Goldilocks

Respostas:

13

Não, você não pode, a permissão do sysfs é definida no espaço do kernel e não pode ser alterada com as ferramentas do espaço do usuário (a menos que com suporte do lado do kernel).

Mas, para o seu próprio problema, você pode configurar uma entrada sudo que permita que todos gravem nesse caminho, ou seja, ALL ALL = (ALL) NOPASSWD: /usr/bin/tee /sys/class/leds/asus\:\:kbd_backlight/brightness

E quando você escreve nesse diretório, use um script como este, echo 1 | sudo /usr/bin/tee "/sys/class/leds/asus::kbd_backlight/brightness"

margarida
fonte
Eu tentei isso, mas ele sempre pede a senha. Eu também tentei adicionar um NOPASSWD: atrás do (ALL).
xonado em 29/03/2013
@Timo você pode tentar de novo? Veja minhas atualizações
daisy
Agora está funcionando. O problema foi que minha entrada foi substituída por outra sem NOPASSWD. E aceitei sua resposta porque era mais fácil que as outras respostas. Obrigado a todos.
xoned em
Estou usando o linux Mint Debian no sony vaio e tentando criar um arquivo /sys/devices/platform/sony-laptop/kbd_backlightpara controlar a luz de fundo do teclado. Alterei o caminho no seu código que leva a este erro: bash: syntax error near unexpected token ('' O comando que eu digitei é ALL ALL = (ALL) NOPASSWD: /usr/bin/tee /sys/devices/platform/sony-laptop/kbd_backlightPor favor, ajude
Indra
Não consegui fazer isso funcionar em uma máquina Ubuntu até adicionar uma vírgula entre /usr/bin/teee /sys/class.... Depois de uma breve olhada na gramática man sudoers, suspeito que a vírgula seja necessária.
Sage Mitchell
4

O /sysdiretório no Linux é falso, é uma visão do kernel vestido como arquivos. Portanto, alterar permissões permanentemente significa hackear o kernel, e isso seria desaconselhável. Como dizem os comentários, talvez uma systemdunidade que defina isso seja uma solução (em geral, defina a alteração como parte do processo de inicialização).

vonbrand
fonte
4

Eu tive um problema semelhante, precisava definir as permissões antes de executar o serviço concordado. Após o comentário de goldilocks, criei este 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

Depois de escrever o arquivo de serviço, eu o habilitei com

$ sudo systemctl enable setledspermissions.service
$ sudo systemctl start setledspermissions.service
$ sudo systemctl status setledspermissions.service
hariseldon78
fonte
Geralmente, este é o caminho a percorrer quando é necessário conceder acesso de gravação a / sys / caminhos específicos? Meu caso de uso é definir o brilho da luz de fundo da tela no meu laptop.
Richrd
Eu acho que é porque o caminho do sistema é recriado a cada inicialização. Mas não sou especialista o suficiente para ter certeza disso.
precisa saber é o seguinte