在 conky 中显示图像

在 conky 中显示图像

我一直在努力让 conky 显示天气,我刚刚安装了它并发现雅虎停止了 conky 主题正在使用的 api url(http://weather.yahooapis.com/forecastrss?w=1103816&u=c),我尝试将网址更改为 accuweather 和 openweather 网址,但没有任何效果。我完全不明白这是如何工作的,也不知道如何让它正常工作,以下是代码:

##Weather
${image .jelly-weather-icons/conky_icons/circle2.png -s 190x190}
${texeci 1300 curl -s "http://rss.accuweather.com/rss/liveweather_rss.asp\?metric\=${METRIC}#\&locCode\=$LOCCOD" -o #~/.cache/weather.xml}
${voffset -110}${offset 425}${font ITC Avant Garde Gothic Pro:bold:size=20}${execi 1300 grep #"yweather:condition" ~/.cache/weather.xml | grep -o "temp=\"[^\"]*\"" | grep -o "\"[^\"]*\"" | #grep -o "[^\"]*"}${font ITC Avant Garde Gothic Pro:bold:size=8}${voffset -16}o${voffset 14}${font}#${color1}
${execi 1300 cp -f .weather-icons/$(grep "yweather:condition" ~/.cache/weather.xml | grep -o #"code=\"[^\"]*\"" | grep -o "\"[^\"]*\"" | grep -o "[^\"]*").png ~/.cache/weather.png}${image #~/.cache/weather.png -p 425,23 -s 35x35}
${offset 420}${voffset -105}${font ITC Avant Garde Gothic Pro:size=14} Sevilla

顺便说一句,我在互联网上没有找到可以帮助我的东西...提前谢谢:)

编辑1:这是 conky 主题在 cache/weather.xml 中保存的 api http://api.openweathermap.org/data/2.5/forecast?id=6361046&APPID=6be5e3a6e62680c28044791e8fc7b568 我正在慢慢理解它是如何运作的

编辑 2:代码现在看起来是这样的,我注意到我在试图注释整个天气部分时输错了一些 #。我只是不明白 conky 如何读取 xml(我自己不知道如何读取 xml,但我想我可以通过一些 xml 指南来解决这个问题 :P)

##Weather
${image .jelly-weather-icons/conky_icons/circle2.png -s 190x190}
${texeci 1300 curl -s "http://api.openweathermap.org/data/2.5/forecast?id=6361046&APPID=6be5e3a6e62680c28044791e8fc7b568&units=metric" -o ~/.cache/weather.xml}
${voffset -110}${offset 425}${font ITC Avant Garde Gothic Pro:bold:size=20}${execi 1300 grep "weather:description" ~/.cache/weather.xml | grep -o "temp=\"[^\"]*\"" | grep -o "\"[^\"]*\"" | grep -o "[^\"]*"}${font ITC Avant Garde Gothic Pro:bold:size=8}${voffset -16}o${voffset 14}${font}${color1}
${execi 1300 cp -f .weather-icons/$(grep "yweather:condition" ~/.cache/weather.xml | grep -o "code=\"[^\"]*\"" | grep -o "\"[^\"]*\"" | grep -o "[^\"]*").png ~/.cache/weather.png}${image ~/.cache/weather.png -p 425,23 -s 35x35}
${offset 420}${voffset -105}${font ITC Avant Garde Gothic Pro:size=14} Sevilla

Edit3: 所以我终于让它工作了,感谢@WinEunuuchs2Unix@steeldriver对于任何想要在自己的 conky 代码中使用它的人来说,代码最终看起来都是这样的:

##Weather

${voffset -80}${offset 435}${font ITC Avant Garde Gothic Pro:bold:size=20}${execi 1300 curl -s "http://api.openweathermap.org/data/2.5/forecast?id=6361046&APPID=6be5e3a6e62680c28044791e8fc7b568&units=metric" | jq -r '.list[0].main.temp' | awk '{printf("%.0f\n", $1)}'}${font ITC Avant Garde Gothic Pro:bold:size=8}${voffset -16}o${voffset 24}${font}${color1}
${execi 1300 cp -f .iconos/$(curl -s "http://api.openweathermap.org/data/2.5/forecast?id=6361046&APPID=6be5e3a6e62680c28044791e8fc7b568&units=metric" | jq -r '.list[0].weather[].icon').png ~/.cache/weather.png}${image ~/.cache/weather.png -p 425,20 -s 60x60}
${offset 420}${voffset -115}${font ITC Avant Garde Gothic Pro:bold:size=14} Sevilla

基本上,它所做的就是使用 从 openweather url 读取一个 json curl,并使用jq搜索的值.list[0].weather[].icon.list[0].main.temp至于温度,它会输出一个带有 2 位小数的值,我根据个人喜好将其剪切掉,awk '{printf("%.0f\n", $1)}'其余代码只是 conky 了解您想要它的位置和您想要它的方式。如果您想自己使用它,只需更改Sevilla为您的城市,然后更改请curl -s "...your location api url..."注意,如果您使用不同的网站作为您的 api url,则必须进行更改jq以适应新的 json 数据。另请注意,您必须创建一个包含此文件夹中所有图标的文件夹图标列表或者使用您自己的图标,但记得使用相同的命名(01d.png,02d.png,...),并且不要忘记编辑它${execi 1300 cp -f .iconos/$(curl -s "http:/...并替换.iconos/为您的文件夹的目录。

这里如果你想尝试一下 conky 主题

答案1

编辑于 2020 年 6 月 7 日

我现在在 4K 电视上安装了 conky,因此有足够的空间来扩展高度并显示天气信息。

选择支持风向箭头的等宽字体非常重要。我选择GE Inspira Mono12点,但必须恢复到Ubuntu10.5点之后:

#------------+
# Brightness |
#------------+
${color orange}${voffset 2}${hr 1}
${color1}${goto 5}Sun Rise: ${color green}${execpi 300 cat /usr/local/bin/.eyesome-sunrise} ${goto 175}${color1}Set: ${color green}${execpi 300 cat /usr/local/bin/.eyesome-sunset} ${alignr}${color1}Level: ${color green}${execpi 10 cat /sys/class/backlight/intel_backlight/brightness}
#------------+
# Weather    |
#------------+
${color orange}${voffset 2}${hr 1}
#${font GE Inspira Mono:size=12}${alignc}${color green}${execpi 300 curl wttr.in/Edmonton?T0 --silent --max-time 3}${font ubuntu:size=10.5}
${font Dejavu Sans Mono:size=12}${alignc}${color green}${execpi 300 curl wttr.in/Edmonton?T0 --silent --max-time 3}${font ubuntu:size=10.5}

现在看起来是这样的:

conky 天气.png

是的,对于 6 月 7 日下午 6 点来说,天气异常寒冷。更糟糕的是,几个小时前,所有的雨都导致 20 个街区停电!这是喜忧参半的事情,因为我必须安装 2020 年 3 月购买的 32 GB RAM 升级,但一直在拖延。系统现在更快了!

笔记:日出和日落时间是假的。我eyesome今天正在测试一个新功能,以覆盖每天自动从互联网上检索太阳时间(又称黄昏时间)。


原始答案

天气信息太多了,塞不进我的 conky 显示屏里,它已经很满了。所以我把它放在我的终端启动画面

终端启动画面.png

您可以从 conky 调用的命令行获取相同的信息:

$ curl wttr.in/Edmonton?0 --silent --max-time 3

Weather report: Edmonton

     \   /     Clear
      .-.      7..8 °C        
   ― (   ) ―   → 6 km/h       
      `-’      10 km          
     /   \     0.0 mm         

要获取您所在城市的名称,请wttr.in参阅:


在 conky 中显示图像

我从 darksky.net 保存了一张今天的天气图片,并使用以下命令在 conky 中显示它${image}

conky.png 中的天气

相关的conky命令是:

#------------+
# Brightness |
#------------+
${color orange}${voffset 2}${hr 1}
${color1}${goto 5}Rise: ${color green}${execpi 300 cat /usr/local/bin/.eyesome-sunrise} ${goto 155}${color1}Set: ${color green}${execpi 300 cat /usr/local/bin/.eyesome-sunset} ${alignr}${color1}Level: ${color green}${execpi 10 cat /sys/class/backlight/intel_backlight/brightness}

#------------+
# Image      |
#------------+
${image /home/rick/Pictures/Weather.png -p 0,1080 -s 400x120}
  • 我刚刚添加了之前的部分以供参考
  • 注意所有空白行,以使 conky 窗口更高以适合图像
  • 看:Conky 中的变量有关命令的更多详细信息${image}

答案2

我受到这个帖子的启发很大,因为我没有找到任何可用的 Conky 小部件,所以我开始学习并创建我自己的(基于此处发布的代码)。

这是一个使用 IP 地理位置识别(或猜测)您的大致位置并相应显示 5 天天气的小部件。使用大数据云和开放天气地图 API。

我希望它对你们所有人都有用。只需下载文件,将其保存到 ~/.conky 目录并执行:

conky -c ~/.conky/Weather

天气小工具文件:

conky.config = {
    use_xft = true,
    font = 'GE Inspira:size=16',
    xftalpha = 0.8,
    text_buffer_size = 2048,
    max_text_width = 0,
    override_utf8_locale = true,
    uppercase = false,
    no_buffers = true,
    short_units = true,
    format_human_readable = true,

    update_interval = 1,
    total_run_times = 0,

    own_window = true,
    own_window_transparent = false,
    own_window_type = 'desktop',
    own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',
        own_window_argb_visual = true,
        own_window_argb_value = 128,
    background = true,
    use_spacer = 'none',

    double_buffer = true,
    minimum_width = 215, minimum_height = 215,

    draw_shades = false,
    default_shade_color = '#000000',

    draw_outline = false,
    default_outline_color = '#000000',

    default_color = 'FFFFFF', 
    color0 = 'FFFFFF',
    color1 = 'FFA300',

    draw_borders = false,
    stippled_borders = 0,
    border_inner_margin = 10,
    border_outer_margin = 0,
    border_width = 1,
    draw_graph_borders = false,--no
    alignment = 'top_left',

    gap_x = 107,
    gap_y = 220,

    imlib_cache_size = 0,
};


conky.text = [[
#
#REFRESH LOCATION & WEATHER INFO CACHE
${execi 600 curl -so ~/.cache/WeatherLoc 'https://api.bigdatacloud.net/data/ip-geolocation?localityLanguage=en&key=3131602e55a644299e1372eaa28f3fe5'&& printf "https://api.openweathermap.org/data/2.5/onecall?lat=%s&lon=%s&exclude=minutely,hourly&APPID=a6f8bedf50667be2d3764422a37077d2&units=metric" $(jq -r '.location.latitude' ~/.cache/WeatherLoc) $(jq -r '.location.longitude' ~/.cache/WeatherLoc)| xargs curl -so ~/.cache/WeatherData}
#
#REFRESH ICON CACHE
${execi 600 sleep 2 && jq -r '.current.weather[0].icon' ~/.cache/WeatherData | xargs printf "http://openweathermap.org/img/wn/%[email protected]" | xargs curl -so ~/.cache/WeatherNow.png}\
${execi 600 sleep 2 && jq -r '.daily[0].weather[0].icon' ~/.cache/WeatherData | xargs printf "http://openweathermap.org/img/wn/%[email protected]" | xargs curl -so ~/.cache/Weather0.png}\
${execi 600 sleep 2 && jq -r '.daily[1].weather[0].icon' ~/.cache/WeatherData | xargs printf "http://openweathermap.org/img/wn/%[email protected]" | xargs curl -so ~/.cache/Weather1.png}\
${execi 600 sleep 2 && jq -r '.daily[2].weather[0].icon' ~/.cache/WeatherData | xargs printf "http://openweathermap.org/img/wn/%[email protected]" | xargs curl -so ~/.cache/Weather2.png}\
${execi 600 sleep 2 && jq -r '.daily[3].weather[0].icon' ~/.cache/WeatherData | xargs printf "http://openweathermap.org/img/wn/%[email protected]" | xargs curl -so ~/.cache/Weather3.png}\
${execi 600 sleep 2 && jq -r '.daily[4].weather[0].icon' ~/.cache/WeatherData | xargs printf "http://openweathermap.org/img/wn/%[email protected]" | xargs curl -so ~/.cache/Weather4.png}
#
#WEATHER NOW
${voffset -40}${color1}${execi 1 jq -r '.location.city' ~/.cache/WeatherLoc}
${color0}${execi 1 jq -r '.current.temp' ~/.cache/WeatherData |awk '{print int($1+0.5)}'}° ${image ~/.cache/WeatherNow.png -s 70x70 -p 160,0}

#WEATHER TODAY
${color1}Today${goto 100}${color0}${execi 1 jq -r '.daily[0].temp.min' ~/.cache/WeatherData |awk '{print int($1+0.5)}'}°/ ${execi 1 jq -r '.daily[0].temp.max' ~/.cache/WeatherData |awk '{print int($1+0.5)}'}°${image ~/.cache/Weather0.png -s 30x30 -p 180,83}
#
#WEATHER +1 DAY
${color1}${execi 1 jq -r '.daily[1].dt' ~/.cache/WeatherData |awk '
{print "@" $1}' |xargs date +%a --date}${goto 100}${color0}${execi 1 jq -r '.daily[1].temp.min' ~/.cache/WeatherData |awk '{print int($1+0.5)}'}°/ ${execi 1 jq -r '.daily[1].temp.max' ~/.cache/WeatherData |awk '{print int($1+0.5)}'}°${image ~/.cache/Weather1.png -s 30x30 -p 180,108}
#
#WEATHER +2 DAYS
${color1}${execi 1 jq -r '.daily[2].dt' ~/.cache/WeatherData |awk '
{print "@" $1}' |xargs date +%a --date}${goto 100}${color0}${execi 1 jq -r '.daily[2].temp.min' ~/.cache/WeatherData |awk '{print int($1+0.5)}'}°/ ${execi 1 jq -r '.daily[2].temp.max' ~/.cache/WeatherData |awk '{print int($1+0.5)}'}°${image ~/.cache/Weather2.png -s 30x30 -p 180,133}
#
#WEATHER +3 DAYS
${color1}${execi 1 jq -r '.daily[3].dt' ~/.cache/WeatherData |awk '
{print "@" $1}' |xargs date +%a --date}${goto 100}${color0}${execi 1 jq -r '.daily[3].temp.min' ~/.cache/WeatherData |awk '{print int($1+0.5)}'}°/ ${execi 1 jq -r '.daily[3].temp.max' ~/.cache/WeatherData |awk '{print int($1+0.5)}'}°${image ~/.cache/Weather3.png -s 30x30 -p 180,158}
#
#WEATHER +4 DAYS
${color1}${execi 1 jq -r '.daily[4].dt' ~/.cache/WeatherData |awk '
{print "@" $1}' |xargs date +%a --date}${goto 100}${color0}${execi 1 jq -r '.daily[4].temp.min' ~/.cache/WeatherData |awk '{print int($1+0.5)}'}°/ ${execi 1 jq -r '.daily[4].temp.max' ~/.cache/WeatherData |awk '{print int($1+0.5)}'}°${image ~/.cache/Weather3.png -s 30x30 -p 180,183}
]];

天气小部件快照如下所示:

在此处输入图片描述

答案3

免责声明:我不记得我从哪里得到这个。

我有一个小脚本weather.sh

#!/bin/sh
#AccuWeather (r) RSS weather tool for conky
#
#USAGE: weather.sh <locationcode>
#
#(c) Michael Seiler 2007

METRIC=0 #Should be 0 or 1; 0 for F, 1 for C

if [ -z $1 ]; then
    echo
    echo "USAGE: weather.sh <locationcode>"
    echo
    exit 0;
fi

curl -s http://rss.accuweather.com/rss/liveweather_rss.asp\?metric\=${METRIC}\&locCode\=$1 | perl -ne 'if (/Currently/) {chomp;/\<title\>Currently: (.*)?\<\/title\>/; print "$1"; }'

然后在 .conkyrc 中你有

${exec [location of script]/weather.sh [zip code]}

最终结果是

在此处输入图片描述

答案4

我编写了一个使用韦斯尔snap 应用程序。该应用程序根据您在终端上的位置显示天气。

$ wethr

巴拉圭亚松森:31摄氏度☀️

目前 Conky 不能很好地处理表情符号,所以我不得不使用 pangoview 将文本转换为图像。

我在 conky 上使用它

${image /tmp/weather-1000.jpg -p 95,328}

还添加此行,以启用 conky 中的图像重新加载

imlib_cache_flush_interval=1500,

以下是脚本

https://github.com/alefq/helper-scripts/blob/master/bin/weather.sh

#!/bin/bash
#
# requires wethr from snap store and pango1.0-tools
#
WFILE=/tmp/.weather-info-$UID
DEBUG=0

if [ -z $DISPLAY ]; then
    # probably running from crontab
    export DISPLAY=:0
fi

if [ $DEBUG -eq 0 ]; then
    /snap/bin/wethr > $WFILE 2>/dev/null
else 
    /snap/bin/wethr > $WFILE 
fi
pango-view --background=#ffffff  --font=onot -qo /tmp/weather-$UID.jpg $WFILE

Crontab 每 30 分钟更新一次

33 * * * * /opt/helper-scripts/bin/weather.sh

最终结果

在此处输入图片描述

相关内容