Я надеялся, что есть какая-нибудь интерактивная программа для настройки xrandr
параметров (гаммы/яркости в частности ), но ничего не нашел.
Итак, я написал этот сценарий оболочки, который позволяет интерактивную настройку яркости/гаммы, а также сохранение/восстановление настроек.
Сохраните файл в irandr.sh
, выполните chmod u+x irandr.sh
, чтобы сделать его исполняемым, и запустите как ./irandr.sh <outputname>
.
d / f / D / F / j / k / J / K Клавиши регулируют яркость(d / f / D / F)или гамма(j / k / J / K)настройки с шагом 5 (нижний регистр )или 1 (верхний регистр.)
s
сохраняет настройки в точечный файл l
загружает настройки из файла точек r
сбрасывает яркость/гамму на значения по умолчанию (1,0)q
уходит. Точечный файл для данного вывода: ~/irandr-<outputname>.dat
. Если вы запустите без аргумента, он отобразит действительные выходные данные xrandr
.
Вы можете добавить аргумент -setonly
в командную строку, которая будет считывать настройки для файла точек данного дисплея, обновлять дисплей и выходить. (Полезно, наверное, в файле ~/.bashrc
для автоматической установки гаммы/яркости.)
#!/bin/bash
# irandr.sh, by Dale Gass (dale@gass.ca)
# Wed Apr 10 16:43:22 EDT 2019
# Process arguments
if [ "$1" != "" ]
then
output="$1"
else
echo "Usage: irandr.sh <outputname> [-setonly]"
echo "(Settings saved to ~/.xrandr-<outputname>.dat)"
echo
echo "Valid outputs:"
xrandr | egrep -v '^( |Screen)'
exit 1
fi
setonly=0
if [ "$2" = "-setonly" ]; then setonly=1; fi
# Initialize variables, read for dotfile if exists
cmdhelp="d/f/D/F=brightness j/k/J/K=gamma r=reset s=save l=load q=quit"
brightness=100
gamma=100
dotfile=~/.irandr-"$output".dat
if [ -s "$dotfile" ]; then read brightness gamma <"$dotfile"; fi
if [ $setonly -eq 0 ]; then
echo $cmdhelp
stty -echo raw intr $'\000' # Allow single character input
fi
# Main loop for setting adjustment
echo 'Bright Gamma'
while :
do
b=$(bc <<< "scale=2; $brightness/100") # Make 0.0-1.0
g=$(bc <<< "scale=2; $gamma/100")
xrandr --output "$output" --brightness "$b" --gamma "$g:$g:$g"
printf "\r%4d %4d " $brightness $gamma
if [ $setonly -eq 1 ]; then echo; exit 0; fi
read -n1 ch # Get input character from user
case $ch in
d) let brightness=brightness-5;; D) let brightness=brightness-1;;
f) let brightness=brightness+5;; F) let brightness=brightness+1;;
j) let gamma=gamma-5;; J) let gamma=gamma-1;;
k) let gamma=gamma+5;; K) let gamma=gamma+1;;
r) brightness=100; gamma=100;;
s) echo "$brightness $gamma" >"$dotfile" && echo -e "Saved\r";;
l) read brightness gamma <"$dotfile" && echo -e "Loaded\r";;
q|$'\003') break;;
*) echo -e "$cmdhelp\r";;
esac
done
stty echo -raw intr $'\003' # Undo single character input
Если единственной проблемой является то, что каталоги скрыты, вы можете просто удалить .
в начале их имени, чтобы сделать их видимыми. Например, используя perl -переименовать (с именем rename
в Ubuntu):
rename 's/^\.//' '.\_Validate'*
Или только с инструментами-оболочками:
for dir in '.\_Validate'*; do echo mv "$dir" "${dir//.}"; done
Боты из них оставляют вас с ужасными именами каталогов, с пробелами, косыми чертами и другими неприятными вещами. Поскольку вы переименовываете, вы можете также переименовать во что-то вменяемое:
rename 's/^\.\\//; s/\s+/_/g' '.\_Validate'*
Это приведет к:
$ ls -d _*
_ValidateAll.sh_GL_100 _ValidateAll.sh_GL_107 _ValidateAll.sh_GL_114
_ValidateAll.sh_GL_101 _ValidateAll.sh_GL_108 _ValidateAll.sh_GL_115
_ValidateAll.sh_GL_102 _ValidateAll.sh_GL_109 _ValidateAll.sh_GL_116
_ValidateAll.sh_GL_103 _ValidateAll.sh_GL_110 _ValidateAll.sh_GL_117
_ValidateAll.sh_GL_104 _ValidateAll.sh_GL_111 _ValidateAll.sh_GL_118
_ValidateAll.sh_GL_105 _ValidateAll.sh_GL_112 _ValidateAll.sh_GL_119
_ValidateAll.sh_GL_106 _ValidateAll.sh_GL_113 _ValidateAll.sh_GL_120
ВАЖНО :обратите внимание, что я не проверяю конфликт имен файлов. Если вы переименуете один из них во что-то, что уже существует,то вы перезапишете существующий файл.
Вы можете использовать GNU Parallel:
parallel mv {} '{=s/^\.\\_//=}' ::: '.\_ValidateAll'*
Это удалит .\_
из имен.
Чтобы также заменить пробелы на _, выполните:
parallel mv {} '{=s/^\.\\_//; s/\s/_/g=}' ::: '.\_ValidateAll'*
В принципе (и, как вы, вероятно, знаете ), файлы и каталоги скрыты, если их имя начинается с .
. Таким образом, вы можете снова сделать их «видимыми», удалив .
. Это можно сделать в bash
, используя встроенные функции работы со строками :
user@host$ for dir in '.\_ValidateAll'*; do newname="${dir#.}"; mv "$dir" "$newname"; done
Тем не менее, вам -рекомендуется проверить правильность работы, предварительно попробовав
user@host$ for dir in '.\_ValidateAll'*; do newname="${dir#.}"; echo "rename $dir to $newname"; done
Обновление:вам обязательно следует последовать совету в ответе @terdon, чтобы воспользоваться возможностью и избавиться от всех специальных символов в этом процессе.