当前位置: 首页 > news >正文

我爱发明之Linux下使用Conky在桌面显示Spotify状态及封面字符画

唉,因为没有数学常识,科研一点盼头都没有,天天干坐着看论文不知道该干什么,为了逃避现实,研究起了我们中年码农最爱的桌面DIY系列

工具

Conky 是一个很轻量级的监测程序,可以读系统信息,甚至可以调用Lua脚本来进行更复杂的信息监测,可以输出到控制台,桌面,甚至作为一个HTTP服务用来发布。右面弄了个panel之后感觉左面空荡荡的,正好之前Spotify放哪都觉得尴尬,就准备放个小窗直接在桌面看进度,也方便去切来切去

目标效果大概就是这样(左下角那一坨是封面的字符画,虽然根本看不出来是什么):
目标效果

Conky本身不支持Spotify等媒体播放器的播放状态,所以需要用Lua脚本来调用 Playerctl来监测播放的信息。所以其实除了Spotify,Playerctl所支持的VLCPlayer,RhythmBox,甚至于是浏览器播放器,都是可以监测并显示的。

本文会介绍如何在Ubuntu系统下安装并进行配置,而用于其他的Linux发行版,或者MacOS,流程大致都是类似的,因此不会详细介绍。

具体流程

1. 安装Conky

sudo apt update
sudo apt install conky-all

2. 配置Conky

Conky会提供一个默认配置,在/etc/conky/conky.conf文件内,可以用 conky -c /etc/conky/conky.conf执行看一下,执行完毕后,桌面左上角会多出来个大概这么个东西,太丑了赶快stop。
默认的Conky配置
嗯以下就是我的配置。首先创建配置文件夹,我是放在了~/.config/conky/

mkdir -p ~/.config/conky/

然后创建文件

sudo nano ~/.config/conky/my-info.conf

把以下这些复制进去:

conky.config = {own_window              = true,own_window_type         = 'dock', own_window_argb_visual  = true,own_window_argb_value   = 180,own_window_colour       = '000000', double_buffer           = true,alignment               = 'middle_right',gap_x                   = 40,gap_y                   = 0,minimum_width           = 380,minimum_height          = 300,draw_borders            = true,border_width            = 2,border_inner_margin     = 14,border_outer_margin     = 0,use_xft                 = true, -- 这边可以改字体和颜色font                    = 'JetBrains Mono:size=10',default_color           = '8b0000',default_outline_color   = '8b0000',default_shade_color     = '000000',update_interval         = 1,own_window_hints        = 'undecorated,below,sticky,skip_taskbar,skip_pager',
};conky.text = [[
${execpi 600 neofetch --ascii_distro ubuntu --color_blocks off --stdout}${goto 15}${color 8b0000}SYSTEM${color}${hr 2}
Kernel : $kernel
Uptime : $uptime
CPU    : ${cpu cpu0}%  ${cpubar 8,200}
Memory : $mem / $memmax ${membar 8,200}${goto 15}${color 8b0000}DISK${color}${hr 2}
/      : ${fs_used /} / ${fs_size /} ${fs_bar 8,200 /}${goto 15}${color 8b0000}NETWORK${color}${hr 2}
Down   : ${downspeedf enp4s0} kB/s   Up : ${upspeedf enp4s0} kB/s
TotalD : ${totaldown enp4s0}    TotalU : ${totalup enp4s0}
]];

Ctrl+O保存,Ctrl+X退出,就可以用同样的方式预览下conky结果了。执行

conky -c ~/.config/conky/my-info.conf

桌面上就会多出来实例里面右面的大框。里面文字的颜色其实是可以单独设的(代码里面{color 8b0000}的部分),但是为了一致性,就全弄成护眼暗红色了。

配置系统服务

在创建systemd创建系统服务,让这些可以在后台跑,并且可以开机启动、自动重新运行。

sudo nano ~/.config/systemd/user/conky.service

(如果之前没有这个文件夹的话要mkdir -p创建一下)
放进去:

