Ubuntu 22上lcm-spy无法显示LCM发布消息的排查求助
检查网络多播配置
Ubuntu 22默认网络配置可能禁用了多播,而LCM默认依赖多播传输消息。执行ip link show查看网卡状态,确认MULTICAST标记已启用;若未启用,运行sudo ip link set dev <网卡名> multicast on开启。同时检查防火墙规则:执行sudo ufw allow 64500/udp(LCM默认端口为64500),或临时关闭ufw测试:sudo ufw disable,验证是否能接收消息。验证LCM版本差异
执行lcm-spy --version对比Ubuntu 18和22上的LCM版本,若版本差异较大,可能存在兼容性问题。尝试从源码编译安装与Ubuntu 18一致的LCM版本,替换apt安装的版本后再测试。检查Java环境兼容性
lcm-spy依赖Java环境,Ubuntu 22默认Java版本为OpenJDK 17,而Ubuntu 18通常为OpenJDK 8,版本差异可能导致异常。安装OpenJDK 8并切换默认版本:sudo apt install openjdk-8-jdk sudo update-alternatives --config java选择OpenJDK 8后重新运行lcm-spy。
确认LCM消息类型加载
运行lcm-spy -v( verbose模式),查看终端输出是否有消息类加载报错(如找不到类、版本不兼容)。若存在此类提示,重新编译消息类并确保classpath指向的Jar文件与当前Java版本匹配。测试基础LCM通信
用LCM自带工具排查底层通信是否正常:- 终端运行
lcm-logger记录所有LCM消息 - 另一个终端发布测试消息(可用
lcm-gen生成的工具或自定义简单发布程序) - 停止日志后查看生成的日志文件:若日志有消息,说明问题出在lcm-spy的Java/GUI层;若日志无消息,说明底层网络或LCM安装存在问题。
- 终端运行
检查LCM配置文件
查看~/.lcm/config配置文件,确认多播地址、端口与Ubuntu 18一致;若无配置文件,手动创建指定默认参数:[network] udp_multiaddr = 239.255.76.67 udp_port = 64500验证用户权限
尝试用sudo lcm-spy运行,若能正常接收消息,说明普通用户缺乏网络多播权限。可调整Java程序网络权限,或修改用户的网络组权限。
内容的提问来源于stack exchange,提问作者dk523

