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

/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, 아니면 파일 그룹을 변경해야 합니까? 아니면 다른 방법을 생각해 볼 수 있나요?

답변1

/sysRAM 기반 가상 파일 시스템입니다., 따라서 해당 파일에 대한 권한 변경은 재부팅 후에도 유지되지 않습니다.

옵션 1:애필렛

나에게 도움이 된 유일한 패키지 솔루션입니다.

일부 최신 노트북에서는 "XRandR"이 디스플레이 밝기를 설정하지 못할 수도 있습니다. 이 기능은 커널의 ACPI 인터페이스로 이동/통합되었습니다 /sys/class/backlight/.

"acpilight"는 "XRandR" 대신 ACPI 인터페이스를 사용하여 명령에 대한 드롭인 대체 기능을 제공하므로 xbacklight이전 스크립트를 실행할 수 있습니다. 따라서 xbacklight콘솔과 Wayland에서도 사용할 수 있습니다(X11을 전혀 사용하지 않고).

리포지토리에 포함된 배포판은 거의 없지만 언제든지 직접 컴파일하고 설치할 수 있습니다. 그럼 그냥 사용

xbacklight +10

밝기가 10% 증가합니다.


옵션 2와 3의 경우 ideapad시스템에서 적절한 경로 구성 요소를 대체하십시오. intel_backlight그리고 acpi_video0그것들은 모두 공통적입니다.

옵션 2: Udev

video명령의 출력에 있는지 확인하십시오 groups. 그렇지 않은 경우 사용자를 그룹에 추가하십시오.

그런 sudo -e /etc/udev/rules.d/backlight.rules다음 .

RUN+="/bin/chgrp video /sys/class/backlight/ideapad/brightness"
RUN+="/bin/chmod 0664  /sys/class/backlight/ideapad/brightness"

재시작. 감사해요:Arch Linux 포럼의 Fistrosan.

솔루션 3.1: C+setuid

이 C 프로그램은 제가 얼마 전에 작성한 솔루션이며 결코 저를 실망시킨 적이 없습니다. 표준 Linux 시스템에는 없는 C 컴파일러 외에는 아무것도 필요하지 않습니다.

#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실행 파일) 루트를 소유자로 만들고 엽니다.사용자 ID 비트 설정실행 파일을 현재 위치 어딘가에 두십시오 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. 내 컴퓨터에서는 이 값이 매우 낮아서 디스플레이가 켜져 있다는 것을 거의 알아차리지 못합니다. 필요에 따라 이 값을 조정하십시오.

옵션 3.2: C+ 함수

Setuid는 br전체 루트 권한을 부여합니다. 매우 주의해서 필요한 권한 집합만 부여하려면(예: 파일 권한 확인을 우회) 위의 chown및 줄을 다음으로 바꾸세요.chmod적절한 능력

setcap cap_dac_override+ep br

답변2

일반적으로 그룹 소유권을 변경하는 것이 좋지만 재부팅할 때마다 이 작업을 수행해야 합니다. 이렇게 하려면 아래 설명에 따라 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)

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

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

물론 udev 규칙에서 사용자가 속한 모든 그룹을 사용할 수 있지만 반드시 그런 것은 아닙니다 video.

관련 정보