[Unit]
Description=Conky system monitor[Service]
ExecStart=/usr/bin/conky -c %h/.config/conky/my-info.conf
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure[Install]
WantedBy=default.target

然后终端运行systemctl --user enable --now my-info.service,以后这个配置文件就会自动运行,如果想要关掉就直接systemctl --user disable my-info.service,或者stop掉。

3. 安装Playerctl

然后就是安装Playerctl,让他帮我们去获得Spotify的播放信息。

sudo apt install playerctl

4. 新的Spotify配置文件

在刚才的地方创建同样的配置文件

sudo nano ~/.config/conky/spotify.conf

复制进这些

conky.config = {own_window              = true,own_window_type         = 'dock',own_window_argb_visual  = true,own_window_argb_value   = 180,own_window_colour       = '000000',double_buffer           = true,alignment               = 'bottom_left',gap_x                   = 80,gap_y                   = 30,minimum_width           = 380,minimum_height          = 180,draw_borders            = true,border_width            = 2,border_inner_margin     = 12,use_xft                 = true,override_utf8_locale    = true,font                    = 'JetBrains Mono:size=10',default_color           = '8b0000',update_interval         = 1,own_window_hints        = 'undecorated,below,sticky,skip_taskbar,skip_pager',-- 这边把lua脚本放到外面来写,一会要在这里创建新的脚本文件lua_load                = '~/.config/conky/spotify.lua',
};conky.text = [[
${if_running spotify}
${lua status_icon} ${execi 2 playerctl -p spotify metadata artist} - ${execi 2 playerctl -p spotify metadata title}
Album  : ${execi 5 playerctl -p spotify metadata album}${lua progress_bar}${else}
${goto 15}Spotify is not running…
${endif}
]];

然后创建Lua脚本,获取当前进度以及播放状态:

sudo nano ~/.config/conky/spotify.lua

放进去这些

local function cmd(cmdline)local h = io.popen(cmdline)if not h then return "" endlocal out = h:read("*all")h:close()return (out or ""):gsub("^%s+",""):gsub("%s+$","")
endfunction conky_status_icon() -- 检测当前播放状态local st = cmd("playerctl -p spotify status 2>/dev/null")if     st == "Playing" then  return "▶"elseif st == "Paused" then return "⏸"else return "■"end
endfunction conky_progress_bar()-- 可自行修改的常量local BAR_LEN = 30         -- 字符宽度-- 当前播放位置local pos_str = cmd("playerctl -p spotify position 2>/dev/null")if pos_str == "" or pos_str == "No players found" thenreturn "No track"endlocal pos = tonumber(pos_str)if not pos thenreturn "No track"endpos = math.floor(pos + 0.5)-- 总时长local raw_len_str = cmd("playerctl -p spotify metadata mpris:length 2>/dev/null")if raw_len_str == "" or raw_len_str == "No players found" thenreturn "No track"endlocal raw_len = tonumber(raw_len_str)if not raw_len or raw_len == 0 thenreturn "No track"endlocal tot_s = math.floor(raw_len / 1000000 + 0.5)  -- 总时长 和 当前播放进度 单位不一样,差1e6,要手动转一下-- 百分比 & 进度条local pct = pos / tot_sif pct > 1 then pct = 1 endif pct < 0 then pct = 0 endlocal filled = math.floor(pct * BAR_LEN + 0.5)if filled > BAR_LEN then filled = BAR_LEN endif filled < 0 then filled = 0 endlocal bar_fg = string.rep("━", filled) -- 表示进度条已播放部分的符号,可自行更改local bar_bg = string.rep("─", BAR_LEN - filled) -- 未播放的部分local cM, cS = math.floor(pos / 60), pos % 60local tM, tS = math.floor(tot_s / 60), tot_s % 60-- 返回进度条和时间return string.format("%s%s  %02d:%02d / %02d:%02d",bar_fg, bar_bg, cM, cS, tM, tS)
end

conky -c ~/.config/conky/spotify.conf检查一下,没问题的话在创建一个系统服务就ok了

