Redshift-gtk が位置情報を取得出来なくて困る

太陽の動きに合わせてモニタの色や明るさの調整をしてくれる f.LuxインスパイアなRedshiftというプログラムがあるのですが,新しい環境に導入しても動作しません.位置情報が取得できないようです.

44624259834 09ae5f8845

$ redshift
位置プロバイダ `geoclue2' を試行しています...
プロバイダ `geoclue2' を使用します。
方式 `randr' を使用します。
初期位置が取得可能になるのを待機しています...
Unable to start GeoClue client: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: 'redshift' disallowed, no agent for UID 1000.
Access to the current location was denied by GeoClue!
Make sure that location services are enabled and that Redshift is permitted
to use location services. See https://github.com/jonls/redshift#faq for more
information.
プロバイダから位置を取得できません。

geoclue2のdemoを試してみますがやはり動きません.agentを実行した状態だと動きます.

demoも動かない
$ sudo apt install geoclue-2-demo
$ /usr/lib/geoclue-2.0/demos/where-am-i

** (where-am-i:16681): CRITICAL **: 07:00:13.576: Failed to connect to GeoClue2 service: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: 'geoclue-where-am-i' disallowed, no agent for UID 1000
agentを実行してから試すと取得できるが確認メッセージが表示される
$ /usr/lib/geoclue-2.0/demos/agent &
$ /usr/lib/geoclue-2.0/demos/where-am-i
Geolocation service not in use
Geolocation service in use
Client object: /org/freedesktop/GeoClue2/Client/1

New location:
Latitude:    34.700000°
Longitude:   137.733300°
Accuracy:    25000.000000 meters
Timestamp:   2018年10月16日 07時01分35秒 (1539640895 seconds since the Epoch)
$ redshift
位置プロバイダ `geoclue2' を試行しています...
プロバイダ `geoclue2' を使用します。
方式 `randr' を使用します。
初期位置が取得可能になるのを待機しています...
Geolocation service not in use
Geolocation service in use
位置: 北緯 34.70°, 東経 137.73°

44434687985 2bbe2c44ec
44434688165 c1b5632101

GeoClueの設定で確認メッセージを表示しないように設定しておきます.

/etc/geoclue/geoclue.conf にredshiftの設定を追記
$ echo '[redshift]
allowed=true
system=false
users=' | sudo tee -a
/etc/geoclue/geoclue.conf
[redshift]
allowed=true
system=false
users=
agentを再起動して試す
$ kill %1
[1]+  Terminated              /usr/lib/geoclue-2.0/demos/agent
$ /usr/lib/geoclue-2.0/demos/agent &
[1] 32138
$ redshift
位置プロバイダ `geoclue2' を試行しています...
プロバイダ `geoclue2' を使用します。
方式 `randr' を使用します。
初期位置が取得可能になるのを待機しています...
Geolocation service not in use
Geolocation service in use
位置: 北緯 34.70°, 東経 137.73°
^CGeolocation service not in use

てことで,agentを実行しておけば動くようになりました.しかし,位置がかなりずれています.浜松あたりの座標が帰って来ていますが,実際は鹿児島です.
半時間はずれてそうです.

Redshift のhelpを確認すると手動で座標を指定できるようです.

redshift help
$ gtk-redshift --help
ヘルプを出力するには `redshift -h` を実行してください。
$ redshift -h
使い方: redshift -l 緯度:経度 -t 昼の色温度:夜の色温度 [オプション...]

時刻に従ってディスプレイの色温度を設定します。

  -h            このヘルプ メッセージを表示
  -v            詳細な出力
  -V            プログラムのバージョンを表示

  -b DAY:NIGHT  画面に適用する明るさ (0.1 から 1.0 の間)
  -c FILE       指定した設定ファイルから設定を読み込む
  -g R:G:B      追加で適用するガンマ補正
  -l LAT:LON    あなたの現在位置
  -l PROVIDER   自動で位置情報を更新するプロバイダを選択
                (`list' を指定すると利用可能なプロバイダの一覧が見られます)
  -m METHOD     色温度の設定方式
                (`list' を指定すると利用可能な方式の一覧が見られます)
  -o            ワン ショット モード (色温度の変更は継続して行いません)
  -O TEMP       ワン ショット 手動モード (色温度を設定します)
  -p            表示モード (パラメータの出力のみを行って終了します)
  -P            新しい色効果の適用前に既存のガンマ ランプをリセット
  -x            リセット モード (画面の調整を解除します)
  -r            色温度の緩やかな変更を無効にする
  -t DAY:NIGHT  昼間/夜間に設定する色温度

ニュートラルな温度は 6500K です。この値を用いると
ディスプレイの色温度は変更されません。これよりも高い値を設定すると
青い光が増え、低い値を設定すると赤い光が増えます。

既定値:

  昼間の温度: 6500K
  夜間の温度: 4500K

バグは <https://github.com/jonls/redshift/issues> に報告してください
$ redshift -l list
利用可能な位置プロバイダ:
  geoclue2
  manual

`-l プロバイダ名:オプション' でコロン区切りのオプションを指定します。
`-l プロバイダ名:help' でヘルプが参照できます。

OpenStreetMapなどで設定したい場所のURLで時計度の座標が確認出来ます.

座標を指定して実行してみます.小数点以下2桁しか見ないようです.

redshiftに手動で座標指定
$ redshift -l 35.69935:139.76957
方式 `randr' を使用します。
初期位置が取得可能になるのを待機しています...
位置: 北緯 35.70°, 東経 139.77°
^C
$ gtk-redshift -l 35.70:139.77 &

設定ファイルに位置情報設定しておきます.これでオプション無しでokになります.(秋葉原周辺の設定)

$ mkdir -p ~/.config/redshift
$ vi ~/.config/redshift/redshift.conf
~/.config/redshift/redshift.conf
[redshift]

location-provider=manual

[manual]
;秋葉原付近の差表
lat=35.70
lon=139.77

手動でとりあえず設定できましたが,移動するたびに設定するのは面倒なので別の位置情報取得データベースを試してみます.

GeoIPの導入とアップデート
$ sudo apt install geoip-bin geoip-database geoip-database-extra geoipupdate
$ sudo geoipupdate
$ geoiplookup $(curl -s ifconfig.me/ip)
GeoIP Country Edition: JP, Japan
GeoIP City Edition, Rev 1: JP, 13, Hyogo, Nishinomiya, 662-0934, 34.716702, 135.333298, 0, 0
GeoIP ASNum Edition: AS10013 FreeBit Co.,Ltd.

GeoIPは兵庫になりました.少し近づいたけどやはりかなりずれています.
これでうまく行ったらこんな感じで設定できるのですが.

GeoIPを使ったredshift利用例
$ gtk-redshift -l $( geoiplookup $(curl -s ifconfig.me/ip)|grep City | cut -f7-8 -d, | sed -e 's/,/:/' -e 's/\ //g' )

てことでagentを起動するのは面倒だし旅行の予定もないのでとりあえずマニュアル設定にしておきます.

環境
$ dpkg-query -W redshift redshift-gtk geoclue-2.0 geoclue-2-demo geoip-bin geoip-database geoip-database-extra geoipupdate
geoclue-2-demo  2.4.12-2
geoclue-2.0     2.4.12-2
geoip-bin       1.6.12-1
geoip-database  20180315-1
geoip-database-extra    20180315-1
geoipupdate     2.5.0-1
redshift        1.12-2
redshift-gtk    1.12-2
$ lsb_release -d
Description:    Debian GNU/Linux unstable (sid)
$ uname -m
x86_64