/ sys / class / backlight / ideapad /에서 밝기 파일을 편집하는 스크립트를 작성하는 방법은 무엇입니까?

Dec 19 2020

나는 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파일 소유자로 변경해야합니까, 아니면 파일 그룹 만 변경해야합니까? 아니면 생각할 수있는 다른 방법이 있습니까?

답변

1 Quasímodo Dec 19 2020 at 19:30

/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완전한 루트 권한을 부여합니다. 이것이이 특정 프로그램에서 악용을 유발하지는 않지만 매우 신중하고 필요한 권한 세트 (즉, 파일 권한 검사를 우회하기 위해) 만 제공하려면 위 의 chownchmod행을 적절한 기능으로 대체하십시오.

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

일반적으로 그룹 소유권을 변경하는 것이 좋은 방법이지만 재부팅 후 매번 변경해야합니다. 이렇게하려면 아치 위키에 설명 된대로 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)

videoID 가있는 그룹 의 구성원인지 확인하면 다음과 같이 인쇄됩니다.

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

물론 사용자가 udev 규칙에서 구성원 인 모든 그룹을 사용할 수 있습니다 video.