Explorando a pasta /sys no Linux

Conheça os comandos que podem ser dados diretamente para o kernel Linux através dos arquivos especiais da pasta sys


| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. 
Mais detalhes clicando aqui.


Introdução

Para o sistema Linux, tudo é arquivo, conforme já informado aqui no site. E hoje vamos mostrar informações interessantes sobre o conteúdo dessa pasta que melhor justificam essa afirmação.

Além disso, o fato do kernel Linux ser “aberto” também te propicia liberdade, para tal existem muitos comandos que o usuário pode dar diretamente para os processos do sistema.

Lembrando que, o usuário jamais dá comandos diretos ao kernel pois isso representaria uma falha de segurança; para isso ocorrem as sys_calls, que ocorrem no espaço de usuário, verificam as permissões e só depois executam os comandos – Por isso somente Root tem acesso.

1. Definição

A pasta /sys (de SYStem) basicamente mapeia chamadas diretas com o kernel Linux. A maioria dos arquivos contidos lá podem ou não gerenciar hardware de forma direta.

Não veja os arquivos dentro de /sys como “arquivos e pastas”, mas sim como um painel de controle de kernel: Cada arquivo contido dentro de cada pasta permite enviar comandos diretamente para o Kernel, sem passar por processos. Além disso, o status de cada parte do kernel pode ser lido diretamente de tais arquivos.

Exemplo: A pasta /sys/class armazena as chamadas de controle dos LEDs do teclado. Na imagem, o gerenciamento de status entre aceso e apagado para o LED do Scroll Lock!

Se estiver um pouco perdido quanto ao mapa do conteúdo de /sys, dê uma olhada nesta imagem:

Cada nome de rota nesta imagem representa um arquivo, alguns em /sys, outros em /proc, mas o kernel Linux está basicamente mapeado aí.

Por definição essa pasta não é um sistema de arquivos comum mas sim um “virtual file system”. E tal qual o /proc, ele não existe! E mais: Seu tamanho em disco é zero, pois sua existência é gerada no momento do boot e serve apenas para apontar rotas de comandos diretamente com o kernel Linux. Você sequer pode apagar algo lá dentro: Não se pode apagar o que não existe.

2. Verificando

Pois bem, o conteúdo de /sys são centenas de pastas com arquivos com zero bytes em disco. Como fazer a leitura deles?

Basta abrir o terminal, digitar “cat” e colar na frente o caminho do arquivo que deseja ver seu conteúdo.
Por exemplo, quero ver o conteúdo de /sys/class/leds/input3::scrolllock/max_brightness, para isso:

$ cat /sys/class/leds/input3::scrolllock/max_brightness

Isso te dará informações sobre a capacidade máxima do LED do Scroll Lock. No exemplo, a saída será 1 (1, brilho máximo, 0 desligado). Dependendo do suporte, você verá outros valores. Por exemplo, se você ler o status max_brightness de um teclado retro iluminado com ajuste de brilho de 8 níveis, você verá o resultado ser 8. Portanto os valores podem ser 0 (desligado), 1 (fraco), etc, até 8 (brilho máximo).

Curiosamente, a pasta /sys/class/leds costuma armazenar o controle de qualquer LED do hardware. Portanto, se você tem um cooler RGB, um teclado RGB ou qualquer-coisa RGB num hardware com Linux e não possui suporte/software de gerenciamento das cores nativo, procure nessa pasta! Provavelmente o controlador estará lá e você poderá criar um simples script bash que ativa-o.

O mesmo vale pra qualquer gerenciamento falho: Brilho de tela, LED de Mouse Gamer, etc. Veja que as chamadas de Kernel estarão lá, disponíveis em /sys!

3. Funcionalidade

Cada arquivo em /sys tem uma função especifica. Se você souber o que cada um faz, terá total consciência de tudo que está acontecendo no seu computador naquele instante. A seguir uma tabela com as mais importantes (alguns requerem root):

  • /sys/class/backlight/intel_backlight – Gerenciamento da luz de fundo da tela em sistemas com Intel.
  • /sys/class/block – Gerenciamento dos dispositivos de armazenamento.
  • /sys/class/bluetooth – Gerenciamento de dispositivos bluetooth conectados ao sistema.
  • /sys/class/graphics/fb0 – Gerenciamento do framebuffer em uso no momento.
  • /sys/devices – Reúne todo o gerenciamento de dispositivo, seja teclado, processador, monitor, etc.
  • /sys/bus/cpu/drivers/processor – Gerenciamento dos núcleos do processador.
  • /sys/power – Gerenciamento de energia de todo o sistema, como estado Sleep, Reinicio, Desligar, etc.
  • Entre outros…

Quando eu digo gerenciamento, significa que você pode manipular ou monitorar o hardware supracitado, depende do que seja e do que ele permitir. Por exemplo, o controlador de bateria, você pode verificar o nível de bateria por lá! Ou o com o /sys/class/block/sda/sda1/size, você saberá o tamanho total do armazenamento de disco montado em /dev/sda1.

Alguns hardwares e controladores não são uma novidade, por exemplo, as informações contidas em /sys/class/block/sda/ também estão disponíveis, e mais organizadas, no GParted ou no Gnome Disks. Porém em /sys você poderá até desligar um dispositivo se você possuir as permissões de root, mandando um comando para a pasta power referente ao mesmo. Em caso de falhas, uma leitura desses arquivos te dará um feedback em tempo real.

4. Controle

Todos os comandos mencionados abaixo funcionam sob a seguinte sintaxe:
$ echo 1 > comando

Ou seja, você vai “injetar” um dígito, seja ele zero (desativado) ou 1 (ativo), ou outro valor conforme o comando. Isso aciona os gatilhos do kernel Linux de imediato.

