本文使用conky工具实现该功能!!!
安装conky
sudo apt-get install conky
创建并写入.conkyrc文件
打开并创建.conkyrc文件
vim ~/.conkyrc
写入内容如下:
conky.config = {
-- Basic settings
update_interval = 1,
double_buffer = true,
total_run_times = 0,
-- Transparency settings
own_window = true,
own_window_type = 'desktop',
own_window_transparent = true,
own_window_argb_visual = true,
own_window_argb_value = 0,
own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',
-- Positioning
alignment = 'top_right',
gap_x = 30,
gap_y = 30,
-- Font
use_xft = true,
font = 'DejaVu Sans Mono:size=10',
use_spacer = 'right',
-- Appearance
draw_shades = false,
draw_outline = false,
draw_borders = false,
border_width = 0,
background = false,
-- GPU support
lua_load = '~/.conky/lua/nvidia.lua'
}
conky.text = [[
${color white}System Monitor${alignr}${time %H:%M}
${color grey}-----------------------------
${color orange}CPU${color grey} [${cpu cpu0}%] ${alignr}${color green}${freq_g} GHz
${cpubar 10}
${color orange}RAM${color grey} ${mem}/${memmax} ${alignr}${color green}${memperc}%
${membar 10}
${color orange}GPU${color grey} [${lua nvidia gpuutil}%] ${alignr}${color green}${lua nvidia gpufreq} MHz
${color grey}VRAM: ${lua nvidia memused} / ${lua nvidia memmax} MB
${color grey}TEMP: ${lua nvidia gputemp}°C
${color white}Commands
${color grey}-----------------------------
${color green}pj ${alignr}${color grey}Start plotjugger
${color green}cursor ${alignr}${color grey}Into cursor
${color green}filebox ${alignr}${color grey}Start filebox
${color green}into_server ${alignr}${color grey}Into ubuntu server
]]
创建文件夹,创建并打开nvidia.lua文件
mkdir -p ~/.conky/lua
vim ~/.conky/lua/nvidia.lua
写入
function conky_nvidia(what)
local handle = io.popen("nvidia-smi --query-gpu=utilization.gpu,memory.used,memory.total,temperature.gpu,clocks.current.sm --format=csv,noheader,nounits 2>/dev/null")
local result = handle:read("*a")
handle:close()
local gpuutil, memused, memmax, gputemp, gpufreq = result:match("(%d+),%s*(%d+),%s*(%d+),%s*(%d+),%s*(%d+)")
if what == "gpuutil" then return gpuutil or "N/A"
elseif what == "memused" then return memused or "N/A"
elseif what == "memmax" then return memmax or "N/A"
elseif what == "gputemp" then return gputemp or "N/A"
elseif what == "gpufreq" then return gpufreq or "N/A"
end
return "N/A"
end
function conky_draw_gpu_bar(height)
local util = tonumber(conky_nvidia("gpuutil")) or 0
local width = conky_window.width - 60 -- 动态宽度
height = tonumber(height) or 10
-- 获取绘图上下文
if conky_window == nil then return end
local cs = cairo_xlib_surface_create(conky_window.display,
conky_window.drawable,
conky_window.visual,
conky_window.width,
conky_window.height)
local cr = cairo_create(cs)
-- 计算位置(跟随GPU信息下方)
local x = 50
local y = 140 -- 根据实际布局调整
-- 绘制背景
cairo_set_source_rgba(cr, 0.3, 0.3, 0.3, 0.5)
cairo_rectangle(cr, x, y, width, height)
cairo_fill(cr)
-- 绘制进度条
local progress_width = (util / 100) * width
if util > 80 then
cairo_set_source_rgba(cr, 1, 0, 0, 0.8) -- 红色高负载
else
cairo_set_source_rgba(cr, 0, 1, 0, 0.8) -- 绿色正常
end
cairo_rectangle(cr, x, y, progress_width, height)
cairo_fill(cr)
-- 添加百分比文本
cairo_set_source_rgb(cr, 1, 1, 1)
cairo_select_font_face(cr, "DejaVu Sans Mono", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL)
cairo_set_font_size(cr, 10)
cairo_move_to(cr, x + width + 5, y + height/2 + 4)
cairo_show_text(cr, util .. "%")
-- 释放资源
cairo_destroy(cr)
cairo_surface_destroy(cs)
return ""
end
终端运行
conky
成果展示
好啦,到这里就完成了本文的所有配置,你应该能得到这样的桌面了。
![图片[1]-Ubuntu桌面可视化显示GUP、CPU、自定义等信息-九桑](https://www.jiusang.com/wp-content/uploads/2025/08/image-6.png)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容