sudo nano ~/.config/systemd/user/spotify.service

再使用systemctl --user enable --now spotify.service 激活服务
放进去:

[Unit]
Description=Spotify[Service]
ExecStart=/usr/bin/conky -c %h/.config/conky/spotify.conf
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure[Install]
WantedBy=default.target

5. 关于字符画封面

自己加了个字符画的封面,不过效果其实不怎么样。主要就是Playerctl把封面读下来之后再用Chafa转换一下。

首先就是安装chafa

sudo apt install chafa

然后再写个shell脚本来把Playerctl和chafa接在一起

#!/usr/bin/env bash
set -euo pipefailCACHE="$HOME/.cache/conky_spotify_cover.txt"
COVER="$HOME/.cache/conky_cover.jpg"URL=$(playerctl -p spotify metadata mpris:artUrl 2>/dev/null | sed 's#^open.spotify.com#https://i.scdn.co#') # 拿封面的urlif [[ -z "$URL" ]]; thenecho "" > "$CACHE"exit 0
fi# 之后封面更换才处理
if ! grep -q "$URL" "$CACHE" 2>/dev/null ; thencurl -sL "$URL" -o "$COVER"
{# echo "$URL"chafa -s 30x15 \--symbols solid,block \--fill solid \"$COVER" | \sed -r 's/\x1B\[[0-9;?]*[A-Za-z]//g'\> "$CACHE"#转成35*15字符画,因为chafa输出的带颜色,会有颜色的标签,用正则表达式把他们去一下
}
fi

然后还要改一下Lua脚本(spotify.conf)
最下面改成

${lua progress_bar}
# 以下这两行是新加进来的,执行封面缓存脚本,每 20 秒刷新一次
${execi 20 ~/.config/conky/covercache.sh}
${exec cat ~/.cache/conky_spotify_cover.txt} 
${else}
${goto 15}Spotify is not running…
${endif}
]];
http://www.dtcms.com/a/320173.html

相关文章:

  • 无损音乐下载器!(电脑)绿色免费,无限下载,无损音质
  • 是否将标签页tag信息存储在Redux store中还是仅存储在hook的state中
  • AI题解5
  • 什么是0.5米分辨率卫星影像数据?
  • 一文学会c++继承 组合
  • [优选算法专题一双指针——两数之和](双指针和哈希表)
  • 解决GitHub push失败-Failed to connect to github.com port 443: Timed out
  • 亚马逊卖家反馈机制变革:纯星级评级时代的合规挑战与运营重构
  • SOMGAN:用自组织映射改善GAN的模式探索能力
  • 自然语言处理×第四卷:文本特征与数据——她开始准备:每一次输入,都是为了更像你地说话
  • python selenium环境安装
  • Python自动化测试selenium指定截图文件名方法
  • MySQL 备份利器 Xtrabackup 全解析:从部署到恢复的实战指南
  • 视觉语言模型的空间推理缺陷——AI 在医学扫描中难以区分左右
  • 《CogAgent: A Visual Language Model for GUI Agents》论文精读笔记
  • Vue 3 入门教程 9 - 表单处理
  • 8、Redis的HyperLogLog、事务Multi、管道Pipeline,以及Redis7.0特性
  • DoubleTrouble靶机
  • 【R语言】重新绘制高清MaxEnt的单因素响应曲线图像
  • 最佳左前缀法则(Optimal Left-Prefix Rule)
  • 【Dijkstra】 Shortest Routes I
  • 5种将Android联系人传输到电脑的方法
  • 《C语言》函数练习题--4
  • Debain12 api方式部署redis服务
  • 【高等数学】第八章 向量代数与空间解析几何——第二节 数量积 向量积 混合积
  • 耐压击穿测试在不同行业中的具体应用有哪些差异?
  • Clock斗篷技术:助力跨境电商营销推广的智慧策略
  • 当文档包含表格时,如何结合大模型和OCR提取数据?
  • C语言指针:补充
  • Day 34:GPU训练与类的call方法