EDIT Благодаря pa4080 я добавил одну строку к скрипту ниже, и теперь он отлично работает. Я не совсем понимаю, как хорошо.
Я хотел бы сделать задание cron, чтобы настроить яркость в разные часы дня. После выполнения некоторых поисковых запросов и проб и ошибок я написал следующий сценарий bash, который хорошо работает:
#!/bin/bash
export DISPLAY=$(w $(id -un) | awk 'NF > 7 && $2 ~ /tty[0-9]+/ {print $3; exit}')
H=$(date +%H)
if (( 00 <= 10#$H && 10#$H < 07 )); then
xrandr --output HDMI-1 --brightness .3 && xrandr --output HDMI-2 --brightness .3 && xrandr --output HDMI-3 --brightness .3
elif (( 07 <= 10#$H && 10#$H < 10 )); then
xrandr --output HDMI-1 --brightness .5 && xrandr --output HDMI-2 --brightness .5 && xrandr --output HDMI-3 --brightness .5
elif (( 10 <= 10#$H && 10#$H < 19 )); then
xrandr --output HDMI-1 --brightness .7 && xrandr --output HDMI-2 --brightness .7 && xrandr --output HDMI-3 --brightness .7
elif (( 19 <= 10#$H && 10#$H < 22 )); then
xrandr --output HDMI-1 --brightness .5 && xrandr --output HDMI-2 --brightness .5 && xrandr --output HDMI-3 --brightness .5
elif (( 22 <= 10#$H && 10#$H < 23 )); then
xrandr --output HDMI-1 --brightness .3 && xrandr --output HDMI-2 --brightness .3 && xrandr --output HDMI-3 --brightness .3
else
echo "Error"
fi
Затем я использовал crontab -e для добавления следующей строки:
0 * * * * /home/piney/screendimmer.sh
Cronjob запускается, но сценарий не запускается. Что я делаю неправильно?
Cron предоставляет ограниченный набор переменных среды по умолчанию [1]. Чтобы получить xrandr для работы через задание Cron, вы должны экспортировать [2] значение переменной $DISPLAY текущего пользователя [3]. Для этого добавьте следующую строку в начало вашего скрипта (или добавьте ее в файл crontab [4]):
export DISPLAY=$(w $(id -un) | awk 'NF > 7 && $2 ~ /tty[0-9]+/ {print $3; exit}')
Ссылки:
Crontab и C программа, которая должна быть выполнена в окне терминала. Как программно найти текущее значение DISPLAY, когда DISPLAY не установлен?Мне понравилась идея и уже реализована в моей системе. Вот моя версия вышеприведенного скрипта:
#!/bin/bash
# While the user is not logged in == until the $DISPLAY variable is unset or empty
unset DISPLAY
while [ -z "$DISPLAY" ] || [ "$DISPLAY" == "" ]; do
DISPLAY=$(w "$(id -un)" | awk 'NF > 7 && $2 ~ /tty[0-9]+/ {print $3; exit}' 2>/dev/null)
if [ "$DISPLAY" == "" ]; then sleep 30; else export DISPLAY="$DISPLAY"; fi
done
brightness(){
# Get the list of the active monitors automatically
# To set this list manually use: OUT=( VGA-1 HDMI-1 HDMI-2 HDMI-3 )
OUT=$(xrandr --listactivemonitors | awk 'NR!=1{print " "$NF" "}')
# Adjust the brightness level for each monitor
for current in "${OUT[@]}"; do xrandr --output "${current// /}" --brightness "$1"; done
}
if [ -z "${1+x}" ]; then # If the scrip is called from Cron or CLI without an argument: 'brightness'
H=$(date +%-H)
if (( 0 <= "$H" && "$H" < 7 )); then brightness ".5"
elif (( 7 <= "$H" && "$H" < 10 )); then brightness ".6"
elif (( 10 <= "$H" && "$H" < 19 )); then brightness ".7"
elif (( 19 <= "$H" && "$H" < 22 )); then brightness ".6"
elif (( 22 <= "$H" && "$H" < 24 )); then brightness ".5"
else echo "Error"
fi
else brightness "$1" # If the scipt is called with an additional argument: 'brightness "<value>"'
fi
Программа Crontab и C, которая должна быть запущена в окно терминала Crontab и C, которые должны быть выполнены в терминальное окно
Как программно найти текущее значение DISPLAY, когда DISPLAY не установлен?Как программно найти текущее значение DISPLAY, когда DISPLAY не установлен?
[ f3] Вероятно, задания @reboot Cron не будут работать с текущей версией скрипта [7].Cron предоставляет ограниченный набор переменных среды по умолчанию [1]. Чтобы получить xrandr для работы через задание Cron, вы должны экспортировать [2] значение переменной $DISPLAY текущего пользователя [3]. Для этого добавьте следующую строку в начало вашего скрипта (или добавьте ее в файл crontab [4]):
export DISPLAY=$(w $(id -un) | awk 'NF > 7 && $2 ~ /tty[0-9]+/ {print $3; exit}')
Ссылки:
Crontab и C программа, которая должна быть выполнена в окне терминала. Как программно найти текущее значение DISPLAY, когда DISPLAY не установлен?Мне понравилась идея и уже реализована в моей системе. Вот моя версия вышеприведенного скрипта:
#!/bin/bash
# While the user is not logged in == until the $DISPLAY variable is unset or empty
unset DISPLAY
while [ -z "$DISPLAY" ] || [ "$DISPLAY" == "" ]; do
DISPLAY=$(w "$(id -un)" | awk 'NF > 7 && $2 ~ /tty[0-9]+/ {print $3; exit}' 2>/dev/null)
if [ "$DISPLAY" == "" ]; then sleep 30; else export DISPLAY="$DISPLAY"; fi
done
brightness(){
# Get the list of the active monitors automatically
# To set this list manually use: OUT=( VGA-1 HDMI-1 HDMI-2 HDMI-3 )
OUT=$(xrandr --listactivemonitors | awk 'NR!=1{print " "$NF" "}')
# Adjust the brightness level for each monitor
for current in "${OUT[@]}"; do xrandr --output "${current// /}" --brightness "$1"; done
}
if [ -z "${1+x}" ]; then # If the scrip is called from Cron or CLI without an argument: 'brightness'
H=$(date +%-H)
if (( 0 <= "$H" && "$H" < 7 )); then brightness ".5"
elif (( 7 <= "$H" && "$H" < 10 )); then brightness ".6"
elif (( 10 <= "$H" && "$H" < 19 )); then brightness ".7"
elif (( 19 <= "$H" && "$H" < 22 )); then brightness ".6"
elif (( 22 <= "$H" && "$H" < 24 )); then brightness ".5"
else echo "Error"
fi
else brightness "$1" # If the scipt is called with an additional argument: 'brightness "<value>"'
fi
Программа Crontab и C, которая должна быть запущена в окно терминала Crontab и C, которые должны быть выполнены в терминальное окно
Как программно найти текущее значение DISPLAY, когда DISPLAY не установлен?Как программно найти текущее значение DISPLAY, когда DISPLAY не установлен?
@hourly /usr/local/bin/brightness
Вероятно, задания @reboot Cron не будут работать с текущей версией скрипта [7]. Cron предоставляет ограниченный набор переменных среды по умолчанию [1]. Чтобы получить xrandr для работы через задание Cron, вы должны экспортировать [2] значение переменной $DISPLAY текущего пользователя [3]. Для этого добавьте следующую строку в начало вашего скрипта (или добавьте ее в файл crontab [4]):
export DISPLAY=$(w $(id -un) | awk 'NF > 7 && $2 ~ /tty[0-9]+/ {print $3; exit}')
Ссылки:
Crontab и C программа, которая должна быть выполнена в окне терминала. Как программно найти текущее значение DISPLAY, когда DISPLAY не установлен?Мне понравилась идея и уже реализована в моей системе. Вот моя версия вышеприведенного скрипта:
#!/bin/bash
# While the user is not logged in == until the $DISPLAY variable is unset or empty
unset DISPLAY
while [ -z "$DISPLAY" ] || [ "$DISPLAY" == "" ]; do
DISPLAY=$(w "$(id -un)" | awk 'NF > 7 && $2 ~ /tty[0-9]+/ {print $3; exit}' 2>/dev/null)
if [ "$DISPLAY" == "" ]; then sleep 30; else export DISPLAY="$DISPLAY"; fi
done
brightness(){
# Get the list of the active monitors automatically
# To set this list manually use: OUT=( VGA-1 HDMI-1 HDMI-2 HDMI-3 )
OUT=$(xrandr --listactivemonitors | awk 'NR!=1{print " "$NF" "}')
# Adjust the brightness level for each monitor
for current in "${OUT[@]}"; do xrandr --output "${current// /}" --brightness "$1"; done
}
if [ -z "${1+x}" ]; then # If the scrip is called from Cron or CLI without an argument: 'brightness'
H=$(date +%-H)
if (( 0 <= "$H" && "$H" < 7 )); then brightness ".5"
elif (( 7 <= "$H" && "$H" < 10 )); then brightness ".6"
elif (( 10 <= "$H" && "$H" < 19 )); then brightness ".7"
elif (( 19 <= "$H" && "$H" < 22 )); then brightness ".6"
elif (( 22 <= "$H" && "$H" < 24 )); then brightness ".5"
else echo "Error"
fi
else brightness "$1" # If the scipt is called with an additional argument: 'brightness "<value>"'
fi
Программа Crontab и C, которая должна быть запущена в окно терминала Crontab и C, которые должны быть выполнены в терминальное окно
Как программно найти текущее значение DISPLAY, когда DISPLAY не установлен?Как программно найти текущее значение DISPLAY, когда DISPLAY не установлен?
@hourly /usr/local/bin/brightness
Вероятно, задания @reboot Cron не будут работать с текущей версией скрипта [7]. Вы должны ввести путь, где установлен xrandr. Введите command -v xrandr (или which xrandr), чтобы узнать, где он установлен. Я полагаю, что это /usr/bin/xrandr, если он установлен по умолчанию.
Итак, отредактируйте yout crontab так:
#!/bin/bash
H=$(date +%k)
if (( $H > 0 && $H <= 7 )); then
/usr/bin/xrandr --output HDMI-1 --brightness .3 && /usr/bin/xrandr --output HDMI-2 --brightness .3 && /usr/bin/xrandr --output HDMI-3 --brightness .3
elif (( $H > 7 && $H <= 10 )); then
/usr/bin/xrandr --output HDMI-1 --brightness .5 && /usr/bin/xrandr --output HDMI-2 --brightness .5 && /usr/bin/xrandr --output HDMI-3 --brightness .5
elif (( $H > 10 && $H <= 19 )); then
/usr/bin/xrandr --output HDMI-1 --brightness .7 && /usr/bin/xrandr --output HDMI-2 --brightness .7 && /usr/bin/xrandr --output HDMI-3 --brightness .7
elif (( $H > 19 && $H <= 22 )); then
/usr/bin/xrandr --output HDMI-1 --brightness .5 && /usr/bin/xrandr --output HDMI-2 --brightness .5 && /usr/bin/xrandr --output HDMI-3 --brightness .5
elif (( $H > 22 && $H <= 23 )); then
/usr/bin/xrandr --output HDMI-1 --brightness .3 && /usr/bin/xrandr --output HDMI-2 --brightness .3 && /usr/bin/xrandr --output HDMI-3 --brightness .3
else
echo "Error"
fi
Вместо того, чтобы писать задания cron вручную, чтобы изменить яркость вашего дисплея, вы можете взглянуть на красное смещение, программу, которая может сделать именно это.
Его можно настроить для отслеживания дневного света в вашем местоположении и изменить яркость и цветовую температуру вашего дисплея. основной точкой продажи является изменение цветовой температуры (т. е. смещение цвета по направлению к красному, откуда и происходит название), но он также может регулировать яркость. Вы можете настроить его только на яркость, если это то, что вам нужно.
Основное преимущество перед ручным решением состоит в том, что красное смещение постепенно меняет цвет / яркость, соответствует текущему суточному циклу вашего местоположения, а не так же, как и при использовании вашего cron. Вы также можете легко переключать эффект вкл / выкл; отправка процесса SIGUSR1 приведет к переключению эффекта. Я сделал ключевое слово, которое делает killall -USR1 redshift, чтобы сделать это легко доступным.
Существует еще одна программа с аналогичной функциональностью, называемая f.lux, которая также поддерживает Windows и MacOS и кажется довольно популярной. У меня нет опыта в этом; в частности, я не совсем уверен, что он может изменить яркость в дополнение к цветовой температуре.
Другим вариантом было бы использовать xbacklight, если вы используете xrand следующим образом: xrandr --output HDMI-1 --brightness .3 && xrandr --output HDMI-2 --brightness .3 && xrandr --output HDMI-3 --brightness .3 эта команда завершится неудачно, если у вас есть выход VGA.
Вы можете установить его с помощью sudo apt install xbacklight. Я использую xbacklight в сотрудничестве с redshift вместе, они являются лучшими.
вместо написания заданий cron вручную изменить яркость вашего дисплея, вы, возможно, захотите, чтобы взглянуть на красное смещение, программа, которая может сделать именно это. Она может быть создана для отслеживания дневного света в вашей местности, а также изменить как яркость дисплея и цветовую температуру, чтобы лучше соответствовать естественному свету.
его основная точка продажи является изменение цветовой температуры (т. е., перекладывая цвет больше к красному, который является, где название происходит от), но оно также может регулировать яркость. Вы могли бы настроить его не только яркость, если это то, что вы хотите.
основное преимущество над ручной метод заключается в том, что красное смещение меняет цвет/яркость постепенно, соответствуют текущему ежедневный цикл вашего местоположения, а не в шагах, а с хрон подход. Вы также можете переключаться эффект довольно легко вкл/выкл; отправку SIGUSR1 процессу переключения эффект. Я сделал сочетание клавиш, что делает [F1], чтобы принять это легко доступны.
есть и другая программа с аналогичными функциями называется F.лакс, который также поддерживает Windows и Mac и, кажется, довольно популярны. У меня хоть и нет опыта работы с ним; в частности, я не совсем уверен, если это может изменить яркость в дополнение к цветовой температуры.
Вы должны ввести путь, где установлен xrandr. Введите command -v xrandr (или which xrandr), чтобы узнать, где он установлен. Я полагаю, что это /usr/bin/xrandr, если он установлен по умолчанию.
Итак, отредактируйте yout crontab так:
#!/bin/bash
H=$(date +%k)
if (( $H > 0 && $H <= 7 )); then
/usr/bin/xrandr --output HDMI-1 --brightness .3 && /usr/bin/xrandr --output HDMI-2 --brightness .3 && /usr/bin/xrandr --output HDMI-3 --brightness .3
elif (( $H > 7 && $H <= 10 )); then
/usr/bin/xrandr --output HDMI-1 --brightness .5 && /usr/bin/xrandr --output HDMI-2 --brightness .5 && /usr/bin/xrandr --output HDMI-3 --brightness .5
elif (( $H > 10 && $H <= 19 )); then
/usr/bin/xrandr --output HDMI-1 --brightness .7 && /usr/bin/xrandr --output HDMI-2 --brightness .7 && /usr/bin/xrandr --output HDMI-3 --brightness .7
elif (( $H > 19 && $H <= 22 )); then
/usr/bin/xrandr --output HDMI-1 --brightness .5 && /usr/bin/xrandr --output HDMI-2 --brightness .5 && /usr/bin/xrandr --output HDMI-3 --brightness .5
elif (( $H > 22 && $H <= 23 )); then
/usr/bin/xrandr --output HDMI-1 --brightness .3 && /usr/bin/xrandr --output HDMI-2 --brightness .3 && /usr/bin/xrandr --output HDMI-3 --brightness .3
else
echo "Error"
fi
Другим вариантом было бы использовать xbacklight, если вы используете xrand следующим образом: xrandr --output HDMI-1 --brightness .3 && xrandr --output HDMI-2 --brightness .3 && xrandr --output HDMI-3 --brightness .3 эта команда завершится неудачно, если у вас есть выход VGA.
Вы можете установить его с помощью sudo apt install xbacklight. Я использую xbacklight в сотрудничестве с redshift вместе, они являются лучшими.
Вместо того, чтобы писать задания cron вручную, чтобы изменить яркость вашего дисплея, вы можете взглянуть на красное смещение, программу, которая может сделать именно это.
Его можно настроить для отслеживания дневного света в вашем местоположении и изменить яркость и цветовую температуру вашего дисплея. основной точкой продажи является изменение цветовой температуры (т. е. смещение цвета по направлению к красному, откуда и происходит название), но он также может регулировать яркость. Вы можете настроить его только на яркость, если это то, что вам нужно.
Основное преимущество перед ручным решением состоит в том, что красное смещение постепенно меняет цвет / яркость, соответствует текущему суточному циклу вашего местоположения, а не так же, как и при использовании вашего cron. Вы также можете легко переключать эффект вкл / выкл; отправка процесса SIGUSR1 приведет к переключению эффекта. Я сделал ключевое слово, которое делает killall -USR1 redshift, чтобы сделать это легко доступным.
Существует еще одна программа с аналогичной функциональностью, называемая f.lux, которая также поддерживает Windows и MacOS и кажется довольно популярной. У меня нет опыта в этом; в частности, я не совсем уверен, что он может изменить яркость в дополнение к цветовой температуре.
Вы должны ввести путь, где установлен xrandr. Введите command -v xrandr (или which xrandr), чтобы узнать, где он установлен. Я полагаю, что это /usr/bin/xrandr, если он установлен по умолчанию.
Итак, отредактируйте yout crontab так:
#!/bin/bash
H=$(date +%k)
if (( $H > 0 && $H <= 7 )); then
/usr/bin/xrandr --output HDMI-1 --brightness .3 && /usr/bin/xrandr --output HDMI-2 --brightness .3 && /usr/bin/xrandr --output HDMI-3 --brightness .3
elif (( $H > 7 && $H <= 10 )); then
/usr/bin/xrandr --output HDMI-1 --brightness .5 && /usr/bin/xrandr --output HDMI-2 --brightness .5 && /usr/bin/xrandr --output HDMI-3 --brightness .5
elif (( $H > 10 && $H <= 19 )); then
/usr/bin/xrandr --output HDMI-1 --brightness .7 && /usr/bin/xrandr --output HDMI-2 --brightness .7 && /usr/bin/xrandr --output HDMI-3 --brightness .7
elif (( $H > 19 && $H <= 22 )); then
/usr/bin/xrandr --output HDMI-1 --brightness .5 && /usr/bin/xrandr --output HDMI-2 --brightness .5 && /usr/bin/xrandr --output HDMI-3 --brightness .5
elif (( $H > 22 && $H <= 23 )); then
/usr/bin/xrandr --output HDMI-1 --brightness .3 && /usr/bin/xrandr --output HDMI-2 --brightness .3 && /usr/bin/xrandr --output HDMI-3 --brightness .3
else
echo "Error"
fi
Другим вариантом было бы использовать xbacklight, если вы используете xrand следующим образом: xrandr --output HDMI-1 --brightness .3 && xrandr --output HDMI-2 --brightness .3 && xrandr --output HDMI-3 --brightness .3 эта команда завершится неудачно, если у вас есть выход VGA.
Вы можете установить его с помощью sudo apt install xbacklight. Я использую xbacklight в сотрудничестве с redshift вместе, они являются лучшими.