/ sys / class / backlight / ideapad /에서 밝기 파일을 편집하는 스크립트를 작성하는 방법은 무엇입니까?
나는 i3 wm을 사용하고 있으며 /sys/class/backlight/ideapad/brightness
.
╰─$ ls -la /sys/class/backlight/ideapad/
-rw-r--r-- 1 root root 4096 Dec 18 16:55 brightness
밝기를 변경하려면 (예 : 4) 다음을 수행합니다.
sudo sh -c "echo 4 > /sys/class/backlight/ideapad/brightness"
밝기를 1 씩 높이거나 낮추는 스크립트를 작성한 다음 해당 스크립트를 i3 wm 구성 파일 ( CTRL+F1
예 :)의 일부 키 조합에 바인딩 하여 밝기 파일을 편집하는 대신 키를 눌러 밝기를 제어 할 수 있습니다. 밝기를 변경할 때마다 수동으로
이것은 루트 권한이 필요하기 때문에 그것을 달성하는 방법을 모르겠습니다. 내 사용자를 brightness
파일 소유자로 변경해야합니까, 아니면 파일 그룹 만 변경해야합니까? 아니면 생각할 수있는 다른 방법이 있습니까?
답변
/sysRAM 기반 가상 파일 시스템 이므로 파일 의 권한을 변경해도 재부팅 후에도 유지되지 않습니다.
이 C 프로그램은 내가 얼마 전에 작성한 솔루션이며 결코 실패한 적이 없습니다. 표준 Linux 시스템에없는 것은 필요하지 않습니다.
#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);
}
컴파일하고 ( br.c
파일 이름, br
실행 파일) 루트를 소유자로 만들고 setuid 비트 를 켜고 실행 파일을 사용자의 어딘가에 배치합니다 PATH
( /usr/local/bin/
일반적인 선택).
cc br.c -o br
chown root br
chmod u+s br
mv br /usr/local/bin/
이제 실행 br -100
하면 밝기가 100 감소합니다.
최소 밝기도로 설정했는지 확인하십시오 min = 10
. 디스플레이가 켜져 있다는 사실을 간신히 알아 차릴 수있는 내 컴퓨터의 수치가 상당히 낮습니다. 필요에 따라 해당 값을 조정하십시오. 또한 많은 사람들의 경로 구성 요소는 같은 것 intel-backlight
대신에 ideapad
.
대체 접근법
Setuid는 br
완전한 루트 권한을 부여합니다. 이것이이 특정 프로그램에서 악용을 유발하지는 않지만 매우 신중하고 필요한 권한 세트 (즉, 파일 권한 검사를 우회하기 위해) 만 제공하려면 위 의 chown
및 chmod
행을 적절한 기능으로 대체하십시오.
setcap cap_dac_override+ep br
일반적으로 그룹 소유권을 변경하는 것이 좋은 방법이지만 재부팅 후 매번 변경해야합니다. 이렇게하려면 아치 위키에 설명 된대로 udev 규칙을 자동으로 만듭니다 .
기본적으로 루트 만이 방법으로 밝기를 변경할 수 있습니다. 비디오 그룹의 사용자가 밝기를 변경할 수 있도록 다음과 같은 udev 규칙을 사용할 수 있습니다.
/etc/udev/rules.d/backlight.rules
ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="acpi_video0", GROUP="video", MODE="0664"
video
그룹 의 구성원이 아닌 경우 사용자를 그룹에 추가하십시오.
sudo gpasswd video -a $(whoami)
로그 아웃했다가 다시 로그인하여 그룹 멤버십 정보를 새로 고칩니다.
su -l $(whoami)
video
ID 가있는 그룹 의 구성원인지 확인하면 다음과 같이 인쇄됩니다.
$ id
uid=1000(ja) gid=100(users) groups=100(users),16(dialout),17(audio),18(video),83(plugdev),215(vboxusers),281(docker)
물론 사용자가 udev 규칙에서 구성원 인 모든 그룹을 사용할 수 있습니다 video
.