Почему бы не использовать обоих:
(Требует удара 4),
#!/usr/bin/env bash
t(){ type "$1"&>/dev/null;}
function Menu.Show {
local DIA DIA_ESC; while :; do
t whiptail && DIA=whiptail && break
t dialog && DIA=dialog && DIA_ESC=-- && break
exec date +s"No dialog program found"
done; declare -A o="$1"; shift
$DIA --backtitle "${o[backtitle]}" --title "${o[title]}" \
--menu "${o[question]}" 0 0 0 $DIA_ESC "$@"; }
Menu.Show '([backtitle]="Backtitle"
[title]="Title"
[question]="Please choose:")' \
\
"Option A" "Stuff...." \
"Option B" "Stuff...." \
"Option C" "Stuff...."
Попробуем остановиться и проигнорировать первое обнаружение brigthness
. Из grep
man page:
-m NUM, --max-count=NUM
Stop reading a file after NUM matching lines.
Это моя окончательная версия. Обратите внимание, что нам даже не нужна головка
:
BRIGHTNESS=`xrandr --verbose | grep -m 1 -i brightness | cut -f2 -d ' '`
Вы можете использовать awk
, чтобы удалить некоторые конвейеры (процессы) и только читать файл, пока не встретите первый экземпляр Яркости:
xrandr --verbose | awk '/Brightness/ { print $2; exit }'
В дополнение к предложению @LatinSuD использовать флаг grep
-m
для остановки чтения после совмещения, вы можете настроить размер stdout-буфера xrandr
с помощью такого инструмента, как stdbuf
:
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
Предлагаю установить программу 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
, как только столкнетесь со строкой Brightness типа:
xrandr --verbose | sed '/Br/!d;s/.* //;q'
, которая удаляет все строки до первого появления строки Br. Когда она находит одну из них, то удаляет все до последнего <пробела>
из строки до момента немедленного выхода из входа. Таким образом, все, что остается в случае 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
...^ этот пакет.
Самый медленный шаг:xrandr --verbose
. Таким образом, если вам не нужно было выбирать яркость с помощью xrandr --verbose
каждый раз, когда вы пытаетесь отрегулировать яркость, проблема будет решена.
Этого можно добиться с помощью следующего рабочего процесса:
echo `xrandr --verbose | grep -m 1 -i brightness | cut -f2 -d ' '` > brightness.txt
brightness.txt
brightness.txt
Например, так я обновляю яркость:
#!/bin/bash
# BRIGHT=`xrandr --verbose | grep -m 1 -i brightness | cut -f2 -d ' '`
BRIGHT=`cat brightness.txt`
if [ "$1" = '+' ]; then
NEWBRIGHT=$(echo "$BRIGHT + 0.05" | bc)
if [ "$(echo "$NEWBRIGHT > 1.0" | bc)" -eq 1 ]; then
NEWBRIGHT='1.0'
fi
elif [ "$1" = '-' ]; then
NEWBRIGHT=$(echo "$BRIGHT - 0.05" | bc)
if [ "$(echo "$NEWBRIGHT < 0.0" | bc)" -eq 1 ]; then
NEWBRIGHT='0.0'
fi
fi
xrandr --output eDP-1 --brightness "$NEWBRIGHT"
echo "${NEWBRIGHT}" > brightness.txt