Como girar a tela automaticamente usando o acelerômetro do Yoga 900?

3

O Yoga 900 tem um acelerômetro que deve permitir o comportamento de auto-rotação.

Ao instalar link (Linux *, LightDM) é possível executar o monitor-sensor.

➜  ~ monitor-sensor
    Waiting for iio-sensor-proxy to appear
+++ iio-sensor-proxy appeared
=== Has accelerometer (orientation: undefined)
=== Has ambient light sensor (value: 0.000000, unit: lux)
    Accelerometer orientation changed: normal
    Light changed: 49.999999 (lux)
    Light changed: 79.999998 (lux)
    Accelerometer orientation changed: left-up
    Accelerometer orientation changed: normal
    Accelerometer orientation changed: left-up
    Accelerometer orientation changed: bottom-up

Com iio-sensor-proxy , os dados são disponibilizados no dbus. Tem a forma:

signal time=1479631365.562013 sender=:1.15 -> destination=(null destination) serial=449861 path=/com/ubuntu/Upstart; interface=com.ubuntu.Upstart0_6; member=EventEmitted
   string "dbus"
   array [
      string "SIGNAL=PropertiesChanged"
      string "BUS=system"
      string "INTERFACE=org.freedesktop.DBus.Properties"
      string "OBJPATH=/net/hadess/SensorProxy"
      string "SENDER=:1.4"
      string "ARG0=net.hadess.SensorProxy"
   ]
  1. É possível executar um script que apenas acenda em determinados eventos do dbus? De preferência, reutilizo um loop de eventos em um daemon que já existe em vez de criar meu próprio script Python ou programa C. Algo como adicionar um arquivo a /etc/dbus.d/handlers/net/hadess/SensorProxy seria muito legal.

  2. Se eu não executar monitor-sensor , não pareço mensagens aparecendo no dbus, mesmo que iio-sensor-proxy seja realmente executado. Essas mensagens só são enviadas se alguém as estiver escutando?

[*] Linux V 4.8.1-040801-genérico # 201610071031 SMP sex 7 de outubro 14:34:10 UTC 2016 x86_64 x86_64 x86_64 GNU / Linux

PS: De acordo com o poder ao usar monitor-sensor :

14.7 mW      1.5 ms/s       8.8        Process        dbus-monitor

A resposta deve descrever a maneira canônica de lidar com isso no Linux e ser a solução mais amigável do ponto de vista do uso da bateria.

    
por Anne van Rossum 20.11.2016 / 12:50

1 resposta

1

Eu não sou um guru do Linux, mas parece que dbus-monitor é de fato a ferramenta a ser usada.

Uma resposta para a postagem Como criar um daemon que estaria escutando o script dbus e fire na mensagem diz:

Based on https://sobrelinux.info/questions/12411/how-do-i-run-a-script-on-a-dbus-signal"interface='$interface',member='$member'" | while read -r line; do echo $line | grep ActiveChanged && your_script_goes_here done

Just stick that in /etc/init.d/monitor-for-unlock, make it executable, and then make a soft link in rc2.d

chmod +x /etc/init.d/monitor-for-unlock
cd /etc/rc2.d
ln -s /etc/init.d/monitor-for-unlock .

O artigo Monitoramento do D-Bus adiciona:

Probably the most powerful feature of dbus-monitor is the fact that you are not limited to using just one watch expression at a time. The following example simultaneously monitors all 3 Tomboy signals and uses awk to parse the output from dbus-monitor and display a meaningful message.

#!/bin/bash

OJECT="'org.gnome.Tomboy'"
IFACE="'org.gnome.Tomboy.RemoteControl'"
DPATH="'/org/gnome/Tomboy/RemoteControl'"

WATCH1="type='signal', sender=${OJECT}, interface=${IFACE}, path=${DPATH}, member='NoteAdded'"
WATCH2="type='signal', sender=${OJECT}, interface=${IFACE}, path=${DPATH}, member='NoteSaved'"
WATCH3="type='signal', sender=${OJECT}, interface=${IFACE}, path=${DPATH}, member='NoteDeleted'"

dbus-monitor "${WATCH1}" "${WATCH2}" "${WATCH3}" | \
awk '
/member=NoteAdded/ { getline; print "Created note " substr($2,7) }
/member=NoteSaved/ { getline; print "Added note " substr($2,7) }
/member=NoteDeleted/ { getline; print "Deleted note " substr($2,7) }
'

Here is the output generated when I clicked on the Tomboy icon to create a new note, waited for the automatic save and then selected the delete option to delete the note.

$ ./test
Created note //tomboy/3da026dc-f6ee-4637-8a94-bec6e2844824"
Added note //tomboy/3da026dc-f6ee-4637-8a94-bec6e2844824"
Deleted note //tomboy/3da026dc-f6ee-4637-8a94-bec6e2844824"
    
por 29.12.2016 / 13:26