LINUX.ORG.RU

dell xps 13 + ubntu 15.10 + Ambient Light Sensor

 ,


1

1

Приветствую. Не работает автоматическая смена яркости, сам датчик работает:
Закрыл пальцем датчик
$ cat /sys/bus/acpi/devices/ACPI0008:00/ali
5
Обычный режим
$ cat /sys/bus/acpi/devices/ACPI0008:00/ali
14
Свечу фонарем в него
$ cat /sys/bus/acpi/devices/ACPI0008:00/ali
500
С экраном в это время никаких изменений не происходит.
Да, драйвер установил вот по этой схеме https://github.com/danieleds/als
Все остальное работает изкоробки, осталось с этим разобраться. Куда копать?



Последнее исправление: Nimble (всего исправлений: 1)

Ну так драйвер работает. Что тебе ещё надо? Проверь автоматическую поддержку смены яркости в твоём DE (Gnome 3, Unity, KDE, другие вряд ли такие свистоперделки поддерживают).

Deleted
()
Ответ на: комментарий от Nimble

Я не знаю. Могу написать скрипт.

Который будет тебе это делать.

В общем, ты и сам это можешь, если знаешь python/bash.

Deleted
()
Последнее исправление: merhalak (всего исправлений: 2)

По факту, тебе надо раз в N секунд читать файл c текущими данными, которые ты привёл в начале треда. И писать в файл /sys/class/backlight/<твой_вендор>/brigtness число между нулём и числом, записанным в файле max_brightness (тот же путь).

Ах да, ещё хорошо бы сделать этот скрипт сервисом, запускаемым при загрузке (systemd service) от рута (другой в /sys/class/.../brightness писать не может).

Deleted
()
Ответ на: комментарий от roman77

Не нахожу на своем dell xps 13 датчика освещения.

