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

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

Redshift

jonls/redshift: Redshift adjusts the color temperature of your screen according to your surroundings. This may help your eyes hurt less if you are working in front of the screen at night.

f.lux: software to make your life better

$ 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°

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を実行しておけば動くようになりました．しかし，位置がかなりずれています．浜松あたりの座標が帰って来ていますが，実際は鹿児島です．
半時間はずれてそうです．

浜松のあたりの座標

https://www.openstreetmap.org/#map=15/34.7000/137.7333

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で時計度の座標が確認出来ます．

秋葉原付近

https://www.openstreetmap.org/#map=19/35.69935/139.76957

座標を指定して実行してみます．小数点以下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

ADD 2020-12-28)

Debian sid amd64の redshift 1.12 ではPATHが ~/.config/redshift.conf に変わっていました．

$ redshift -V
redshift 1.12
$ dpkg-query -W redshift
redshift 1.12-4
$ man redshift | grep redshift.conf
A configuration file with the name redshift.conf can optionally be placed in ~/.config/. The file has standard INI format. General

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

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