xrandr의 출력을 "게으른" 방법으로 읽는 방법은 무엇입니까?

xrandr의 출력을 "게으른" 방법으로 읽는 방법은 무엇입니까?

xrandr --verbose현재 밝기를 얻는 데 사용되는 모니터 밝기를 조정하는 bash 스크립트가 있습니다 . 여기에서 볼 수 있듯이 잘 작동하지만 xrandr내 컴퓨터에서 사용하기에는 약간 느립니다.

[PROMPT REDACTED]$ time xrandr --verbose
# xrandr output omitted for brevity
real    0m0.976s
user    0m0.003s
sys     0m0.002s

거의 1초가 걸리는 것 외에도 필요하지 않은 많은 정보가 출력됩니다. 실제로 필요한 출력 줄은 다음과 같습니다 Brightness: X. 현재 이 줄을 사용하여 다음에서 값을 가져옵니다.

BRIGHTNESS=`xrandr --verbose | grep -i brightness | cut -f2 -d ' ' | head -n1`

참고 사항: head마지막 호출에서는 모니터가 2개이므로 결국 2개의 값을 얻게 되지만 동일한 밝기로 유지하므로 1개만 필요합니다.

에서 하나의 행만 필요하기 때문에 xrandr --verbose다음을 수행하여 "느리게" 평가할 수 있는 방법이 있는지 궁금합니다.

  • xrandr이 줄에 도달하면 출력을 중지합니다.
  • xrandr줄 읽기를 마치면 나머지 출력은 무시됩니다.
  • 다른 건 없나요?

나는 bash가 이 상황에 가장 적합한 언어가 아닐 수도 있다는 것을 알고 있으므로 다른 언어의 솔루션에도 열려 있습니다.

답변1

awk다음을 사용하여 일부 파이프(프로세스)를 제거하고 첫 번째 밝기 인스턴스가 나타날 때까지 파일을 읽을 수 있습니다 .

xrandr --verbose | awk '/Brightness/ { print $2; exit }'

답변2

처음 발견하면 멈추고 무시해 봅시다 brigthness. grep매뉴얼 페이지 에서 :

 -m NUM, --max-count=NUM
          Stop  reading  a  file after NUM matching lines.

이것이 나의 최종 버전입니다. 우리는 심지어 필요하지도 않습니다 head:

BRIGHTNESS=`xrandr --verbose | grep -m 1 -i brightness | cut -f2 -d ' '`

답변3

grep경기 후 읽기를 중지하기 위해 ' 플래그를 사용하라는 @LatinSuD의 제안 외에도 다음과 같은 것을 사용하여 -mstdout 버퍼의 크기를 조정할 수도 있습니다.xrandrstdbuf이와 같이:

BRIGHTNESS=`stdbuf -o0 xrandr --verbose | grep -m 1 -i brightness | cut -f2 -d ' '`

이렇게 하면 속도가 크게 향상될 수 있습니다.

$ cat brightness
xrandr --verbose | grep -m 1 -i brightness | cut -f2 -d ' '

$ time sh brightness > /dev/null
sh brightness > /dev/null  0.00s user 0.00s system 1% cpu 0.485 total

$ cat brightness_nobuffer
stdbuf -o0 xrandr --verbose | grep -m 1 -i brightness | cut -f2 -d ' '

[ para ~ . ]$ time sh brightness_nobuffer > /dev/null
sh brightness_nobuffer > /dev/null  0.01s user 0.01s system 10% cpu 0.130 total

답변4

이 프로그램을 설치하시길 권해드립니다 xbacklight.

물론 하드웨어가 이를 지원하지 않는 경우 이는 선택 사항이 아닙니다. 따라서 지금까지 해왔던 것처럼 소프트웨어를 조정해야 합니다.

man xrandr 2>/dev/null |
grep '^ *--brightness' -A8
   --brightness brightness
          Multiply the gamma values on the  crtc  cur‐
          rently  attached  to the output to specified
          floating value. Useful for overly bright  or
          overly  dim  outputs.   However,  this  is a
          software only modification, if your hardware
          has  support  to actually change the bright‐
          ness, you will probably prefer to use xback‐
          light.

밝기 설정은 RGB 승수에 불과한 것 같습니다.감마모니터의 가치. 따라서 직접적인 영향을 미치는 것이 더 합리적일 수도 있고, 적어도 더 쉬울 수도 있습니다 xgamma.

xgamma
-> Red  1.000, Green  1.000, Blue  1.000

xgamma -gamma .7
-> Red  1.000, Green  1.000, Blue  1.000
<- Red  0.700, Green  0.700, Blue  0.700

다른 많은 답변과 마찬가지로 sed문제가 발생하는 즉시 입력을 중단 할 수 있습니다.명도다음과 같은 문자열:

xrandr --verbose | sed '/Br/!d;s/.* //;q'

이렇게 하면 처음 발생하기 전의 모든 줄이 삭제됩니다.브롬끈. 하나를 찾으면 해당 줄에서 마지막 줄까지 모든 내용을 삭제한 다음 <space>즉시 입력을 종료합니다. 따라서 100% 밝기에서 남은 것은 다음과 같습니다.

echo "<$(xrandr --verbose | sed '/Br/!d;s/.* //;q')>"
<1.0>

다음을 사용하여 출력에서 ​​유효한 EDID를 얻고 백라이트에 직접 영향을 미칠 수 있다면 더 좋을 것입니다.

man xbacklight 2>/dev/null | 
sed '/^ *SYNOPSIS/,/^ *-inc/!d;//c\\'

       xbacklight [-help]  [-display display] [-get] [-set
       percent] [-inc percent] [-dec percent]

DESCRIPTION
       Xbacklight  is used to adjust the backlight bright‐
       ness where supported. It finds all outputs on the X
       server  supporting backlight brightness control and
       changes them all in the same way.

       -get   Print out the current  backlight  brightness
              of  each  output  with  such  a control. The
              brightness is represented as a percentage of
              the maximum brightness supported.

       -set percent
              Sets each backlight brightness to the speci‐
              fied level.

내 컴퓨터에는 분명히 이미 설치되어 있습니다. 왜냐하면 어느 시점에 설치했기 때문입니다.

pacman -Qo /usr/bin/xbacklight
/usr/bin/xbacklight is owned by xorg-xbacklight 1.2.1-1

...^그 패키지.

관련 정보