![为 Conky 发布 spotify 小部件](https://linux22.com/image/941242/%E4%B8%BA%20Conky%20%E5%8F%91%E5%B8%83%20spotify%20%E5%B0%8F%E9%83%A8%E4%BB%B6.png)
大家好,我一直在尝试将 Khiky-Merveilles (u/Khiky73) 的 REGULUS conky 主题适配到我的高分辨率显示器上(它原本是为高清显示器设计的),同时也让它与 Madh93 的Conky 的 Spotify 脚本因为默认情况下,REGULUS 使用 MPD 来处理音乐统计数据。我花了几个小时才让它工作起来(这是我第一次如此深入地使用 Conky)。现在,当我启动 Spofity 时,歌曲标题和艺术家姓名会与歌曲的封面一起显示在桌面的右下角。当我关闭 spotify 时,它就消失了。
我遇到的问题是,当 conky 在系统启动时启动时,spotify 统计数据不会显示。当我启动 spoity 时,只有“:”符号显示,没有其他内容。由于某种原因,对象中没有执行外部脚本execi
。但是,一旦我${if_running spotify}
从脚本中删除它,它就会开始正常工作,然后,一旦我${if_running spotify}
重新添加脚本并重新启动 conky,它就会按预期正常工作。我真的不知道发生了什么。文本不显示是有道理的,因为需要为文本(歌曲的标题和艺术家的名字)执行外部脚本,但为什么封面图片和 spotify 图标也没有显示,即使它们没有连接到脚本。
有谁知道是什么原因导致了这种奇怪的行为?
conky.config = {
--==============================================================================
-- 2021/10/2
-- this is for conky version 1.10 or Newer
--
-- RegSpot - Conky theme (Based on REGULUS theme)
-- authors : Khiky-Merveilles & Madh93 & Argus_Khan
-- license : Distributed under the terms of GNU GPL version 3 or later
-- notes : Created on 2048x1152 resolution.
--==============================================================================
-- Size and Position settings --
alignment = 'top_right',
gap_x = 0,
gap_y = 0,
minimum_height = 1152,
minimum_width = 900,
-- Text settings --
use_xft = true,
font = 'Roboto:light:size=9',
-- Color Settings --
default_color = 'white',
default_outline_color = 'white',
default_shade_color = 'white',
color1 = '212021',
color2 = 'FF3A70',
color3 = '0165FE',
-- Window Settings --
background = false,
border_width = 1,
draw_borders = false,
draw_graph_borders = false,
draw_outline = false,
draw_shades = false,
own_window = true,
own_window_colour = '000000',
own_window_class = 'Conky',
own_window_argb_visual = false,
own_window_type = 'desktop',
own_window_transparent = true,
own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',
stippled_borders = 0,
-- Others --
cpu_avg_samples = 2,
net_avg_samples = 2,
double_buffer = true,
out_to_console = false,
out_to_stderr = false,
extra_newline = false,
update_interval = 1,
uppercase = false,
use_spacer = 'none',
show_graph_scale = false,
show_graph_range = false,
lua_load = '~/.config/conky/Regulus/rings-v1.2.1.lua',
lua_draw_hook_pre = 'ring_stats',
}
conky.text = [[
${offset 470}${voffset 0}${color}${font Bebas Neue:size=138}${time %H}${font Bebas Neue:size=0}
${offset 470}${voffset 0}${color}${font Bebas Neue:size=138}${time %M}${font Bebas Neue:size=0}
${offset 470}${voffset 30}${color}${font Bebas Neue:size=20}${time %^A}
${offset 470}${voffset 0}${color}${font Bebas Neue:size=20}${time %d / %B / %Y}${font Bebas Neue:size=0}
# --- Weather scripts --- #
${execi 50 ~/.config/conky/Regulus/scripts/weather.sh}
${execi 50 ~/.config/conky/Regulus/scripts/weather-icon.sh white3 $(cat ~/.cache/weather.json | jq -r '.weather[0].icon')}
${offset 775}${voffset -170}${color}${font Bebas Neue:size=38}${execi 50 cat ~/.cache/weather.json | jq '.main.temp' | awk '{print int($1+0.5)}'}°C${font Bebas Neue:size=0}
${offset 700}${voffset 12}${color}${font Helvetica Neue:size=12}.............
${offset 700}${voffset 0}${color2}${font Helvetica Neue:bold:size=10}${execi 50 cat ~/.cache/weather.json | jq -r '.name'}
${offset 700}${voffset 0}${color}${font Helvetica Neue:size=12}${execi 50 cat ~/.cache/weather.json | jq -r '.weather[0].description' | sed "s|\<.|\U&|g"}${font HelveticaNeue:size=1}
${offset 700}${voffset 3}${color}${font Helvetica Neue:size=10}Wind speed : ${execi 50 (cat ~/.cache/weather.json | jq '.wind.speed')}km/h
${offset 700}${voffset 0}${color}${font Helvetica Neue:size=10}Humidity : ${execi 50 (cat ~/.cache/weather.json | jq '.main.humidity')}%
# --- Network scripts --- #
${offset 700}${voffset 40}${font Material:size=10}${font Helvetica Neue:bold:size=9}: ${execi 5 ~/.config/conky/Regulus/scripts/ssid}
${offset 700}${voffset 5}${font Helvetica Neue:size=10}Downspeed : ${downspeed wlp5s0}
${offset 700}${voffset 0}${color 1EF75E}${downspeedgraph wlp5s0 35,150 1EF75E 1EF75E}
${offset 700}${voffset 0}${color}${font Helvetica Neue:size=10}Upspeed : ${upspeed wlp5s0}
${offset 700}${voffset 0}${color FF3A70}${upspeedgraph wlp5s0 35,150 FF3A70 FF3A70}
# --- Music scripts --- #
${execi 1 cd ./scripts/spotify/ ; ./cover.sh ; cd .. ; cd ..}
${color}${alignr 13}${offset -260}${voffset 300}${font Helvetica Neue:bold:size=18}${if_running spotify}${execi 1 sh ./scripts/spotify/status.sh} :${else} ${endif}
${color2}${alignr 13}${offset -220}${voffset 5}${font Bebas Neue:size=45}${if_running spotify}${execi 1 sh ./scripts/spotify/artist.sh}${else} ${endif}${font Google Sans:bold:size=2}
${color}${alignr 13}${offset -220}${voffset 5}${font Material:size=24}${if_running spotify} ${font Helvetica Neue:size=20}${execi 1 sh ./scripts/spotify/title.sh}${else} ${endif}${font Google Sans:bold:size=2}
# --- Drawing backgrounds and Icons --- #
${image ~/.config/conky/Regulus/Box1.png -s 190x190 -p 680,20}
${image ~/.config/conky/Regulus/Box.png -s 190x190 -p 680,230}
${image ~/.config/conky/Regulus/Box.png -s 190x190 -p 680,440}
${image ~/.cache/weather-icon.png -p 690,250 -s 65x65 -f 100}
# --- Drwaing Current Playing Music HUD --- #
${image ./icons/spotify-512.png -p 635,965 -s 30x30}
${image ./current/current.jpg -p 690,940 -s 185x185 -f 5}
${if_running rhythmbox}${image ./icons/headphones-3-512.png -p 635,965 -s 30x30}${else} ${endif}
${if_running rhythmbox}${image ./icons/headphones-3-512.png -p 690,940 -s 185x185 -f 1}${else} ${endif}
]]
主题正常工作时的样子:
PS 我试图让这个主题也能与 Rhythmbox 配合使用,但我不知道如何在 Conky 中使用嵌套的 if else 语句。所以我无法让它工作。也因为没有办法将文本垂直打印到绝对位置。
答案1
这些脚本似乎都用于dbus-send
与 spotify 进程通信以检索专辑标题等。如果失败,您将得到返回的空字符串以及您观察到的效果。dbus-send
需要知道如何连接到 dbus。通常,这在环境变量中提供,DBUS_SESSION_BUS_ADDRESS
该变量设置为字符串,例如unix:path=/run/user/1000/bus
。
可能当你登录时,conky 会从不存在或尚未设置此变量的环境中启动。但是当你重新启动 conky 时,它可能会从变量有已设置。
您可以通过显示文件中的变量来测试这一点.conkyrc
,例如使用${execi 1 echo bus is $DBUS_SESSION_BUS_ADDRESS}
。一个临时的解决方法是在启动 conky 之前将变量设置为预期的典型值。
答案2
我设法修复了这个问题,结果发现我犯的错误是,我在调用 spotify 的外部脚本和图像绘制调用时使用了相对路径,错误地认为当前工作目录是存储主 conky 启动脚本的目录,但事实并非如此。conky 启动脚本是从而不是执行的,~
因此~/.config/conky/regulus/
它使相对路径无效。