ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【银河麒麟】控制面板无法打开,点击无反应

【银河麒麟】控制面板无法打开,点击无反应 【问题描述】银河麒麟服务器操作系统点击控制面板无反应无法正常弹出【排查思路】1、查看控制面板的软件包是否正常安装从返回结果可知控制面板组件已安装未被卸载# rpm -qa | grep control2、打开两个终端第一个终端手动执行kylin-control-center查看报错打印了很多东西下图中的下半部分从couldnt connect to proxy开始是和正常机器对比不一样的报错报错解析D-Bus 尝试通过StartServiceByName(org.freedesktop.UPower)启动 UPower 服务等待超时后失败控制面板因等待该服务而卡在初始化阶段→窗口未创建同时另一个终端在执行kylin-control-center之前输入tail -f /var/log/messages以实时查看执行kylin-control-center后新增报错信息新增日志如下下图是正常机器上tail -f /var/log/messages的结果两者对比故障系统上有关于usb和upower的打印而正常机器没有大概信息是内核发现一个低速设备但是未能正常设置upower在尝试重启但是还未成功结合直接执行kylin-control-center的报错信息推测是upower服务启动超时导致控制面板调用电源管理服务失败而退出下图为正常系统上执行systemctl restart upower重启电源管理服务时的日志journalctl -u upowerupower服务起来后会有Started Daemon for power management.的打印3、systemctl status upower查看upower的状态,发现确实没有起来但是没看到有用的报错信息4、systemctl cat upower查看upower电源管理服务的拉起命令5、执行/usr/libexec/upowerd尝试手动拉起upwer服务执行后一直卡住6、通过/usr/libexec/upowerd --verbose可以看到upower的启动流程和卡住的点卡住的报错如下registering subsystem:usb Failed to coldplug /sys/devices/pci......../usbX.这里意思是upower启动时在遍历usb设备信息时被阻塞7、dmesg | grep -i usb查看内核日志发现有大量usb设备描述符读取失败以及内核重新检测的报错大致内容如下usb 5-1.3.6: device descriptor read/64error -32 usb 5-1.3.6: new low-speed usb device number 不同的数字 using xhci_hcd简单来说设备 5-1.3.6 或者连接在该端口上的设备链处于一种极不稳定的物理状态。系统不断尝试把它识别为“低速设备”但每次分配一个设备号后连接又立刻断开或出错导致系统不断重复“检测 - 分配编号 - 失败 - 重新检测”的死循环。8、ls /sys/bus/usb/devices/也没有找到5-1.3.6的设备9、后来发现是现场接入的远传usb设备有故障其插入服务器后引发 USB 总线频繁通信错误Error -32进而使得电源管理服务 upower 在扫描设备时因无法获取有效数据而陷入阻塞和超时最终导致控制面板无响应。拔掉该设备upower服务恢复正常使用直连鼠标打开控制面板没问题。【知识详解】 一、角色定位组件类型职责kylin-control-center控制面板图形用户界面GUI应用提供系统设置入口如网络、显示、电源、用户账户等UPowerupower后台系统守护进程daemon管理电池、AC 电源、设备电源状态提供标准 D-Bus 接口✅ 简单说kylin-control-center是“前台服务员”UPower是“后台电力工程师”。当你点击“电源设置”时前台会去问后台“现在电量多少能不能合盖休眠” 二、它们如何交互1.通过 D-Bus 通信UPower启动后在系统总线system bus上注册服务名org.freedesktop.UPower可以通过busctl list | grep -i upower查看是否注册成功下图是正常情况如果输入该命令没有返回说明upower服务没有在系统总线上注册成功上面的案例 就是这样的情况因为upower服务无法启动也无法完成D-bus注册因此使用busctl list | grep -i upower没有返回kylin-control-center在启动时尤其是打开“电源”模块时会创建一个D-Bus Proxy 对象指向该服务调用方法如EnumerateDevices()→ 获取所有电源设备电池、ACGetDisplayDevice()→ 获取主电池监听DeviceChanged信号 → 实时更新电量
返回列表