Я написал скрипт, который позволяет мне переключать яркость экрана моего ноутбука (я запускаю его с помощью горячей клавиши, привязанной к xbindkeys
),
но это включает в себя запись в /sys/класс/подсветка/acpi_video0/яркость
.
На данный момент я просто сделал так, чтобы он мог писать в этот файл, выполнив
sudo chown $USER: /sys/class/backlight/acpi_video0/brightness
но это сбрасывается после каждой перезагрузки ноутбука,
поэтому мне нужно перезапустить его, прежде чем я смогу использовать свою горячую клавишу.
Каков правильный и постоянный способ сделать это?
EDIT_3 (т. е. добавлено после ниже 2 редактирования) (технически «ответ»):
Мне надоело пытаться заставить udev работать,
и (после долгого замешательства (неизвестное количество которых было вызвано тем, что я просто опечатал и пропустил букву «t» в «яркости».))
наконец заставил его работать так:
(Чтобы быть явным, мой эхо $USER
является о1
.)
Так
Я создал файл:
/home/o1/.icanhasbrightness.sh
содержащий:
#!/usr/bin/bash
chown o1: /sys/класс/подсветка/acpi_video0/яркость
Я сделал:
> корень sudo chown: root /home/o1/.icanhasbrightness.sh
и
> sudo chmod 0711 /home/o1/.icanhasbrightness.sh
(
такой, что
> stat /home/o1/.icanhasbrightness.sh|голова -n 4|хвост -n 1
#=>
Доступ: (0711/-rwx--x--x) Uid: (0/root) Gid: (0/root)
)
Я сделал:
> Судо Визудо
и добавил строку:
o1 ALL=(ALL) NOPASSWD: /home/o1/.icanhasbrightness.sh
Я изменил свою функцию fishshell, чтобы проверить, нет владелец файла яркости, а если нет, запустите этот скрипт.
(
функция яркость_set_current
#todo это, вероятно, "неправильный" способ справиться с этим, но что бы он ни работал
если тест $USER != (stat -c %U /sys/class/backlight/acpi_video0/brightness)
sudo /home/o1/.icanhasbrightness.sh
конец
эхо $argv > /sys/класс/подсветка/acpi_video0/яркость
конец
)
... Итак, я думаю, что технически это отвечает на мой собственный вопрос, но...
- (1) Я чувствую, что это, вероятно, «неправильный» способ сделать это (?)
- (2) Я так устал возиться с этим, что мне все равно не хочется публиковать его в качестве «ответа» прямо сейчас.
(((
И в интересах любых гипотетических будущих эквивалентов моего прошлого «я».
(
то есть, по общему признанию, не связанный с фактическим вопросом, на который я пытался получить ответ здесь,
но я пока оставлю это здесь, а потом придумаю, куда лучше поместить, где, скорее всего, это увидит кто-то, кто сочтет это полезным.
),
кому просто нужна горячая клавиша для переключения яркости и цветовой температуры экрана,
затем, предполагая, что вы уже используете fishshell (и знаете, как сохранить их как функции автозагрузки и все такое), код был таким:
функция яркость_get_current
кошка /sys/класс/подсветка/acpi_video0/яркость
конец
функция яркость_set_current
#td ИСПРАВИТЬ(?)
если тест $USER != (stat -c %U /sys/class/backlight/acpi_video0/brightness)
sudo /home/o1/.icanhasbrightness.sh
конец
эхо $argv > /sys/класс/подсветка/acpi_video0/яркость
конец
функция яркости_get_max --description 'максимальная яркость, мб'
кошка /sys/класс/подсветка/acpi_video0/max_brightness
конец
функция яркости_set_max --description 'максимальная яркость, мб'
яркость_set_current (яркость_get_max)
конец
функция яркость_toggle
#
#
установить -l подробный $argv
установить -l текущая_яркость (brightness_get_current)
установить -l current_ct (xsct|g --nocolor -o '\d+$')
#бк
# эхо current_ct $current_ct
#
установить -l яркость
если тест $current_brightness -eq 0
установить яркость «мин»
иначе если проверить $current_brightness -eq (brightness_get_max)
установить максимальную яркость
еще
установить яркость «средняя»
конец
установить -l покраснение
если тест $current_ct -eq 1000
установить красноту «красный»
иначе, если тест $current_ct -lt 1000
установить красноту 'red_super'
иначе, если тест $current_ct -lt 700
установить красноту 'red_impossible'
иначе, если тест $current_ct -lt 6500
установить красноту «средний»
иначе, если тест $current_ct -eq 6500
установить красноту «белый»
еще
установить красноту «синий»
конец
#
функция яркость_set_to_max_white
яркость_set_max
D0 xsct 0 #т.е. 6500
конец
функция яркость_set_to_min_red
яркость_set_current 0
D0 xsct 1000
конец
функция яркость_set_to_min_white
яркость_set_current 0
D0 xsct 0 #т.е. 6500
конец
#
#бк
если тест "$verbose"
эхо \t'текущее состояние:'
эхо \t\t'яркость:' \t$яркость
эхо \t\t'покраснение:' \t$покраснение
конец
#
if test "$brightness" = 'max' -a "$redness" = 'white'
#бк
тест "$подробный"
и эхо "1 - установка на min_red (из max_white)"
яркость_set_to_min_red
иначе, если test "$brightness" = 'min' -a "$redness" = 'red'
#бк
тест "$подробный"
и эхо "2 - установка на min_white (из min_red)"
яркость_set_to_min_white
иначе если test "$brightness" = 'min' -a "$redness" = 'white'
#бк
тест "$подробный"
и эхо "3 - установка на max_white (из min_white)"
яркость_set_to_max_white
еще
#бк
тест "$подробный"
и эхо "4 - установка на max_white (от другого)"
яркость_set_to_max_white
конец
конец
и привязать его к ключу,
я просто положил в ~/.xbindkeysrc
этот контент:
"рыба -c 'brightness_toggle'"
Mod4 + меньше
(Mod4 + меньше
просто быть тем, что xbindkeys -mk
сказал мне, что это вызвало эту комбинацию клавиш, когда я нажал ее)
...ах да, кроме установки xsct
ты тоже должен сделать
> git клон 'https://github.com/faf0/sct.git'
(в то время как в любом каталоге вы хотите СКТ
директор, чтобы закончить в)
тогда
> sudo apt установить libxrandr-dev
(зависимость, которую вам нужно скомпилировать)
затем (в то время как в этом СКТ
директор, созданный git клон
-ing)
> судо сделать установить
(
Кроме того, я настроил горячие клавиши, чтобы перевернуть край экрана вверху.
(что также зависит от того, что яркость_set_current
функция, потому что, по крайней мере, для меня, используя ксрандр -о
почему-то портит яркость)
с рыбьей скорлупой:
function screen_orientation --description 'ориентация экрана/монитора - возможные аргументы: нормальный/левый/правый/инвертированный'
установить current_brightness (cat /sys/class/backlight/acpi_video-0/max_brightness)
xrandr -o $argv
и яркость_set_current $current_brightness
# думаю, мне это действительно не нужно?
# если thnpadd
# азот --восстановить
# # и азот D0 --restore
# конец
конец
и ~/.xbindkeysrc
:
"рыба -c 'ориентация_экрана влево'"
Мод4 + Левый
"рыба -c 'ориентация экрана нормальная'"
Мод4 + Вверх
"рыба -c 'ориентация экрана вправо'"
Мод4 + Вправо
"рыба -c 'экран_ориентация перевернута'"
Мод4 + Вниз
)
)))
EDIT_1 ("может быть, udev?"):
я нашел на архвики:
По умолчанию только корень
можно изменить яркость этим методом. Чтобы разрешить пользователям в [например] видео
group для изменения яркости можно использовать правило udev, подобное следующему:
[записать в этот файл:]
/etc/udev/rules.d/backlight.rules
[этот контент:]
ACTION=="добавить", SUBSYSTEM=="подсветка", KERNEL=="acpi_video0", GROUP="video", MODE="0664"
Итак, я сделал это, затем сделал:
sudo groupдобавить видео
и:
sudo usermod -aG видео o1
(
Что ж, если предположить, что я правильно помню, что именно я делал в каком порядке,
но независимо, группы $USER
делает подтвердить, что я являюсь в видео
группа.
)
но после перезапуска, все же, пытаясь написать в него вот так, все равно получается:
> эхо 5 > /sys/класс/подсветка/acpi_video0/яркость
#=>
предупреждение: произошла ошибка при перенаправлении файла '/sys/class/backlight/acpi_video0/brightness'
открыть: Отказано в доступе
и это:
> статистика /sys/класс/подсветка/acpi_video0/яркость
#=>
Файл: /sys/class/backlight/acpi_video0/brightness
Размер: 4096 Блоков: 0 Блок ввода-вывода: 4096 обычный файл
Устройство: 16h/22d Инод: 22741 Ссылки: 1
Доступ: (0644/-rw-r--r--) Uid: (0/root) Gid: (0/root)
Доступ: 2021-09-24 10:51:53.894540644 -0700
Изменить: 2021-09-24 10:51:53.888124116 -0700
Изменение: 2021-09-24 10:51:53.888124116 -0700
Рождение: -
что означает, что это все еще только корень
у которого есть права на запись в файл, верно?
Это правило udev был предполагается... сменить владельца файла на видео
группа, да?
(
Предполагая, что «этот файл принадлежит этой группе», правильно понимается концепция и / или терминология ...?
Во всяком случае, это должно было дать видео
групповое разрешение на запись в файл, верно?
)
Так почему же это не сработало?
-- Я имею в виду, поскольку я не могу точно запрыгнуть на арку и попробовать,
я могу только предполагать это то, что я сделал был бы работал над аркой(?),
так чем отличается убунту?
EDIT_2 ("удев должен работай??"):
Из того, что я могу понять из этот учебник по udev,
Это должен работай?
(
Или, во всяком случае, это делает сказать:
Файл правил чтения: /etc/udev/rules.d/backlight.rules
-- но это не сказать что-нибудь о "ГРУППА
" ИЛИ ЖЕ "РЕЖИМ
".
)
(Я также пытался изменить =
к :=
's (чтобы «убедиться, что это не перекрывается другими правилами»), на всякий случай.)
> udevadm информация -a /sys/класс/подсветка/acpi_video0/
#=>
Информация Udevadm начинается с устройства, указанного devpath, а затем
поднимается по цепочке родительских устройств. Он печатает для каждого устройства
найдены все возможные атрибуты в формате ключа правил udev.
Правило для сопоставления может быть составлено из атрибутов устройства.
и атрибуты одного родительского устройства.
глядя на устройство '/devices/pci0000:00/0000:00:01.0/backlight/acpi_video0':
ЯДРО=="acpi_video0"
ПОДСИСТЕМА=="подсветка"
ВОДИТЕЛЬ==""
АТТР{макс_яркость}=="15"
ATTR{фактическая_яркость}=="15"
АТТР{bl_power}=="0"
ATTR{тип}=="прошивка"
АТТР{яркость}=="15"
ATTR{шкала}=="неизвестно"
глядя на родительское устройство '/devices/pci0000:00/0000:00:01.0':
ЯДРА=="0000:00:01.0"
ПОДСИСТЕМЫ=="PCI"
ДРАЙВЕРЫ=="radeon"
ATTRS{local_cpulist}=="0-1"
АТТР{msi_bus}=="1"
ATTRS{max_link_width}=="255"
ATTRS{consistent_dma_mask_bits}=="40"
ATTRS{driver_override}=="(null)"
ATTRS{power_dpm_state}=="сбалансированный"
ATTRS{редакция}=="0x00"
ATTRS{устройство}=="0x9648"
ATTRS{local_cpus}=="3"
ATTRS{subsystem_device}=="0x21ea"
АТТР{d3cold_allowed}=="1"
ATTRS{power_method}=="dpm"
ATTRS{numa_node}=="-1"
ATTRS{broken_parity_status}=="0"
ATTRS{power_state}=="D0"
АТТР{boot_vga}=="1"
ATTRS{ирк}=="31"
ATTRS{current_link_width}=="0"
ATTRS{current_link_speed}=="Неизвестно"
ATTRS{класс}=="0x030000"
ATTRS{power_profile}=="по умолчанию"
АТТР{dma_mask_bits}=="40"
ATTRS{вендор}=="0x1002"
ATTRS{subsystem_vendor}=="0x17aa"
ATTRS{включить}=="1"
ATTRS{power_dpm_force_performance_level}=="авто"
АТТР{ari_enabled}=="0"
ATTRS{max_link_speed}=="Неизвестно"
глядя на родительское устройство '/devices/pci0000:00':
ЯДРА=="pci0000:00"
ПОДСИСТЕМЫ==""
ДРАЙВЕРЫ==""
и:
> udevadm test --action="add" '/devices/pci0000:00/0000:00:01.0/backlight/acpi_video0'
#=>
Индекс модуля загрузки
Разобранный файл конфигурации /usr/lib/systemd/network/99-default.link
Разобранный файл конфигурации /usr/lib/systemd/network/73-usb-net-by-mac.link
Создан контекст конфигурации ссылки.
Файл правил чтения: /usr/lib/udev/rules.d/39-usbmuxd.rules
Файл правил чтения: /usr/lib/udev/rules.d/40-usb-media-players.rules
Файл правил чтения: /usr/lib/udev/rules.d/40-usb_modeswitch.rules
Файл правил чтения: /usr/lib/udev/rules.d/40-vm-hotadd.rules
Файл правил чтения: /usr/lib/udev/rules.d/50-apport.rules
Файл правил чтения: /usr/lib/udev/rules.d/50-firmware.rules
Файл правил чтения: /usr/lib/udev/rules.d/50-udev-default.rules
Файл правил чтения: /usr/lib/udev/rules.d/55-dm.rules
Файл правил чтения: /usr/lib/udev/rules.d/55-ippusbxd.rules
Файл правил чтения: /usr/lib/udev/rules.d/56-hpmud.rules
Файл правил чтения: /usr/lib/udev/rules.d/56-lvm.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-autosuspend-chromiumos.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-block.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-cdrom_id.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-crda.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-drm.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-evdev.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-fido-id.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-input-id.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-inputattach.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-libgphoto2-6.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-libsane.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-pcmcia.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-persistent-alsa.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-persistent-input.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-persistent-storage-dm.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-persistent-storage-tape.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-persistent-storage.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-persistent-v4l.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-sensor.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-serial.rules
Файл правил чтения: /usr/lib/udev/rules.d/60-tpm-udev.rules
Файл правил чтения: /usr/lib/udev/rules.d/61-autosuspend-manual.rules
Файл правил чтения: /usr/lib/udev/rules.d/61-kde-bluetooth-rfkill.rules
Файл правил чтения: /usr/lib/udev/rules.d/61-persistent-storage-android.rules
Файл правил чтения: /usr/lib/udev/rules.d/64-btrfs.rules
Файл правил чтения: /usr/lib/udev/rules.d/64-xorg-xkb.rules
Файл правил чтения: /usr/lib/udev/rules.d/65-libwacom.rules
Файл правил чтения: /usr/lib/udev/rules.d/66-snapd-autoimport.rules
Файл правил чтения: /usr/lib/udev/rules.d/69-cd-sensors.rules
Файл правил чтения: /usr/lib/udev/rules.d/69-libmtp.rules
Файл правил чтения: /usr/lib/udev/rules.d/69-lvm-metad.rules
Файл правил чтения: /usr/lib/udev/rules.d/69-wacom.rules
Файл правил чтения: /usr/lib/udev/rules.d/70-joystick.rules
Файл правил чтения: /usr/lib/udev/rules.d/70-mouse.rules
Файл правил чтения: /usr/lib/udev/rules.d/70-pcspkr-beep.rules
Файл правил чтения: /usr/lib/udev/rules.d/70-power-switch.rules
Файл правил чтения: /usr/lib/udev/rules.d/70-printers.rules
Файл правил чтения: /usr/lib/udev/rules.d/70-spice-vdagentd.rules
Файл правил чтения: /usr/lib/udev/rules.d/70-touchpad.rules
Файл правил чтения: /usr/lib/udev/rules.d/70-u2f.rules
Файл правил чтения: /usr/lib/udev/rules.d/70-uaccess.rules
Файл правил чтения: /usr/lib/udev/rules.d/71-power-switch-proliant.rules
Файл правил чтения: /usr/lib/udev/rules.d/71-seat.rules
Файл правил чтения: /usr/lib/udev/rules.d/71-u-d-c-gpu-detection.rules
Файл правил чтения: /usr/lib/udev/rules.d/73-seat-late.rules
Файл правил чтения: /usr/lib/udev/rules.d/73-special-net-names.rules
Файл правил чтения: /usr/lib/udev/rules.d/75-net-description.rules
Файл правил чтения: /usr/lib/udev/rules.d/75-probe_mtd.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-broadmobi-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-cinterion-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-dell-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-dlink-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-ericsson-mbm.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-fibocom-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-foxconn-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-gosuncn-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-haier-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-huawei-net-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-longcheer-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-mtk-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-nokia-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-pcmcia-device-blacklist.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-qdl-device-blacklist.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-quectel-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-sierra.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-simtech-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-telit-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-tplink-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-ublox-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-usb-device-blacklist.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-usb-serial-adapters-greylist.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-x22x-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/77-mm-zte-port-types.rules
Файл правил чтения: /usr/lib/udev/rules.d/78-graphics-card.rules
Файл правил чтения: /usr/lib/udev/rules.d/78-sound-card.rules
Файл правил чтения: /usr/lib/udev/rules.d/80-debian-compat.rules
Файл правил чтения: /usr/lib/udev/rules.d/80-drivers.rules
Файл правил чтения: /usr/lib/udev/rules.d/80-iio-sensor-proxy.rules
Файл правил чтения: /usr/lib/udev/rules.d/80-libinput-device-groups.rules
Файл правил чтения: /usr/lib/udev/rules.d/80-mm-candidate.rules
Файл правил чтения: /usr/lib/udev/rules.d/80-net-setup-link.rules
Файл правил чтения: /usr/lib/udev/rules.d/80-udisks2.rules
Файл правил чтения: /usr/lib/udev/rules.d/81-net-dhcp.rules
Файл правил чтения: /usr/lib/udev/rules.d/84-nm-drivers.rules
Файл правил чтения: /usr/lib/udev/rules.d/85-hdparm.rules
Файл правил чтения: /usr/lib/udev/rules.d/85-hplj10xx.rules
Файл правил чтения: /usr/lib/udev/rules.d/85-nm-unmanaged.rules
Файл правил чтения: /usr/lib/udev/rules.d/85-regulatory.rules
Файл правил чтения: /usr/lib/udev/rules.d/85-tlp-rdw.rules
Файл правил чтения: /usr/lib/udev/rules.d/85-tlp.rules
Файл правил чтения: /usr/lib/udev/rules.d/90-alsa-restore.rules
Файл правил чтения: /usr/lib/udev/rules.d/90-bolt.rules
Файл правил чтения: /usr/lib/udev/rules.d/90-console-setup.rules
Файл правил чтения: /usr/lib/udev/rules.d/90-fwupd-devices.rules
Файл правил чтения: /usr/lib/udev/rules.d/90-libinput-fuzz-override.rules
Файл правил чтения: /usr/lib/udev/rules.d/90-nm-thunderbolt.rules
Файл правил чтения: /usr/lib/udev/rules.d/90-pulseaudio.rules
Файл правил чтения: /usr/lib/udev/rules.d/95-cd-devices.rules
Файл правил чтения: /usr/lib/udev/rules.d/95-dm-notify.rules
Файл правил чтения: /usr/lib/udev/rules.d/95-upower-csr.rules
Файл правил чтения: /usr/lib/udev/rules.d/95-upower-hid.rules
Файл правил чтения: /usr/lib/udev/rules.d/95-upower-hidpp.rules
Файл правил чтения: /usr/lib/udev/rules.d/95-upower-wup.rules
Файл правил чтения: /usr/lib/udev/rules.d/96-e2scrub.rules
Файл правил чтения: /usr/lib/udev/rules.d/97-hid2hci.rules
Файл правил чтения: /usr/lib/udev/rules.d/99-systemd.rules
Файл правил чтения: /etc/udev/rules.d/backlight.rules
Выгрузить индекс модуля
Выгружен контекст конфигурации ссылки.
Эта программа предназначена только для отладки, она не запускает никакие программы.
определяется клавишей RUN. Он может показывать неправильные результаты, потому что
некоторые значения могут отличаться или быть недоступными при запуске моделирования.
DEVPATH=/devices/pci0000:00/0000:00:01.0/подсветка/acpi_video0
ДЕЙСТВИЕ=добавить
ПОДСИСТЕМА=подсветка
ТЕГИ =: сиденье: systemd:
ID_PATH=PCI-0000:00:01.0
ID_PATH_TAG=PCI-0000_00_01_0
ID_FOR_SEAT=подсветка-pci-0000_00_01_0
SYSTEMD_WANTS=systemd-backlight@backlight:acpi_video0.service
USEC_INITIALIZED=2680045