я тоже :( наверное, единственное чего не хватает для полного счастья

ksim
()
Ответ на: комментарий от ksim

Не нахожу на своем dell xps 13 датчика освещения.

я тоже :( наверное, единственное чего не хватает для полного счастья

У меня модель 2013 года. На ней есть датчик, справа от камеры. На моделях 2015 года его убрали.

Nimble
() автор топика
Ответ на: комментарий от Deleted

Я не знаю. Могу написать скрипт.

Буду благодарен.
А скажем без костылей можно заставить работать его нормально? Чтобы менял яркость экрана + включал/выключал подсветку клавиш(в офтопике прекрасно работает)

Nimble
() автор топика
Ответ на: комментарий от Nimble

У меня модель 2013 года. На ней есть датчик, справа от камеры. На моделях 2015 года его убрали.

вот это и расстраивает

по теме https://unix.stackexchange.com/questions/234990/ambient-light-sensor-support-...

поддержка сенсоров только по-моему в Гноме нормальная есть и то с 3.18

ksim
()
Ответ на: комментарий от ksim

Для полного счастья не хватает отключения гребанной адаптивной яркости экрана. Обещают в биосе а06, но хз когда оно зарелизится.

roman77 ★★★★★
()
Ответ на: комментарий от Nimble

Да, это должно быть реализовано в DE. Но оно бы у тебя подхватилось автоматически.

Deleted
()
Ответ на: комментарий от roman77

Для полного счастья не хватает отключения гребанной адаптивной яркости экрана.

онож не аппаратно привязано, можно и отключить, в Гноме вроде так, не хочешь отключаешь автоматическую яркость.

ksim
()
Ответ на: комментарий от A1

Люто завидую. Не бери 2015, глаза просто вытекают

можно поподробнее, у меня вроде глаза норм, не вытекают, моя основная рабочая машина, целыми днями за ней сижу.

ksim
()
Ответ на: комментарий от Deleted

Поехали, давай сюда:

$ sudo ls -a /sys/bus/acpi/devices/ACPI0008:00/
.  ..  ali  driver  enable  hid  modalias  path  physical_node	power  raw_max	raw_value  status  subsystem  uevent

$ sudo ls -a /sys/class/backlight/
.  ..  acpi_video0
Nimble
() автор топика
Ответ на: комментарий от Nimble

Увы, в первом ls я ничего не понял, а во втором мне надо

ls -a /sys/class/backlight/acpi_video0
И как же я тебе завидую. У меня кривой asus + intel_backlight, у первого без acpi_osi= не работают функциональные клавиши, с acpi_osi= перестаёт регулироваться подсветка без костылей.

А по поводу последней команды - тут должны быть файлы max_brightness, brightness и current_brighness. Мне нужен cat от них.

А в первом ls я надеялся увидеть что-нибудь по типу максимального значения этой переменной, чтоб не городить непонятные константы. Поищи в файлах, может там есть какие нибудь константы (максимальные значения датчика освещенности)? Я просто хочу взять данные из текущей освещенности, и спроецировать на промежуток [10%; 100%] от яркости экрана. Или [20%; 100%], где 100% - константа из max_brightness.

Deleted
()
Ответ на: комментарий от ksim

Да не, не эта яркость.

The screen brightness is controlled by firmware and correlates with the brightness of content on screen.

This means the screen automatically dims when dark content is shown and brightens when bright content is shown.

There is no known method to turn this mechanism off.

https://github.com/advancingu/XPS13Linux/issues/2

тут можно проверить это: http://tylerwatt12.com/dc/

https://www.youtube.com/watch?v=6f_eaLYIs-c

Обещают фикс в a06 биосе, посему в крон заплил себе это:

* */1 * * *     export DISPLAY=:0 && curl http://www.dell.com/support/home/us/en/19/Drivers/DriversDetails?driverId=YMRTD | grep "Version A06" && kdialog --passivepopup "Release of New BIOS version for Dell XPS 13. Please remove me from crontab." 5 > /dev/null
roman77 ★★★★★
()
Последнее исправление: roman77 (всего исправлений: 3)
Ответ на: комментарий от Deleted

Увы, в первом ls я ничего не понял, а во втором мне надо

$ ls -a /sys/class/backlight/acpi_video0
.  ..  actual_brightness  bl_power  brightness  device  max_brightness  power  subsystem  type  uevent


И как же я тебе завидую. У меня кривой asus + intel_backlight

У меня был топовый на тот момент асус f3 (2007 год), прослужил он мне год, т.к. весь корпус треснул(в интернете много инфы по этой теме), и в конце концов выломалась одна из петель, которая держит дисплей. С тех пор на ноутбуки асус я больше не смотрю.

файлы max_brightness, brightness и current_brighness. Мне нужен cat

/sys/class/backlight/acpi_video0$ cat max_brightness 
15
/sys/class/backlight/acpi_video0$ cat brightness 
7
/sys/class/backlight/acpi_video0$ cat actual_brightness 
7


Поищи в файлах, может там есть какие нибудь константы

Пока ничего не нашел.

Nimble
() автор топика
Ответ на: комментарий от roman77

Но ведь... есть же FHD версия...

Есть, и мне кажется она более актуальная чем UHD.

Nimble
() автор топика
Ответ на: комментарий от Nimble

И да, последнее: какой уровень (в единицах) подсветки тебе наиболее удобен (нужно две точки: яркий свет в комнате и значение подсветки, отсутствие света и значение подсветки)?

Deleted
()
Ответ на: комментарий от Deleted

И да, последнее: какой уровень (в единицах) подсветки тебе наиболее удобен (нужно две точки: яркий свет в комнате и значение подсветки, отсутствие света и значение подсветки)?

Яркий свет - 11
В темноте -5

Nimble
() автор топика
Ответ на: комментарий от Nimble

Вчера вечером обновилось ядро на 4.2.0-18-generic и соответственно отвалился модуль ali. Пробую собирать, но ничего не выходит.
Перешел по ссылке которую дал ksim

по теме https://unix.stackexchange.com/questions/234990/ambient-light-sensor-support-...

Оказывается аппаратно датчик поддерживается
В светлом помещении

$ cat /sys/bus/acpi/devices/ACPI0008:00/iio\:device0/in_illuminance_raw
10

Темнота
cat /sys/bus/acpi/devices/ACPI0008:00/iio\:device0/in_illuminance_raw
5

Nimble
() автор топика
Ответ на: комментарий от Nimble

merhalak, забыл добавить, что установил iio-sensor-proxy пакет. Я так понимаю это замена самосборному модулю ali? а нем тебе проще наверное будет все завязать.

Nimble
() автор топика
Ответ на: комментарий от Nimble

Хорошо, завтра днём напишу. У меня сейчас под рукой винда.

Deleted
()
Ответ на: комментарий от Nimble

Получилось нечто такое:

#!/usr/bin/env bash

sensor_file="/sys/bus/acpi/devices/ACPI0008:00/iio\:device0/in_illuminance_raw"
read sensor < $sensor_file

max_brightness_file="/sys/class/backlight/acpi_video0/max_brightness"
read max_brightness < $max_brightness_file

result=$sensor
if (( $sensor <= 5 )); then
	result=5
else
	((result = result * 11 / 10))

	if (( $result > $max_brightness )); then
		result=$max_brightness
	fi
fi

brightness_file="/sys/class/backlight/acpi_video0/brightness"
echo $result > $brightness_file

Это только скриптик (обзови его autobacklight.sh, чтоб я потом знал, куда обращаться в сервисе). Проверь работоспособность (вручную, от рута).
Его надо засунуть в /usr/bin/, потом:

sudo su
cd /usr/bin
chmod 744 autobacklight.sh
chmod +x autobacklight.sh # я не профессионал, по моему, предыдущая команда делает то же самое, так что эта может и не понадобиться
/usr/bin/autobacklight.sh
Скрипт будет работать только от рута.

Проверь работоспособность, а я пока сервис напишу.

Deleted
()
Ответ на: комментарий от Deleted

Так даже чутка попроще будет.

#!/usr/bin/env bash

sensor_file="/sys/bus/acpi/devices/ACPI0008:00/iio\:device0/in_illuminance_raw"
max_brightness_file="/sys/class/backlight/acpi_video0/max_brightness"
brightness_file="/sys/class/backlight/acpi_video0/brightness"

while :; do
	read sensor < $sensor_file
	read max_brightness < $max_brightness_file

	result=$sensor
	if (( $sensor <= 5 )); then
		result=5
	else
		((result = result * 11 / 10))

		if (( $result > $max_brightness )); then
			result=$max_brightness
		fi
	fi

	echo $result > $brightness_file
	sleep 5
done

sleep поправь на нужное количество секунд, которое тебе комфортно для авторегулировки. Можно даже десятые доли брать, типа sleep 0.5.

Deleted
()
Последнее исправление: merhalak (всего исправлений: 1)
Ответ на: комментарий от Deleted

А вот и последняя часть (сам сервис) (работать будет со второй версией скрипта, т.к. я из под винды наугад не хочу разбираться с таймерами в systemd) Обзови его autobacklight.service и помести в /etc/systemd/system/

[Unit]
Description=Autobacklight Daemon

[Service]
ExecStart=/usr/bin/autobacklight.sh
Restart=on-abort

[Install]
WantedBy=default.target
После этого используй (от рута, или с sudo):
systemctl enable autobacklight  # включает его в автозагрузку
systemctl disable autobacklight # убирает из автозагрузки
systemctl start autobacklight   # включает его до следующей перезагрузки
systemctl stop autobacklight    # выключает до следующей перезагрузки
Надеюсь, работать будет. Если что, кастуй.

Deleted
()
Последнее исправление: merhalak (всего исправлений: 1)
Ответ на: комментарий от Deleted

Скрипт будет работать только от рута.

Проверь работоспособность, а я пока сервис напишу.

$ sudo ./autobacklight.sh 
./autobacklight.sh: строка 8: /sys/bus/acpi/devices/ACPI0008:00/iio\:device0/in_illuminance_raw: Нет такого файла или каталога
./autobacklight.sh: строка 12: ((: <= 5 : ошибка синтаксиса: ожидается операнд (ошибочная метка "<= 5 ")

Nimble
() автор топика
Ответ на: комментарий от Nimble

Странно, почему он пишет нет такого файла, когда он есть. Когда запускаю скрипт, подсветка на минимум встает.

Nimble
() автор топика
Ответ на: комментарий от Nimble

И почему он не находит файл, от которого ты мне cat писал?

Deleted
()
Ответ на: комментарий от Nimble

И скрипт от рута запускаешь? Обычно не видит, если запуск не от рута. Но при этом видит /sys/class, действительно странно.

Deleted
()
Последнее исправление: merhalak (всего исправлений: 1)
Ответ на: комментарий от Deleted

Запускаю от рута

# autobacklight.sh 
/usr/bin/autobacklight.sh: строка 8: /sys/bus/acpi/devices/ACPI0008:00/iio\:device0/in_illuminance_raw: Нет такого файла или каталога
/usr/bin/autobacklight.sh: строка 12: ((: <= 5 : ошибка синтаксиса: ожидается операнд (ошибочная метка "<= 5 ")

Тоже на месте
$ cat /sys/bus/acpi/devices/ACPI0008:00/iio\:device0/in_illuminance_raw
6

Nimble
() автор топика
Ответ на: комментарий от Nimble

Попробуй поменять в скрипте

	read sensor < $sensor_file
на
	read sensor < cat $sensor_file

Deleted
()
Ответ на: комментарий от Deleted
sudo ./autobacklight.sh 
./autobacklight.sh: строка 8: cat: Нет такого файла или каталога
./autobacklight.sh: строка 12: ((: <= 5 : ошибка синтаксиса: ожидается операнд (ошибочная метка "<= 5 ")
Nimble
() автор топика
Ответ на: комментарий от Nimble
sudo ./autobacklight.sh 
./autobacklight.sh: строка 8: cat: Нет такого файла или каталога
./autobacklight.sh: строка 12: ((: -le 5 : синтаксическая ошибка в выражение (ошибочная метка "5 ")
Nimble
() автор топика
Ответ на: комментарий от Nimble

А второй вариант? Кстати, может тогда понадобится поменять 17 строку на

if [ "$result" -gt "$max_brightness" ]; then

Deleted
()
Ответ на: комментарий от Nimble

Попробуй ещё поменять файл sensor на какой-нибудь в твоей домашней папке, в котором будет одно число. И поменять число руками.

Deleted
()
Ответ на: комментарий от Nimble

Как вариант, можно изменить условия, и попробовать заставить его работать через первый драйвер.

Deleted
()
Ответ на: комментарий от Nimble

Еще вариант решения - попробовать удвоить обратные (виндовые) слеши, ибо он может их воспринимать, как управляющие символы.

Deleted
()
Ответ на: комментарий от Deleted

Щас поковыряюсь, отпишусь. Первый драйвер с новым ядром не собирается.

Nimble
() автор топика

Такое только в GNOME 3.18 появилось (а толи GNOME 3.20 будет, хз)

mystery ★★
()
Ответ на: комментарий от Deleted

Создал файл с числом 10, с него все читает, и меняет подсветку. Осталось разобраться почему не хочет читать с сенсора

Nimble
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.