/ Sys / class / backlight / ideapad / içindeki parlaklık dosyasını düzenleyen bir komut dosyası nasıl yazılır?

Dec 19 2020

İ3 wm kullanıyorum ve parlaklık dosyam var /sys/class/backlight/ideapad/brightness.

╰─$ ls -la /sys/class/backlight/ideapad/

-rw-r--r-- 1 root root 4096 Dec 18 16:55 brightness

Parlaklığı değiştirmek istediğimde (4'e söyle) yapıyorum:

sudo sh -c "echo 4 > /sys/class/backlight/ideapad/brightness"

Parlaklığı 1 artıracak veya azaltacak ve ardından bu komut dosyasını i3 wm yapılandırma dosyasındaki bazı tuş kombinasyonlarına bağlayacak bir komut dosyası yazmak istiyorum ( CTRL+F1örneğin), böylece parlaklık dosyasını düzenlemek yerine tuşlara basarak parlaklığı kontrol edebilirim parlaklığı her değiştirmek istediğimde manuel olarak.

Bu, kök ayrıcalığı gerektirdiğinden, bunu nasıl başaracağımdan emin değilim. Kullanıcımı brightnessdosyanın sahibi olarak mı değiştirmeliyim yoksa sadece dosyanın grubunu mu değiştirmeliyim? Veya düşünebileceğiniz başka bir yol?

Yanıtlar

1 Quasímodo Dec 19 2020 at 19:30

/sysRAM tabanlı bir sanal dosya sistemidir , bu nedenle dosyalarının iznini değiştirmek yeniden başlatma işleminden sonra kalmayacaktır.

Bu C programı, bir süre önce yazdığım çözümdür ve beni asla yüzüstü bırakmamıştır. Standart bir Linux sisteminin sahip olmadığı hiçbir şeyi gerektirmez.

#include <stdlib.h>
#include <stdio.h>
#define BUFSIZE 10

int main(int argc, char **argv) {
  FILE *fp;
  char scurr[BUFSIZE];
  long new, curr, incr, min = 10;

  /* An argument with an integer increment must be supplied */
  if (argc != 2 || (incr = strtol(argv[1], NULL, 10)) == 0) { return(1); }

  /* Retrieve the current brightness and increment it in the brightness file */
  if ((fp = fopen("/sys/class/backlight/ideapad/brightness", "r+")) 
      && fgets(scurr, BUFSIZE, fp)) {
    curr = strtol(scurr, NULL, 10);
    rewind(fp);
    new = curr + incr;
    if (new < min) { new = min; }
    fprintf(fp, "%ld\n", new);
    fclose(fp);
  } else { return(2); }

  return(0);
}

Derleyin ( br.cdosya adıdır, bryürütülebilir dosyadır ), kök sahibi yapın, setuid bitini açın ve yürütülebilir dosyayı bir yere koyun PATH( /usr/local/bin/tipik bir seçimdir).

cc br.c -o br
chown root br
chmod u+s  br
mv br /usr/local/bin/

Şimdi sadece yürütmek br -100parlaklığınızı 100 azaltır.

Minimum parlaklığı da olarak ayarladığımı görün min = 10. Benim makinemde bu, ekranın açık olduğunu zar zor farkedecek kadar düşük. Bu değeri ihtiyaçlarınıza göre ayarlayın. Ayrıca birçok insan için yol bileşeni intel-backlightbunun yerine benzer bir şey olacaktır ideapad.


Alternatif yaklaşım

Setuid brtam kök hakları verir . Bu belirli programda istismarlara yol açmasa da, çok dikkatli olmak ve ona yalnızca gerekli ayrıcalık setini vermek istiyorsanız - yani dosya izin kontrolünü atlamak için -, yukarıdaki chownve chmodsatırlarını uygun özelliklerle değiştirin.

setcap cap_dac_override+ep br
1 ArkadiuszDrabczyk Dec 19 2020 at 00:45

Grup sahipliğini değiştirmek genellikle gitmenin yoludur, ancak yeniden başlattıktan sonra her seferinde yapmanız gerekeceğine dikkat edin. Bunu yapmak için, Arch wiki'de açıklandığı gibi otomatik olarak udev kuralı oluşturun :

Varsayılan olarak, bu yöntemle yalnızca kök parlaklığı değiştirebilir. Video grubundaki kullanıcıların parlaklığı değiştirmesine izin vermek için aşağıdakiler gibi bir udev kuralı kullanılabilir:

/etc/udev/rules.d/backlight.rules

ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="acpi_video0", GROUP="video", MODE="0664"

videoGrubun üyesi değilseniz kullanıcınızı ekleyin:

sudo gpasswd video -a $(whoami)

Grup üyeliği bilgilerini yenilemek için oturumu kapatıp tekrar oturum açtığınıza dikkat edin:

su -l $(whoami)

Kimliğine sahip bir videogrubun üyesi olup olmadığınızı kontrol edin , aşağıdaki gibi bir şey yazdırmalıdır:

$ id
uid=1000(ja) gid=100(users) groups=100(users),16(dialout),17(audio),18(video),83(plugdev),215(vboxusers),281(docker)

Elbette, kullanıcınızın üyesi olduğu herhangi bir grubu in udev kuralını kullanmak zorunda değilsiniz video.