staging.inyokaproject.org

geoclue. Bitte Nachhilfe

Status: Ungelöst | Ubuntu-Version: Lubuntu 18.04 (Bionic Beaver)
Antworten |

mmvk

Avatar von mmvk

Anmeldungsdatum:
4. Januar 2009

Beiträge: 965

hi,

mit welchem Befehl erfrage ich meine Koordinaten?

Viele Grüße aus Wien von

Manfred

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Dem Paket liegt eine Demo-Anwendung bei (den Quellcode gibt es hier: https://cgit.freedesktop.org/geoclue/plain/demo/where-am-i.c), mit der man Abfragen machen kann:

sudo /usr/lib/geoclue-2.0/demos/where-am-i 

Damit man das Programm als normaler Nutzer nutzen kann (die DBus-API erlaubt standardmäßig nur root den Zugriff), muss man in der Konfigurationsdatei /etc/geoclue/geoclue.conf so einen Eintrag am Ende hinzufügen:

1
2
3
4
[geoclue-where-am-i]
allowed=true
system=false
users=

Damit redshift als normaler Nutzer geoclue nutzen kann, braucht es so einen Eintrag in der Datei:

1
2
3
4
[redshift]
allowed=true
system=false
users=

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Interessanterweise kann man die DesktopId für den DBus-Client frei wählen, d.h. da in der Vorkonfiguration u.a. ein Eintrag für den firefox vorhanden ist, kann jede Anwendung, die die Desktop-ID auf "firefox" setzt (Zeile 19), nach Belieben Standort-Informationen abfragen 😈 - das Verhalten scheint laut https://gitlab.freedesktop.org/geoclue/geoclue/commit/87e60ed97843f1a59db46c320aa048cb064a0f08 "gewollt" zu sein.

Basierend auf https://gist.github.com/jonls/11337107e84442dd783d (benötigt das Paket python-dbus):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/env python

import dbus
import time

bus = dbus.SystemBus()

manager_obj = bus.get_object('org.freedesktop.GeoClue2', '/org/freedesktop/GeoClue2/Manager')
manager = dbus.Interface(manager_obj, 'org.freedesktop.GeoClue2.Manager')
client_path = manager.GetClient()

print 'Client at {}'.format(client_path)

client_obj = bus.get_object('org.freedesktop.GeoClue2', client_path)
client = dbus.Interface(client_obj, 'org.freedesktop.GeoClue2.Client')
client_props = dbus.Interface(client_obj, 'org.freedesktop.DBus.Properties')

client_props.Set('org.freedesktop.GeoClue2.Client', 'DistanceThreshold', dbus.UInt32(10000))
client_props.Set('org.freedesktop.GeoClue2.Client', 'DesktopId', dbus.String("firefox"))
client.Start()

print 'Client started...'

while True:
    location_path = client_props.Get('org.freedesktop.GeoClue2.Client', 'Location')
    if location_path != '/':
        break
    time.sleep(.25)

location_obj = bus.get_object('org.freedesktop.GeoClue2', location_path)
location_props = dbus.Interface(location_obj, 'org.freedesktop.DBus.Properties')

print 'Location at {}'.format(location_path)

print location_props.Get('org.freedesktop.GeoClue2.Location', 'Latitude')
print location_props.Get('org.freedesktop.GeoClue2.Location', 'Longitude')
print location_props.Get('org.freedesktop.GeoClue2.Location', 'Accuracy')
print location_props.Get('org.freedesktop.GeoClue2.Location', 'Description')
Antworten |