Gnome Weather 是 Gnome 自带的天气预报 APP,底层依赖 libgweather 库,它提供了多个数据源,但不知道是不是发行版不会全部启用这些源的原因,我们伟大的国际 Rock Home Town 搜不到,超超知道了肯定不开心。
为它添加位置信息支持的方式主要有两种:
-
官方推荐 为 location.xml 提交城市的位置信息
这里直接本地改是没用的,这个 xml 文件在编译时转换为 bin 文件程序才会读
说实话我有点搞不懂他的逻辑,明明是有好几个服务器端实现的,为啥非要配置这么个文件,而且文件内容多少与机场有关(物理机场)
-
改代码
可以给他自定义数据源实现,比如添加个 weather.cma.cn 的实现
那有没有适合我等自由的平民的办法呢?答案是有的
gsettings get org.gnome.shell.weather locations
我这里会返回这么一串,可能是之前查过的数据缓存
[<(uint32 2, <('Beijing', 'ZBAA', false, [(0.69696814214530467, 2.0295270260429752)], @a(dd) [])>)>, <(uint32 2, <('Beijing', 'ZBAA', true, [(0.69696814214530467, 2.0295270260429752)], [(0.69689057971334611, 2.0313596217575696)])>)>, <(uint32 2, <('Shanghai', 'ZSSS', true, [(0.54396095602266359, 2.1194114825206833)], [(0.54493057368860898, 2.1198429802716539)])>)>, <(uint32 2, <('Ashiya Air Base', 'RJFA', false, [(0.59137572239964786, 2.2802726677305918)], @a(dd) [])>)>]
首先外面肯定是个数组,通过翻代码我们不难找到
如果把字符串美化下是这样的
<(
uint32 2,
<(
'Beijing',
'ZBAA',
false,
[
(0.69696814214530467, 2.0295270260429752)
],
@a(dd) []
)>
)>
对照上面的代码
uint32 2
表示版本,就是 2
Beijing
城市名
ZBAA
机场或航站楼编码
false
这条数据是城市 (true) 还是机场 (false)
下面这个数组表示 维度,经度
,以弧度表示,公式 角度 * (pi /180)
第二个数组可选,表示父位置(有可能是备选用),如果没有就传 @a(dd) []
比如石家庄市 桥西区 经纬度为 38.04139, 114.47861
那么就可以得到
<(uint32 2, <('Shijiazhuang', '', true, [(0.663947508, 1.998028668)], @a(dd) [])>)>
分别设置
gsettings set org.gnome.shell.weather locations "[拼接后的内容]"
gsettings set org.gnome.Weather locations "[拼接后的内容]"
这样 Gnome Weather App 里 就好了,但是 Shell 的通知栏里显示的还是有问题。
Shell 里面集成的天气服务好像有些逻辑问题,它会匹配 location.xml 中最近的地方,我这里被定位到太原去了,关闭设置 -> 隐私中的定位服务后,也就显示石家庄了。