Nota: Todos os comandos abaixo devem ser feitos como ROOT.

4.1 Exemplo 1

Quem utiliza placas de vídeo AMD possui software opensource com respaldo da fabricante e, como tal, você tem liberdade até para fazer overclock na placa de vídeo diretamente do caminho /sys no Linux.

Desde o kernel Linux 4.17, é possível mudar o clock e as tensões de funcionamento das placas de vídeo AMD através do caminho  /sys/class/drm/card0/device/pp_od_clk_voltage. Claro, para isso você deve habilitar o parâmetro  amdgpu.ppfeaturemask=0xffffffff no GRUB.

  • Exemplo?

Mudar o estado de energia para 7; além de alterar o clock e a tensão de uma GPU Polaris para 1209MHz e 900mV:

# echo "s 7 1209 900" > /sys/class/drm/card0/device/pp_od_clk_voltage

ATENÇÃO:

Se fizer overclock em hardware AMD esteja MUITO atento aos valores!
Se você errar o comando ou os números estiverem incorretos, você pode queimar a GPU completamente assim.

Normalmente qualquer configuração das GPU’s se localizam em /sys/class/drm/card0/, valendo para NVIDIAs tambem. Porém, obviamente, GPUs NVIDIA não são tão abertas a esse tipo de customização.

4.2 Exemplo 2

Voltando ao exemplo do LED do teclado, vamos fazer o CapsLock de seu teclado acender e apagar de forma isolada do teclado! Para isso, abra o terminal como root no diretório /sys/class/leds/input6::capslock. Atento que a pasta input6::capslock provavelmente é um atalho que apenas aponta para /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.2/1-2.2:1.0/0003:0951:16B7.0001/input/input6/input6::capslock.

Sim, o caminho costuma ser enorme, para isso existe o atalho!

Esse diretório pode variar conforme o hardware, atentos. E alguns computadores possuem +1 pasta CapsLock em /sys/class/leds/! Achar o “correto” será um pouco de sorte na tentativa e erro. Não faz mal errar, o sistema apenas ignora o comando caso o teclado escolhido não exista.

Digite o seguinte comando:

# echo 1 > brightness

O LED do CapsLock acendeu. Digite algo, perceba que a caixa do texto continua baixa! Você controlou o LED sem mudar a o texto, ou seja, um total controle de hardware, um comando direto ao Kernel Linux.

Com o comando:

# echo 0 > brightness

A luz do LED deve apagar.

Dá até pra criar um script .sh mais elaborado que colete dados das notificações do sistema fazendo o LED do teclado piscar num determinado ritmo quando chegar uma mensagem no Facebook® por exemplo.

4.3 Exemplo 3

Neste exemplo vamos desligar a energia do mouse!

Primeiro vamos encontrar o código do dispositivo. Execute este comando:

for device in $(ls /sys/bus/usb/devices/*/product); do echo $device; cat $device;done

O resultado será semelhante a isso:

/sys/bus/usb/devices/1-2.1/product
USB 10/100/1000 LAN
/sys/bus/usb/devices/1-2.2/product
HyperX Alloy FPS Mechanical Gaming Keyboard
/sys/bus/usb/devices/1-2/product
USB2.0 Hub
/sys/bus/usb/devices/1-3/product
Gaming Mouse
/sys/bus/usb/devices/1-4/product
USB2.0-CRW
/sys/bus/usb/devices/1-8/product
Web Camera
/sys/bus/usb/devices/usb1/product
xHCI Host Controller
/sys/bus/usb/devices/usb2/product
xHCI Host Controller

No nosso exemplo, o Mouse é o que está em negrito. – Código primeiro, dispositivo depois.
Pegue o código, que no exemplo é 1-3 e faça o seguinte comando para desconectar o mouse (root):

# echo "1-3" | sudo tee /sys/bus/usb/drivers/usb/unbind

Pronto, seu mouse não deve estar funcionando agora!
Para reconectá-lo:

# echo "1-3" | sudo tee /sys/bus/usb/drivers/usb/bind

O mesmo vale para todos os demais periférico USB conectados ao computador. Você pode até agendar horários em que eles irão desligar automaticamente para poupar bateria ou “tirar acesso a quem não precisa acessar”, vai de cada um.

5. Conclusão

Dominar o diretório de arquivos virtuais /sys é uma boa maneira de dominar seu sistema Linux. Você terá um controle maior de tudo que acontece nele, enquanto poderá verificar dados e informações importantes sobre processos e sobre o consumo de hardware por eles. Além disso, poderá mandar comandos específicos, desligar e ativar hardwares até então “adormecidos”, em especial para o controlador de volume, brilho da tela em notebooks, LED de teclado e etc.

#UrbanCompassPony

4 comentários em “Explorando a pasta /sys no Linux”

  1. hmmm
    eu estou com um problema de “cpu throttling” (joguei água no meu computador sem querer e agora até um galaxy y tem desempenho melhor que meu computador), eu consigo desativar isso pelo /sys? se sim, como? se não souber tem alguma lógica pra seguir e me dizer?

    Responder
    • Dificilmente você conseguirá desabilitar o cpu throttling, porque ele ocorre quando o hardware está com uma falha grave, geralmente superaquecendo. Eu sequer recomendarei fazer isso, porque você corre o risco de queimar seu hardware definitivamente. Leve a uma assistencia para uma boa higienizada na placa mãe e troca da pasta térmica, isso vai ajudar bastante.

      Responder
  2. Eu to com um problema, meu mouse e meu teclado tao desligando sozinho, a luz continua acesa mais eles para d funcionar e so volta depois que reinicio o pc, isso ta me dando muita raiva, alguem pode me ajudar?

    Responder

Deixe um comentário