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つだけが必要です。

で1行しか必要ないので、xrandr --verbose次のように「ゆっくり」評価する方法があるかどうか疑問に思います。

  • xrandrこの行に達すると出力を停止します。
  • xrandr行の読み取りが終了すると、残りの出力は無視されます。
  • 他にはありませんか?

私はbashがこの状況に最も適した言語ではないかもしれないことを知っているので、他の言語のソリューションにも開いています。

答え1

awk以下を使用して、一部のパイプ(プロセス)を削除し、最初の明るさインスタンスが表示されるまでファイルを読み取ることができます。

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

答え2

初めて発見したら止めて無視してみましょうbrigthnessgrepマニュアルページから:

 -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'

これにより、最初に発生する前のすべての行が削除されます。臭素ひも。 1つが見つかったら、その行から最後の行まですべての内容を削除し、<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

...^そのパッケージ。

関連情報