Поворот экрана на Ubuntu 18.04 LTS, Lenovo Ideapad Miix 510
Я недавно обновил свой Lenovo Ideapad Miix 510 с 16 по 18 апреля и был приятно удивлен, обнаружив, что мой ранее нефункциональный автоповорот экрана начал работать с обновлением. К сожалению, автоповорот всегда на 90 градусов против часовой стрелки относительно фактической ориентации планшета, если я не заблокирую вращение. Также, если я переориентирую планшет слишком часто, не блокируя поворот экрана, экран становится сплошным серым, и вся система зависает.
Настройки -> Дисплеи не имеют раздела "Ориентация" или "Поворот", предположительно из-за автоповорота. Использование xrandr с ключами -o или --rotate
Неправильный ключ MIT-MAGIC-COOKIE-1Не открывается дисплей:0
Есть ли способ оставить автоповорот включенным, но скажите Ubuntu всегда показывать экран на 90 градусов по часовой стрелке от того, что, по его мнению, должно быть в ориентации?
3 ответа
Я просто запускаю MIIX 510 самостоятельно. Это отличное небольшое Surface Pro-подобное устройство, которое довольно хорошо работает в Ubuntu 18.04.
Мне удалось разобраться с поворотом экрана под Ubuntu. Из коробки мой дисплей повернут на 90 градусов по часовой стрелке, но это можно исправить, сопоставив данные датчика. Очевидно, что данные аппаратного акселерометра должны быть переведены, чтобы вращение экрана работало хорошо.
Подробную информацию о полном и более точном сопоставлении необходимого отображения аппаратного акселерометра MIIX 510 можно найти здесь: https://npm.pkg.github.com/systemd/systemd/blob/master/hwdb/60-sensor.hwdb
Следующие шаги правильно отобразят данные для поворота экрана MIIX 510 под Ubuntu 18.04:
1) Установите iio-sensor-proxy, если вы его удалили
2) Устраните проблему, взломав сопоставление и сопоставление датчиков, создав файл со следующим файлом /etc/udev/hwdb.d/60-sensor.hwdb с этим содержимым:
sensor:modalias:*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
3) Запустите команду:
обновление sudo systemd-hwdb
4) перезагрузка
Изредка вижу этот вопрос.
Исправление от меня было объединено с systemd, и эта проблема должна быть исправлена на systemd> = 240
Просто чтобы расширить принятый ответ с моим опытом для не кодеров/математиков, таких как я...
Как я туда попал
(Вокруг домов и вверх по садовой дорожке)
Я сделал много неправильных поворотов, задаваясь вопросом, почему ничего не происходит, когда я пытался изменить значения в матрице датчика. Ошибка номер один заключалась в исследовании матриц вращения (речь идет о направлении, а не вращении), а ошибка номер два — не следить за отступами и пробелами, это крайне важно .
Настраивать
Данные об ориентации генерируются акселерометром, т.е. датчиком, который сообщает, какой путь находится вверху. Шина датчика i2c может принимать 3-осевой гироскоп, акселерометр и компас, хотя нас интересует только акселерометр. Это обрабатывается iio-sensor-proxy.service и настраивается в/usr/lib/udev/hwdb.d/60.sensor.hwdb
. Проверьте этот файл, чтобы увидеть, указано ли устройство в списке. Если нет, этот файл содержит полезную информацию о том, как выполнить настройку с помощью файла конфигурации по адресу . Этот файл добавит системный файл (он читается после него при инициализации базы данных оборудования) и будет сохраняться после любых обновлений системы.
Идентификация планшета и сенсора
На задней части корпуса моего планшета написано " Toshiba WT10a 102 ". Чтобы найти полную строку DMI или модалии устройства, используйте . Это возвращает:
dmi:bvnToshiba:bvr2.00:bd01/09/2015:br2.0:efr19.0:svnTOSHIBA:pnTOSHIBAWT10-A-102:pvrPDWOBE-00800TEN:rvnType2-BoardManufacturer:rnType2-BoardProductNAme:rvrType2-BoardVersion:cvnChasisManufacturer:ct10:cvrChassisVersion:
Для получения подробной информации об использовании датчикаudevadm info -q path -n /dev/iio:device*
. Это возвращает:
/devices/platform/80860F41:02/i2c-2/i2c-INVN6500:00/iio:device0
Это можно использовать для поиска модалий устройства в родительском датчике с помощьюcat /sys/`udevadm info -q path -n /dev/iio:device0`/../modalias
. Это возвращает:
acpi:INVN6500:
Метку устройства (если она есть) можно найти в файле меток датчика сcat /sys/`udevadm info -q path -n /dev/iio:device0`/label
. В моем случае это возвращает:
cat: 'sys/devices/platform/80860F41:02/i2c-2/i2c-INVN6500:00/iio:device0/label': No such file or directory
Файл hwdb.d
Полезно посмотреть, существует ли аналогичная конфигурация в файле hwdb.d, поэтомуcat /usr/lib/udev/hwdb.d/60-sensor.hwdb | grep -i -A1 'toshiba'
. Это возвращает:
# Toshiba
#########################################
--
# Toshiba Encore WT10A tablet
sensor:modalalias:acpi:INV6500*:dmi:*:svnTOSHIBA:pnTOSHIBAWT10-A-103:*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
Где формат:
sensor:modalias:<parent modalias pattern>:dmi:<dmi pattern>
or
sensor:<label>:modalias:<parent modalias pattern>:dmi:<dmi pattern>
Здесь матч проводится противacpi:INV6500*
(родительские модалии датчика плюс подстановочный знак) и:svnTOSHIBA:pnTOSHIBAWT10-A-103:
(производитель системы dmi и название продукта окружены подстановочными знаками). Двоеточия вокруг названия поставщика и продукта кажутся излишними. Матрица описывает перестановку и инвертирование направлений x и y.
Хорошо, так что мне повезло, и у меня был близкий матч. Простое редактирование названия продукта и обновление могли бы помочь мне в этом. Это было бы сделано, однако опечатка (да, одно из этих пробелов) означало, что я не мог решить это, и поэтому я пошел дальше, пытаясь понять матрицы.
Матрицы
Матрица ориентации используется для учета возможных вариантов монтажа акселерометра в устройстве. Возможные значения в матрице 3 x 3: 1, 0 и -1. Для каждой оси акселерометра строка в матрице определяет сопоставление с осью выходных данных. Первая строка матрицы (первые 3 числа файла hwdb.d) определяют, назначаются ли данные с оси x акселерометров оси x, y или z вывода через 1 (выбрать), 0 (игнорировать) или - 1 (отрицательно). Каждая строка должна иметь один и только один выход.
Вот как я пришел к пониманию матрицы после некоторых фальстартов. Для меня это имело смысл как ряд переключателей, отображающих вход на выход следующим образом.
меняет местами и отрицает x , а y оставляет z без изменений.
В файле hwdb.d это будет записано как0,-1,0;-1,0,0;0,0,1
.....Что в точности совпадает с существующей записью Toshiba в файле hwdb.d. Дох!
Создание записи hwdb.d
Рекомендуется добавить запись в файл/etc/udev/hwdb.d/61-sensor.hwdb
чтобы добавить ваше правило к тем, которые уже находятся в . Будьте осторожны при копировании и вставке, чтобы убедиться, что пробелы есть во всех нужных местах и не более того!sudo nano /etc/udev/hwdb.d/60-sensor.hwdb
илиsudo gedit /etc/udev/hwdb.d/60-sensor.hwdb
и добавьте необходимые строки, такие как:
#########################################
# Toshiba
#########################################
# Toshiba Encore WT10-A-102 tablet
sensor:modalalias:acpi:INV6500*:dmi:*svnTOSHIBA:pnTOSHIBAWT10-A-102*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
Предлагается внести свой вклад в проект systemd на github, предоставив свою конфигурацию. В этом случае может применяться более общее правило для захвата таблеток 102 и 103 в/user/lib/udev/hwdb.d/60-sensor.hwdb
файл следующим образом:
#########################################
# Toshiba
#########################################
# Toshiba Encore WT10-A type 102 and 103 tablets
sensor:modalalias:acpi:INV6500*:dmi:*svnTOSHIBA:pnTOSHIBAWT10-A-10*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
Перезапустите с новыми настройками
Чтобы изменения вступили в силу, необходимо обновить базу данных оборудования и перезапустить службу датчиков. Это можно сделать с помощью:
sudo systemd-hwdb update
sudo udevadm trigger -v -p DEVNAME=/dev/iio:device0
sudo systemctl restart iio-sensor-proxy.service
Команды
cat /sys/class/dmi/id/modalias
илиcat /sys/devices/virtual/dmi/id/modalias
чтобы увидеть полный dmi планшета, где
bvn = (поставщик BIOS)
bvr = (версия BIOS)
bd = (дата BIOS)
br = (версия BIOS)
efr = (версия микропрограммы EC)
svn = (поставщик системы)
pn = (название продукта)
pvr = (версия продукта)
rvn = (поставщик платы)
rn = (имя платы)
rvr = (версия платы)
cvn = (поставщик шасси)
ct = (тип шасси)
cvr = (версия шасси)
sku = (артикул продукта)
cat /usr/lib/udev/hwdb.d/60-sensor.hwdb
чтобы увидеть весь файл конфигурации
cat /usr/lib/udev/hwdb.d/60-sensor.hwdb | grep -ignore-case --after-context=1 'toshiba'
для фильтрации до производителя планшета плюс одна строка конечного контекста
udevadm info --query all --name /dev/iio:device*
находит датчик в этом случае имя узла устройства ядра «device0» на «INVN6500»
udevadm info --export-db
чтобы убедиться, что датчик обнаружен, возвращает платформу, имя и многое другое для всех устройств udev.
udevadm info --export-db | grep iio
фильтровать до датчика
cat /sys/`udevadm info --query path --name /dev/iio:device*`/../modalias
вернуть родительские модалии датчика
cat /sys/`udevadm info --query path --name /dev/iio:device*`/label
вернуть этикетку датчика (если есть)
gdbus introspect --system --dest net.hadess.SensorProxy --object-path /net/hadess/SensorProxy
проверить, обнаружен ли датчик
monitor-sensor
проверить выход датчиков
sudo dmesg | grep --ignore-case toshiba
диагностические сообщения для производителя планшета (отчеты "dmi: TOSHIBA TOSHIBA WT10-A-102/Type2")
sudo dmesg | grep --ignore-case invn6500
диагностические сообщения для датчика (сообщает, что датчик использовал идентификационную матрицу, т.е. никаких изменений)
sudo systemd-hwdb update
обновить систему с любыми изменениями, внесенными в конфигурацию
sudo udevadm trigger --verbose --property-match DEVNAME=/dev/iio:device0
обновить систему с любыми изменениями, внесенными в конфигурацию
sudo systemctl restart iio-sensor-proxy.service
перезапустите службу, чтобы увидеть последствия любых изменений, внесенных в конфигурацию
Полезные сайты
- https://gitlab.freedesktop.org/hadess/iio-sensor-proxy
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/firmware/dmi-id.c
- https://github.com/systemd/systemd
- https://www.freedesktop.org/software/systemd/man/hwdb.html
- https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=dfc57732ad38f93ae6232a3b4e64fd077383a0f1
- https://people.skolelinux.org/pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.html
- https://en.wikipedia.org/wiki/Ориентация_(векторное_пространство)
- https://en.wikipedia.org/wiki/Логическая_матрица
- https://en.wikipedia.org/wiki/Permutation_matrix