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

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

  1. HomeLab
  2. 2025.02.12
  3. 7 min read

简介

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

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

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

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

20250212210620_gB8IzF5R.webp

Iomega HMNHD-CE 上 的 LCD4Linux

20250212210620_XB3aHdmZ.webp

安装 lcd4linux

$ sudo apt-get install lcd4linux

查看 USB 屏幕的设备名称

$ lsusb

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

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

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

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

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 必须是:

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

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

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 表示显示启动日志,如果失败将会显示错误原因

$ pkill lcd4linux
$ lcd4linux -v

20250212210621_PfhvFnBe.webp

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

详细配置解释

配文件内容分 3 个部分

屏幕配置

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’以查看系统上可用的值。

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%

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

Widget Uptime {
    class 'Text'
    expression uptime('%d days %H:%M:%S')
    width 20
    align 'L'
    prefix 'Run '
    update tick
}

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

指定布局

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

Layout Default {
    Row1 {
      Col1 'MyInfo' # 从第一行第一格开始显示
    }
   Row2 {
      Col1 'CPU' # 从第二行第1格开始显示
      Col11 'MEM' # 从第二行第11格开始显示(我的设备总计20格每行)
   }
   Row3 {
      Col1 'IPaddress'
   }
   Row4 {
      Col1 'Uptime'
   }
}

参考资料

Homelab 日志与监控 学习笔记