Ubuntu 系统下 LCD4Linux 的安装与配置指南

random-pic-api

简介

很久以前买 R2S 的时候一起买了一个 LCD 小屏幕, 一直没用起来, 这次装了个小主机, 想着看能不能废物利用一下.

LCD4Linux 是一个小程序,它从内核和一些子系统抓取信息并将其显示在外部液晶显示器上。

下面是一些运行 LCD4Linux 的图片:

LCD4Linux 在两个不同尺寸的显示器上

20250212210620_gB8IzF5R.webp

Iomega HMNHD-CE 上 的 LCD4Linux

20250212210620_XB3aHdmZ.webp

安装 lcd4linux

1
$ sudo apt-get install lcd4linux

查看 USB 屏幕的设备名称

1
$ lsusb

将会看到有lcd2usb interface的设备出现

1
2
3
4
5
6
7
8
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 003: ID 8087:0032 Intel Corp. AX210 Bluetooth
Bus 003 Device 013: ID 0403:c630 Future Technology Devices International, Ltd lcd2usb interface
Bus 003 Device 014: ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 004 Device 002: ID 0bda:8156 Realtek Semiconductor Corp. USB 10/100/1G/2.5G LAN

如果看不到, 可以更换一根线试试, 我就是这么解决的.

这里我们可以看到 当前设备的连接位置是在:

1
Bus 003 Device 013: ID 0403:c630 Future Technology Devices International, Ltd lcd2usb interface

然后可以在 /dev/bus/usb/003/013 看到我们的 USB 屏幕,记下这个路径, 后续会在配置文件中使用到.

配置

由于安全原因(配置可能包含邮件帐户的用户名/密码),配置文件必须确保仅具有用户的权限。小组或其他人不得读写,否则 lcd4linux 拒绝工作! 因此,如果以 root 身份运行 lcd4linux, /etc/libd4linux.conf 必须是:

1
2
chmod 600 /etc/lcd4linux.conf
chown root.root /etc/lcd4linux.conf
1
2
$ cd /etc
$ sudo vi lcd4linux.conf

先来个简单的 CPU 监控显示配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Display LCD2USB {
Driver 'LCD2USB' # 指定使用LCD2USB驱动
Size '16x2' # LCD dimension: 1602
Port '`/dev/bus/usb/003/002`' # Port: /dev/usbdev3.2
}

# CPU使用率部件
Widget CPU {
class 'Text' #部件类型指定为文本
expression proc_stat::cpu('busy', 500)
prefix 'CPU:' #前缀
postfix '% |' #后缀
width 10 #部件占用字符数
precision 1
align 'L' # L R 分别表示左对齐 和右对齐
update 500 # 更新频率 500毫秒
}

Widget RAM {
class 'Text'
expression meminfo('MemTotal')/1024
prefix 'RAM:'
postfix ' MB'
width 8
precision 0
align 'R'
update 500
}

Widget IPaddress {
class 'Text' # Type: Text
expression netinfo::ipaddr('vmbr0') # eth0's ip
prefix '' # display "IP:"
width 16 # display width: 16
align 'C' # display: central
update 1000
}

Widget Time {
class 'Text'
expression strftime('%a %H:%M:%S',time())
width 16
align 'C'
update 1000
}

Layout Default {
Row1 {
Col1 'IPaddress' # Display Widget IPaddress in the first row and first column
}
Row2 {
Col1 'CPU' # Display Widget Time in the second row and first column
# Col9 'RAM'
}

}

Display 'LCD2USB'
Layout 'Default'

启动

启动 lcd4linux 前请确定配置文件 lcd4linux.conf的权限是 600. 启动命令如下, -v 表示显示启动日志,如果失败将会显示错误原因

1
2
$ pkill lcd4linux
$ lcd4linux -v

20250212210621_PfhvFnBe.webp

我的这块是 16x2 的, 显示不了多少信息, 后面看能不能换一个大点的玩玩.

详细配置解释

配文件内容分 3 个部分

屏幕配置

1
2
3
4
5
Display LCD2USB {
Driver 'LCD2USB' # 指定使用LCD2USB驱动
Size '16x2' # LCD dimension: 1602
Port '/dev/usbdev3.2' # Port: /dev/usbdev3.2
}

定义显示部件

此处可以定义多个部件,部件中的表达式可以参考 官方提供的部件列表 Plugins

常用到的有:

plugin_meminfo 内存插件

该插件提供了 /proc/meminfo 文件的接口。
meminfo(key)/proc/meminfo 并返回<key>的值
‘key’参数没有任何固定值,但作为搜索键进入/ proc / meminfo 文件。常用键是“MemTotal”或“MemFree”。执行’cat / proc / meminfo’以查看系统上可用的值。

1
2
3
4
5
6
7
8
9
Widget RAM {
class 'Text'
expression meminfo('MemTotal')/1024
postfix ' MB RAM'
width 11
precision 0
align 'R'
update 0
}

plugin_proc_stat 系统状态插件

表达式解释
proc_stat(key)/proc/stat直接取值
proc_stat(key, delay)/proc/stat取变化量
proc_stat::cpu(key, delay)/proc/stat获取 CPU 信息
proc_stat::disk(device, key, delay)/proc/stat获取硬盘信息

示例:CPU:12%

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Widget CPU {
class 'Text'
expression proc_stat::cpu('busy', 500)
prefix 'CPU:'
postfix '% |'
width 10
precision 1
align 'L'
update tick
}
Widget CPUBar {
class 'Bar'
expression proc_stat::cpu('busy', 500)
expression2 proc_stat::cpu('system', 500)
length 10
align 'L'
direction 'E'
update tack
}

uptime 启动时间插件

此插件以秒或以用户定义的格式返回当前系统的正常运行时间

表达式解释
uptime()返回系统启动的秒数
uptime(format)以用户定义格式返回时间

format 的可选格式(格式指定类似于 printf()方法)

表达式解释
%s总秒数
%S从 00-59 的秒数
%m总分钟数
%M从 00-59 的分钟数
%h总小时数
%H从 00-23 的小时数
%d总天数

例子: Run 12 days 12:32:59

1
2
3
4
5
6
7
8
Widget Uptime {
class 'Text'
expression uptime('%d days %H:%M:%S')
width 20
align 'L'
prefix 'Run '
update tick
}

这里是一部分表达式的示例,其余可以通过官方提供的部件列表 Plugins 进行查看

指定布局

通过Row 行Col 格进行布局安排, 后面的数字表示具体的行数和格数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Layout Default {
Row1 {
Col1 'MyInfo' # 从第一行第一格开始显示
}
Row2 {
Col1 'CPU' # 从第二行第1格开始显示
Col11 'MEM' # 从第二行第11格开始显示(我的设备总计20格每行)
}
Row3 {
Col1 'IPaddress'
}
Row4 {
Col1 'Uptime'
}
}

参考资料