/ Sys / class / backlight / ideapad / içindeki parlaklık dosyasını düzenleyen bir komut dosyası nasıl yazılır?
İ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ı brightness
dosyanı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
/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.c
dosya adıdır, br
yü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 -100
parlaklığı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-backlight
bunun yerine benzer bir şey olacaktır ideapad
.
Alternatif yaklaşım
Setuid br
tam 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 chown
ve chmod
satırlarını uygun özelliklerle değiştirin.
setcap cap_dac_override+ep br
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"
video
Grubun ü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 video
grubun ü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
.