当前位置: 首页 > news >正文

OpenStack-飞腾arm上vnc连接无画面~快捷键解决

这确实是一个比较“冷门”但逻辑清晰的现象。你能通过 Ctrl + Alt + F1 恢复画面,说明 OpenStack 的 VNC 通道、网络和代理服务全都是正常的。

问题的核心在于 飞腾(ARM64)架构下 Linux 内核对“虚拟显示器”的输出策略 导致的。

为什么按了 Ctrl + Alt + F1 就会好?
TTY 激活机制: 许多针对 ARM 优化的 Linux 镜像在启动时,内核会将默认输出挂载到串口(Serial Console,即 ttyAMA0)或者特定的虚拟终端上。当你第一次打开 VNC 时,显示器(图形界面)可能正处于“休眠”或“未分配”状态,屏幕上显示 "Display output is not active"。

强制重绘(Redraw): 按下 Ctrl + Alt + F1 强制 Linux 内核切换虚拟终端。这个动作会触发 QEMU 的显卡驱动重新进行一次 帧缓冲(Framebuffer)初始化。既然你之前按回车有数据波动,说明指令传进去了,只是系统没“画”出来,切换 TTY 相当于手动点亮了显示器。

显卡驱动的“懒加载”: 在飞腾环境下,某些显卡驱动(如 virtio-gpu)在没有检测到物理显示器交互时,可能不会主动向 VNC 发送首个画面帧。

如何永久解决?(不用每次都按快捷键)
既然你已经确认了手动切换能行,可以通过以下优化让它自动“点亮”:

方法 A:修改镜像启动参数(推荐)
通过 SSH 登录虚拟机,修改 /etc/default/grub:

找到 GRUB_CMDLINE_LINUX。

添加或修改:console=tty0(确保它是第一个,或者至少存在)。

关键点:确保没有 nomodeset 这种禁用模式设置的参数。

更新并重启:sudo update-grub。

方法 B:修改 Nova 显卡配置
在计算节点的 /etc/nova/nova.conf 中,尝试将显卡类型固定为 virtio(它是目前 ARM64 下兼容性最好的):

Ini, TOML

[libvirt]

设置默认显卡模型

video_model = virtio
然后对镜像执行:

Bash

openstack image set --property hw_video_model=virtio <镜像ID>
方法 C:禁用屏幕保护/黑屏
如果是因为虚拟机系统内部自动关屏导致的,进入系统后执行:

Bash

禁用控制台自动关闭显示器

setterm -blank 0 -powersave off -cursor on
总结
你搭建的 OpenStack 本身没问题,这是 ARM 架构镜像与 QEMU 虚拟显卡之间的通信默认不够“主动” 造成的。

顺便问一下: 您现在的镜像里面是带图形界面(GUI)的 Ubuntu/Kylin,还是纯命令行模式?如果是纯命令行,建议直接在镜像里把 tty0 设为默认控制台。

http://www.jsqmd.com/news/125665/

相关文章:

  • 电源噪声导致STLink识别失败?电源完整性深度解析
  • 在Buildroot中集成libwebkit2gtk-4.1-0安装步骤
  • Oracle调优知识
  • 项目开发中常用的Vivado软件调试技巧(一)
  • 超详细版:51单片机连接LCD1602只亮无显示解决方案
  • 基于python旅游景点推荐系统 协同过滤推荐算法 数据分析+可视化 Django框架 数据仓库 Hadoop saprk(建议收藏)✅
  • PCAN多通道同步通信的Windows平台解决方案
  • 零基础掌握数据库触发器在日志审计中的用途
  • 10个AI写作工具,专科生轻松搞定论文格式与内容!
  • ESP32 Arduino环境搭建:Soft-AP配置完整示例
  • 使用HID进行固件升级(DFU模拟):创新方案实战
  • 每日反思(2025年12月22日)
  • 基于python旅游景点推荐系统 大数据技术 旅游数据分析+可视化 Django框架 scrapy爬虫 vue前端框架 源码+文档
  • GPU集群上的并行计算:AI项目应用详解
  • Multisim安装兼容性分析:Win10 vs Win11深度剖析
  • ModbusSlave使用教程:小白指南之串口通信设置
  • 102302106陈昭颖食鲜配智厨:数据采集项目实践总结
  • 图解说明Keil5在工业控制系统的安装流程
  • 一文说清上位机在Modbus协议中的角色与作用
  • 深入理解 Java 获取 Class 对象的四种方式及类加载机制
  • Arduino IDE设置中文的通俗解释与步骤
  • AUTOSAR网络管理错误处理机制的配置实践详解
  • 深度剖析ES6语法:Iterator遍历器工作原理
  • Flutter 实现一个容器内部元素可平移、缩放和旋转等功能(七)
  • MySQL死锁排查指南
  • 新手必看:Multisim14.0虚拟电源设置通俗解释
  • 使用libiconv-win-build在Windows平台下编译libiconv
  • pycharm全项目搜索ctrl+shift+F失灵
  • Arduino IDE语言选项修改深度剖析步骤
  • 树莓派5安装ROS2配置步骤完整示例