Polybar 添加自定义脚本(以网络测速模块为例)
所学知识
- Polybar 如何添加自己的脚本来显示模块
- Polybar 如何进行鼠标左键点击切换
- Python 信号处理、一直睡眠、睡眠唤醒
- 查看当前网络信息、当前网速
Polybar 添加自己的脚本来显示模块
首先脚本要输出想输出的内容,注意要使用 os.system('echo ..')
,而不是 print('..')
。
然后 Polybar 里面有定义的模块可以显示,方式如下。
[module/my_moudle]
type = custom/script
exec = python /path/to/script.py
tail = true
click-left = kill -USR1 %pid%
format-underline = #9f78e1
要关注这个
click-left
,它就是鼠标左键事件,至于为什么用后面的命令,用于后面的切换,具体看后面。我们先去了解 Python 的一些特征。
Python 信号机制、一直睡眠、睡眠唤醒
对于显示的脚本,让它接收 sigUSR1
这个用户自定义信号会触发固定函数,方式如下。
def change_toggle(signum, action):
print('this will be trigged if kill -USR1 this_pid')
signal.signal(signal.SIGUSR1, change_toggle)
利用 threading
的 event
可实现 Python 程序一直睡眠,并且结合信号机制进行睡眠唤醒。
from threading import Event
sleep_event = Event()
def change_toggle(signum, action):
sleep_event.set()
signal.signal(signal.SIGUSR1, change_toggle)
while true:
sleep_event.wait()
可以理解为
Event()
维护一个布尔变量,主要是有四个方法: wait
、set
、clear
、is_set
。is_set(): 查看这个布尔变量是否为真
wait(xx): 睡眠 xx 秒,但是一旦那个布尔变量是真,就会直接醒来
set(), clear(): 设置这个布尔变量
Polybar 鼠标左键切换
进行切换就使用一个全局变量 toggle_flag
,根据它的真假值来进行不同的输出格式,因此切换它也就完成了切换输出内容。每次有 USR1
信号来就转换 toogle_flag
的真假。然后主程序就利用 threading.Event()
进行等待。
def change_toggle(signum, action):
global toggle_flag
toggle_flag = not toggle_flag
sleep_event.set()
signal.signal(signal.SIGUSR1, change_toggle)
while True:
sleep_event.clear()
sleep_event.wait(interval)
Polybar
的设置如下,即鼠标左键点击会发送一个 USR1
信号。
[module/my_moudle]
type = custom/script
exec = python /path/to/script.py
click-left = kill -USR1 %pid%
Linux 查看当前网速、网络信息
查看当前网络名称使用 iwgetid -r
,查看当前网络详细信息使用 iwconfig wlan0
(wlan0
是无线网卡名称,使用 ip addr
查看),其中 ESSID 表示网络名称,Quality 表示网络质量。
查看当前网络上传速度通过读取文件 /sys/class/net/wlan0/statistics/rx_bytes
查看当前网络下载速度通过读取文件 /sys/class/net/wlan0/statistics/tx_bytes
二者都是通过读取文件内容变化来获取,比如每隔 10 s 查看增加多少,除以 10 就得到每秒变化情况。