技術者になりたい何か

技術者になりたい何かの覚書的な何かです

conkyでCPUのコアごとのクロックを表示する

conkyとは

デスクトップに常に表示できるシステムモニター。

とはいえ単純にシステムモニタだけでなく、メディアと連動させたり天気予報やRSSフィード、メールなどと連動もできるすごい高機能なやつ。

wiki.archlinux.jp

設定は~/.conkyrcに記述するんだけど、かなりめんどいのでなにかベースをいじっていくのがよさげ。

 

conkyのCPUクロック表示をコアごとにしたい

僕が使ってるconkyは10年位前に設定ファイル作って、なにか変更するたびにちょいちょい設定ファイル書き換えたりして使ってきた盆栽のようなやつなのですが、CPUのクロック表示がコアごとになってなかったのです。

そもそも最初に設定作ったときはAthlon 64 x2だったので、クロック変動はCPU全体だったのですね。その後いろいろ構成変えたときに設定ファイルはいじったものの、どうやらコアごとのクロックは拾ってくれてませんでした。

 

これを解決。

askubuntu.com

もとの記述

 

Core1:$alignr ${cpu cpu1}%@${freq_g cpu1}GHz ${color #4B625A}${cpubar cpu1 7,76} ${color black}
Core2:$alignr ${cpu cpu2}%@${freq_g cpu2}GHz ${color #4B625A}${cpubar cpu2 7,76} ${color black}
Core3:$alignr ${cpu cpu3}%@${freq_g cpu3}GHz ${color #4B625A}${cpubar cpu3 7,76} ${color black}
Core4:$alignr ${cpu cpu4}%@${freq_g cp43}GHz ${color #4B625A}${cpubar cpu4 7,76} ${color black}
Core5:$alignr ${cpu cpu5}%@${freq_g cpu5}GHz ${color #4B625A}${cpubar cpu5 7,76} ${color black}
Core6:$alignr ${cpu cpu6}%@${freq_g cpu6}GHz ${color #4B625A}${cpubar cpu6 7,76} ${color black}
Core7:$alignr ${cpu cpu7}%@${freq_g cpu7}GHz ${color #4B625A}${cpubar cpu7 7,76} ${color black}
Core8:$alignr ${cpu cpu8}%@${freq_g cpu8}GHz ${color #4B625A}${cpubar cpu8 7,76} ${color black}

 

変更後

Core1:$alignr ${cpu cpu1}% @ ${exec awk '/cpu MHz/{i++}i==1{printf "%.f",$4; exit}' /proc/cpuinfo}MHz ${color #4B625A}${cpubar cpu1 7,76} ${color black}
Core2:$alignr ${cpu cpu2}% @ ${exec awk '/cpu MHz/{i++}i==2{printf "%.f",$4; exit}' /proc/cpuinfo}MHz ${color #4B625A}${cpubar cpu2 7,76} ${color black}
Core3:$alignr ${cpu cpu3}% @ ${exec awk '/cpu MHz/{i++}i==3{printf "%.f",$4; exit}' /proc/cpuinfo}MHz ${color #4B625A}${cpubar cpu3 7,76} ${color black}
Core4:$alignr ${cpu cpu4}% @ ${exec awk '/cpu MHz/{i++}i==4{printf "%.f",$4; exit}' /proc/cpuinfo}MHz ${color #4B625A}${cpubar cpu4 7,76} ${color black}
Core5:$alignr ${cpu cpu5}% @ ${exec awk '/cpu MHz/{i++}i==5{printf "%.f",$4; exit}' /proc/cpuinfo}MHz ${color #4B625A}${cpubar cpu5 7,76} ${color black}
Core6:$alignr ${cpu cpu6}% @ ${exec awk '/cpu MHz/{i++}i==6{printf "%.f",$4; exit}' /proc/cpuinfo}MHz ${color #4B625A}${cpubar cpu6 7,76} ${color black}
Core7:$alignr ${cpu cpu7}% @ ${exec awk '/cpu MHz/{i++}i==7{printf "%.f",$4; exit}' /proc/cpuinfo}MHz ${color #4B625A}${cpubar cpu7 7,76} ${color black}
Core8:$alignr ${cpu cpu8}% @ ${exec awk '/cpu MHz/{i++}i==8{printf "%.f",$4; exit}' /proc/cpuinfo}MHz ${color #4B625A}${cpubar cpu8 7,76} ${color black}

 

これでコアごとのクロック表示(Mhz)が可能に。

 

仕組み

仕組みは簡単で、/proc/cpuinfoからcpu Mhzの行を取得して整形しているだけですね。

 

[tmin@tmin_Arch ~]$ cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 23
model : 1
model name : AMD Ryzen 5 1500X Quad-Core Processor
stepping : 1
microcode : 0x8001137
cpu MHz : 2868.184
cache size : 512 KB
physical id : 0
siblings : 8
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb hw_pstate sme ssbd sev ibpb vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 xsaves clzero irperf xsaveerptr arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif overflow_recov succor smca
bugs : sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass
bogomips : 6988.16
TLB size : 2560 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 43 bits physical, 48 bits virtual
power management: ts ttp tm hwpstate eff_freq_ro [13] [14]
~~以下略〜〜

 

ちなみにlua構文

いつの間にかconkyのバージョンが変わってlua構文になっていました。

自力で書き直そうとしたけどめんどくさかったので、スクリプト使いました。

github.com

Usage: convert.lua old_conkyrc [new_conkyrc]

とあるように、もとの.conkyrcをスクリプトに読ませればおk。

 

Sponsored Link