ARTICLE DETAIL

资讯详情

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

银河麒麟V10-SP1配置VNC远程桌面:TigerVNC与UKUI排障指南

银河麒麟V10-SP1配置VNC远程桌面:TigerVNC与UKUI排障指南 上个月接了个内网信创环境的活对方甩给我一台银河麒麟V10-SP1的服务器说是系统里带了图形桌面但机器在隔壁楼的机房里运维同事不想每次都跑过去接显示器敲键盘。需求很朴素用VNC远程连接这台服务器的系统桌面在自己办公电脑上看到完整的图形界面能开终端、能点菜单、能拖文件最好还能用中文输入法。听起来像是十分钟的活真动手才发现从VNC服务端选型、xstartup怎么写到防火墙放行、黑屏灰屏、输入法切不出来每一步都有坑。这篇就把我这次从头到尾的完整过程记下来包含方案选型的理由、配置文件的细节、参数取舍的计算逻辑以及我实际踩过的坑和排查思路。目标很实在你看完能照着在银河麒麟V10-SP1上把VNC服务端跑起来客户端能连上并且出了问题知道该往哪儿看而不是对着黑屏瞎猜。1. 先把方案定下来为什么最终选了VNC1.1 服务器上开图形桌面真实诉求到底是什么先别急着装包得先想清楚这台机器为什么要图形界面。很多人一听服务器开桌面就觉得不专业其实在信创办公和内网运维场景里需求往往很具体有些管理工具、配置程序只有图形客户端没有命令行版本有些测试需要跑带界面的客户端做联调还有的是因为业务软件本身是图形化的必须点着操作。这种情况下远程桌面就不是图方便而是刚需。另一个必须提前确认的点是你面对的是银河麒麟高级服务器操作系统V10 SP1还是银河麒麟桌面操作系统V10 SP1。名字像默认状态差别很大。高级服务器版如果是最小化安装系统里压根没有图形环境你直接装VNC会连上一个空壳桌面版则自带完整的UKUI桌面会话装完VNC基本就能用。我这次碰到的就是前者——机器是服务器版之前为了跑某个图形化工具装过桌面组但装得不完整缺了几个组件导致后面第一次连接时只看到一片灰色加一个终端窗口这个坑后面会详细讲。所以第一步不是装软件而是确认桌面到底装没装全。命令很简单cat /etc/os-release和cat /etc/kylin-release看系统版本echo $XDG_CURRENT_DESKTOP看当前会话类型ls /usr/share/xsessions/看系统里注册了哪些可登录的图形会话。如果/usr/share/xsessions/目录是空的那说明图形会话根本没注册后面所有的VNC配置都是白搭得先把桌面组装上。1.2 VNC、X11转发、RDP三条路各自适合什么场景远程访问Linux图形界面常见的有三条路我列个表对比一下你就知道为什么VNC在这类场景里最合适。方案原理优点缺点适用场景VNC服务端把完整桌面渲染到内存帧缓冲通过网络传像素差异会话独立、断开后程序继续跑、跨平台客户端多视频类操作卡、默认不加密需自行加固长时间挂着跑图形工具、多人各自独立桌面X11转发通过SSH把单个X程序窗口转发到本地配置简单、走SSH天然加密、只传一个窗口每个程序都要开一次、窗口多了很乱、断线即断会话临时跑一两个图形小工具RDP微软的远程桌面协议带宽效率高、体验好Linux服务端实现xrdp在UKUI上兼容性一般、偶发闪退主要面向Windows客户端、对流畅度要求高我最终选VNC的核心原因是会话持久。X11转发最要命的一点是只要网络抖一下、笔记本合盖睡眠、SSH断一次你正在跑的那个图形程序就被杀了。而VNC是把桌面跑在服务端的虚拟显示上客户端的连接只是一个显示器断开重连之后程序还在原地进度不丢。对于需要跑几小时甚至跨天的图形化任务这一点几乎是决定性的。至于RDP不是说不行xrdp在部分国产桌面环境上确实能跑但我在UKUI上试过登录后桌面偶尔会花屏或者窗口管理器崩溃排查成本明显高于VNC。而且VNC的客户端生态更广Windows、macOS、Linux甚至手机端都有成熟客户端出差用笔记本临时连一下也不折腾。所以这篇的经验全部基于VNC这条路线。2. 动手前的环境盘点三分钟摸清家底2.1 确认系统版本、桌面环境与图形组件是否齐全这一步千万别跳。我见过太多人直接yum install tigervnc-server装完启动服务客户端一连黑屏然后就陷入了漫长的瞎试。先把家底摸清能省掉百分之八十的无效排查。先看系统版本确认自己面对的是哪个SPcat /etc/kylin-release cat /etc/os-release uname -r然后是图形环境。银河麒麟V10 SP1的桌面环境是UKUI检查它装了没有rpm -qa | grep -i ukui | head -20 ls /usr/share/xsessions/如果rpm -qa一条都搜不出来说明桌面根本没装。这时候要用yum的组安装但组名不能凭记忆写必须先从系统里查出来yum grouplist | grep -i -E ukui|desktop|gui|x11输出的组名才是真实可用的。查出来之后照着名字装比如yum groupinstall -y UKUI Desktop这里有个实操经验组安装的包数量很大如果内网源不全或者网速慢很容易装到一半失败留下一个半残的桌面——有窗口管理器没输入法或者有面板没会话管理器。这种情况下yum history看下最后一次事务用yum history undo回滚重来比在残局上一个个补包靠谱得多。我这次就是栽在这第一次组安装中断过后续连接只出灰屏后来干脆yum groupremove清掉重装才彻底解决。另外提醒一句有些工具在只有Xorg没装完整的情况下也能跑但VNC依赖的是虚拟显示如果你选择的是用Xorg模块共享真实显示这种模式那还得确认显卡驱动是否支持复杂度会陡增。我强烈建议走独立的虚拟显示模式也就是后文要讲的TigerVNC默认方式跟物理显卡彻底解耦。2.2 网络与账户前提别在第一步就卡住环境确认完接着确认三件事网络可达、账户可用、时间同步。网络方面先在客户端ping一下服务器的内网IP确认通然后用telnet 服务器IP 22确认SSH端口开放。为什么先确认22因为后面我推荐的加固方案是走SSH隧道如果22都不通说明网络策略有拦截得先找网络管理员。另外要提前规划好VNC的端口VNC用的是5900加display号:1对应5901:2对应5902以此类推。先跟管理员确认内网防火墙允不允许这些端口的内部访问能省掉后面反复扯皮的时间。账户方面千万不要用root直接跑VNC会话。一方面权限过大一个误操作就是系统级的另一方面很多桌面组件在root下会拒绝启动或者出现异常因为图形会话本身是为普通用户设计的。正确做法是建一个专用的普通账户或者用现有的业务账户useradd -m -s /bin/bash vncuser passwd vncuser时间同步这事听着八竿子打不着但它真会影响VNC。VNC的认证握手对时间偏差比较敏感如果服务器和客户端时间差了太多连接可能直接被拒而且日志里只给一个含糊的authentication failure。所以顺手确认一下timedatectl status没开NTP就开一下。这些准备工作加起来不到十分钟但能把后面一堆莫名其妙的报错提前掐掉。3. 安装与配置VNC服务端以TigerVNC为主线3.1 装包选型为什么是TigerVNC银河麒麟V10的软件源里通常能找到好几套VNC实现常见的有tigervnc、vnc-serverRealVNC的老版本、以及一些第三方包。我选TigerVNC的理由有三个都是实际用下来验证过的。一是跟systemd的集成度最好。新版本的TigerVNC自带vncserver.service模板用实例化服务管理多用户多会话非常干净systemctl enable --now vncserver:1.service一条命令就搞定开机自启和启动。二是性能不错它的编码器支持Tight、ZRLE等压缩算法在内网百兆环境下调整一下色深和压缩等级操作流畅度是可以接受的。三是配置模型清晰会话参数放在~/.vnc/config里密码单独管理跟桌面会话文件解耦排障时能快速定位是哪一层出的问题。查包和装包yum provides */vncserver yum install -y tigervnc-server rpm -ql tigervnc-server | grep -E systemd|config装完之后先别急着启动把rpm -ql的输出看一眼重点确认两个路径systemd单元文件在哪通常在/lib/systemd/system/或/usr/lib/systemd/system/以及配置目录是不是/etc/tigervnc/。不同小版本的路径会有差异不要照抄网上的旧教程直接改/etc/sysconfig/vncservers那是很老版本的做法在银河麒麟V10 SP1的TigerVNC上根本不生效改了也是白改还会让你以为是自己配置错了白白浪费时间。3.2 密码、用户映射与配置文件怎么排TigerVNC新版本的配置分三层理解了这个分层结构后面出问题你能立刻判断该查哪个文件。第一层是用户到display的映射文件是/etc/tigervnc/vncserver.users。它决定哪个display号归哪个用户格式是一行一个映射vim /etc/tigervnc/vncserver.users内容形如:1vncuser这行的意思就是display:1对应端口5901由vncuser这个账户运行。注意这里是系统级的声明不是你自己随便启动一个会话后面用systemd启动vncserver:1.service时它会读这个文件然后以vncuser的身份拉起服务。这一点非常重要很多人手动vncserver启动能连上改用systemd就失败根因就是没写这个映射。第二层是用户自己的会话参数文件是~/.vnc/config。以vncuser身份登录后创建su - vncuser mkdir -p ~/.vnc vim ~/.vnc/config一个我实际在用的配置示例sessionukui geometry1920x1080 depth24 localhost alwaysshared这里逐项解释一下取舍。sessionukui告诉TigerVNC去加载/usr/share/xsessions/ukui.desktop这个会话这是让桌面完整启动的推荐做法比自己在xstartup里手写一堆exec要可靠得多因为TigerVNC会帮你把dbus、环境变量这些琐碎的东西处理好。geometry是虚拟桌面的分辨率1920x1080是个比较平衡的值太大会增加传输量太小用起来憋屈。depth24是色深24位真彩色看着舒服如果内网带宽紧张可以降到16画质会变差但速度明显提升。localhost这一项是安全关键它让VNC只监听127.0.0.1外网根本连不上必须通过SSH隧道才能访问——这是我最推荐的部署方式后面会展开。alwaysshared允许多个客户端同时连同一个会话方便交接班或者两个人一起看同一个界面。第三层是VNC自己的密码文件是~/.vnc/passwd用vncpasswd生成vncpasswd chmod 600 ~/.vnc/passwd这里有个细节值得强调VNC的密码和系统账户密码是两套东西各管各的。有人以为改了系统密码VNC就跟着变结果连不上还查半天。另外vncpasswd最多只取前8个字符超过的部分会被截断这是VNC协议的历史遗留问题不是bug。所以你的VNC密码设8位就够了设长了反而容易记混你以为输的是12位实际生效的是前8位。注意~/.vnc/passwd的权限必须是600只能所有者读写。权限过宽时TigerVNC会直接拒绝启动日志里提示密码文件权限不安全很多人卡在这一步还以为是密码错了。3.3 xstartup决定了你连上去看到什么~/.vnc/xstartup是决定连上去之后显示什么的脚本。如果你在~/.vnc/config里已经写了sessionukui那TigerVNC会用系统会话机制启动桌面xstartup可以不写或者写得很简单。但如果你用的是比较老的版本或者session这个参数不生效那就得靠xstartup自己把桌面拉起来。我遇到过session不起作用的情况最后的兜底方案是手写xstartupvim ~/.vnc/xstartup chmod x ~/.vnc/xstartup内容#!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS export XMODIFIERSimfcitx export GTK_IM_MODULEfcitx export QT_IM_MODULEfcitx [ -x /etc/X11/xinit/xinitrc ] exec /etc/X11/xinit/xinitrc exec /usr/bin/ukui-session这段脚本里每一行都有用。unset SESSION_MANAGER和unset DBUS_SESSION_BUS_ADDRESS是为了清掉从SSH登录环境带进来的变量不清的话桌面会话会跟SSH会话抢dbus典型表现就是连上去之后桌面元素加载不全或者网络管理器之类的组件起不来。三个export是给中文输入法铺路具体后面单独讲。exec /etc/X11/xinit/xinitrc是走标准启动流程最后exec /usr/bin/ukui-session是真正把UKUI桌面拉起来。chmod x这一步绝对不能省。脚本没有执行权限时VNC会话能启动、端口能监听、密码验证也能过客户端连上之后却是一片纯黑什么反应都没有。这个现象特别迷惑人因为从外面看一切正常只有日志里会有一行不起眼的提示。我第一次踩的就是这个坑对着黑屏验证了半天密码和网络最后才发现是权限问题。4. 用systemd把VNC服务管起来4.1 两种托管方式以及display号与端口的对应关系TigerVNC在systemd下有两条路走。老一点的做法是把模板单元复制出来改成具体服务比如把vncserver.service复制成/etc/systemd/system/vncserver:1.service然后手工修改里面的ExecStart和User字段。新版本直接用实例化模板systemctl start vncserver:1.service它会自动去读/etc/tigervnc/vncserver.users里的映射拿到用户不需要改单元文件。怎么判断自己该用哪种装完包之后看一眼ls /lib/systemd/system/ | grep vnc cat /lib/systemd/system/vncserver.service如果单元文件里出现了vncserver.users或者类似的引用说明是新版本直接用实例化方式如果里面写死了ExecStart/usr/bin/vncserver %i还带着一堆PIDFile路径那多半是旧版模板需要复制出来改。我这次的系统是新版直接走实例化省事很多。display号和端口的对应关系必须记牢这是排障时最常换算的东西display号监听端口systemd服务名说明:15901vncserver:1.service第一个会话通常给主用户:25902vncserver:2.service第二个会话可给另一个用户:35903vncserver:3.service以此类推算法很简单端口 5900 display号。客户端连接时写服务器IP:1或者服务器IP::5901这两种写法是等价的前者用display号后者用绝对端口号不同客户端支持情况不一样TigerVNC和RealVNC的客户端两种都认。4.2 启停、开机自启与状态确认的标准动作配置改完重载并使能服务systemctl daemon-reload systemctl enable --now vncserver:1.service systemctl status vncserver:1.servicestatus的输出要看几件事进程有没有起来、监听在哪个地址和端口、有没有报错。正常的话你会看到类似Listening on 127.0.0.1:5901这样的行如果显示的是0.0.0.0:5901而你配置里写了localhost那说明配置没生效得回去检查~/.vnc/config的拼写和位置。服务起来之后顺手确认端口确实在监听ss -lntp | grep 590这条命令比netstat好用参数也好记-l只看监听-n不做域名解析-t只看TCP-p显示进程。看到vncuser对应的进程占着5901就说明服务端这一侧基本没问题了。日志是排障的核心。两条路径都要会看journalctl -u vncserver:1.service -f tail -f ~/.vnc/*.logjournalctl记录的是systemd层面的启动过程比如进程起没起、退出码是多少~/.vnc/下面的日志记录的是会话层面的细节比如桌面加载到了哪一步、哪个组件报错了。先看journalctl确认服务本身活着再看会话日志确认桌面有没有起来这个顺序能帮你快速把问题范围缩小一半。4.3 会话冲突与残留处理VNC会话偶尔会留下残留典型场景是服务异常退出或者你手动kill了进程但锁文件没清掉。这时候再启动会报A VNC server is already running on display :1明明ps里看不到进程了它就是说在跑。原因在于X11在/tmp下留了锁文件。清理方式rm -f /tmp/.X1-lock rm -rf /tmp/.X11-unix/X1X1里的数字对应display号:1就清X1:2就清X2。删完再systemctl restart基本就能起来。这里有个经验不要用kill -9暴力杀VNC进程给了它正常退出的机会锁文件一般会自己清理干净。频繁kill -9是制造残留的主要来源。另外提一句多用户并发的资源问题。每个VNC会话本质上是一个完整的桌面环境常驻在内存里UKUI这一套下来一个空闲会话大概占几百兆到一点几G内存具体看开了多少组件。如果服务器内存本来就紧同时挂三四个桌面会话是会明显吃力的。所以别把display号当成免费资源随便开按需分配用完的会话及时停掉。5. 防火墙、安全与访问控制5.1 防火墙放行端口的标准操作银河麒麟V10默认用的多是firewalld。先确认状态systemctl status firewalld firewall-cmd --state如果是running放行VNC端口firewall-cmd --permanent --add-port5901/tcp firewall-cmd --reload firewall-cmd --list-ports--permanent和--reload这两步缺一不可只加permanent不reload规则不会生效只加运行时的规则不写permanent重启防火墙就没了。如果你像我一样在~/.vnc/config里写了localhost那其实根本不需要放行5901因为服务只监听127.0.0.1外部流量进不来放行了也没用。这恰恰是这种配置的安全优势——攻击面为零。反过来如果你确实需要内网其他机器直连那就把localhost去掉同时必须放行端口但这时候务必配合后文的访问控制手段。除了firewalld别忘了SELinuxgetenforce如果输出是EnforcingVNC有可能被策略拦掉。判断方法不是直接关SELinux而是先看审计日志ausearch -m avc -ts recent | tail -20如果有跟vnc相关的拒绝记录再考虑调整策略。临时验证可以setenforce 0跑一下确认是SELinux的问题之后再去找对应的布尔值或策略验证完记得把状态改回去。直接永久关闭SELinux是不负责任的做法属于用一个更大的安全问题去换一个小问题的解决。5.2 SSH隧道我最推荐的加固方式前面反复提到localhost加SSH隧道这里完整讲一遍。原理是把VNC流量塞进SSH的加密通道里VNC服务本身完全不对外暴露外部扫描扫不到任何VNC端口。在客户端机器上执行ssh -L 5901:127.0.0.1:5901 -N -f vncuser192.168.1.100参数含义-L做本地端口转发把本地5901映射到远端127.0.0.1:5901-N表示不需要执行远程命令纯粹做转发-f让SSH转到后台运行。执行完会让你输系统账户密码验证通过后隧道就建立了。这时候在VNC客户端里连127.0.0.1:5901或者localhost:1流量会自动经SSH到服务器再落到本地的VNC服务上。这套方案的收益很实在一是加密VNC协议本身的密码认证是弱加密的走SSH就完全不用担心被嗅探二是不用在内网防火墙上开口子网络管理员那边也好沟通三是访问控制天然清晰谁能SSH到这台机器谁就能连VNC权限模型统一。唯一的代价是多一层隧道连接时多敲一条命令。嫌麻烦可以写个shell脚本或者配置SSH的config文件起个别名一键连。5.3 账户与口令的基本加固除了隧道还有几件小事值得做。VNC密码虽然只有8位有效但别用12345678这种vncpasswd支持设置只读密码view-only如果需要给别人看界面但不希望他操作可以设一个view-only密码主密码自己留着。这个细节知道的人不多但在演示或者排障交接场景里特别有用。会话层面还可以通过~/.vnc/config限制一些行为比如加上SecurityTypesVNCAuth明确认证方式或者用MaxDisconnectionTime控制异常断开的清理策略。这些参数建议在理解了含义之后再改不要从网上抄一堆参数堆进去改多了反而容易互相冲突。6. 客户端连接与画面调优6.1 客户端怎么选连接参数怎么写客户端这块跨平台首选TigerVNC Viewer开源、免费、和TigerVNC服务端同源兼容性最好。Windows下装完是个绿色小工具输入地址就能连。RealVNC的VNC Viewer也不错界面更友好但要注意免费版对商业用途有限制企业内网用之前先确认授权。Linux桌面下直接装tigervnc包就自带vncviewer命令命令行和图形两种都能用。手机端也有几个成熟的客户端临时应急看一下界面完全够用。连接时的地址写法有三种都得知道写法含义备注127.0.0.1:1本地display 1端口5901走SSH隧道时用这个127.0.0.1::5901本地绝对端口5901双冒号等价于上一行192.168.1.100:1服务器IP加display号直连场景需放行端口我建议隧道方案统一用127.0.0.1:1这种写法直观好记。第一次连接会提示证书指纹确认一下接受即可之后就不会再问。6.2 分辨率、色深与带宽的取舍画面流畅度取决于三个变量分辨率、色深、网络带宽。三者是此消彼长的关系得根据实际网络调。内网千兆环境直接用geometry1920x1080加depth24体验基本接近本地。如果是跨机房或者带宽只有几兆的链路就得降把depth降到16分辨率降到1600x900画面会明显变糊但操作跟手。还有个技巧是客户端侧的自适应质量选项TigerVNC Viewer里有自动调节编码质量的功能网络好的时候自动提画质差了自动降不用手工来回改配置。另外别用VNC去看视频或者跑3D应用。VNC传的是像素差异画面大面积变化时代码再优化也扛不住这不是配置问题是协议本身的特性。真有这类需求得换别的方案。如果连上之后发现很卡但带宽看着还挺宽裕先别急着调参数用top在服务器上看一眼是不是桌面里某个组件在疯狂吃CPU。我遇到过一次UKUI的某个索引服务在后台狂扫磁盘把CPU占满了看起来像是VNC卡实际跟VNC一点关系没有。定位问题比调参数重要。7. 踩坑实录黑屏、灰屏、闪退与输入法7.1 常见故障速查表这部分是整篇最值钱的地方我把这次遇到的和以前踩过的坑整理成一张表出问题先对号入座。现象最可能的原因排查与处理连上后纯黑无任何反应xstartup没有执行权限chmod x ~/.vnc/xstartup后重启服务灰底加一个终端窗口桌面会话没起来只起了兜底的xterm检查sessionukui是否生效确认UKUI组件装全连接直接被拒绝服务未启动或端口未放行或监听在localhostsystemctl status、ss -lntp、检查localhost配置提示认证失败密码文件权限不对或密码被截断重新vncpasswd确认只输前8位chmod 600启动报已存在会话上次异常退出留下锁文件删/tmp/.X1-lock和/tmp/.X11-unix/X1画面卡顿明显色深过高或带宽不足降到depth16分辨率降一档连上几秒后闪退桌面组件崩溃或dbus冲突看~/.vnc/*.log末尾的报错清理环境变量中文输入法切不出来环境变量未设置在xstartup里导出fcitx三个变量7.2 中文输入法与剪贴板这两个高频痛点中文输入法的问题几乎人人都会撞上。明明服务器上装了fcitx物理登录时能打中文VNC连上去就是切不出来。原因很明确VNC会话启动时没有继承到输入法需要的环境变量。解决办法就是前面xstartup里那三行export XMODIFIERSimfcitx export GTK_IM_MODULEfcitx export QT_IM_MODULEfcitxXMODIFIERS是X11层面的输入法标识GTK和QT这两个分别管不同图形库写的程序。三个都设上才能覆盖系统里各种类型的应用。只设其中一个典型表现就是浏览器能打中文但终端里打不出来或者反过来。设完之后重启VNC服务生效注意是重启会话不是重启输入法改的是会话启动环境。剪贴板是另一个容易忽略的点。VNC默认不同步剪贴板想在本地和远端之间复制粘贴文字需要服务端有一个叫vncconfig的辅助进程在跑。在xstartup里加一行vncconfig -nowin -nowin表示不显示那个小配置窗口只在后台跑。加上之后本地复制的文字就能粘到远端远端复制的也能拿回来。这个功能用起来不起眼一旦缺了会非常影响效率尤其是需要把命令或者路径从本地文档粘到远端终端的时候。7.3 会话残留、多会话冲突与日常维护习惯最后聊聊维护。VNC跑起来之后不是一劳永逸几个习惯能让它长期稳定。第一定期看一眼会话日志的大小。~/.vnc/下的日志会随着时间增长如果某个组件一直在刷错误日志能涨到几百兆甚至把磁盘占满。做法很简单配个简单的日志清理或者装个logrotate规则别等到磁盘告警才想起来。第二会话用完就停。不是所有人都需要常驻桌面如果只是临时跑一个图形程序跑完systemctl stop vncserver:1.service停掉省内存也减少暴露面。用systemctl disable关掉开机自启需要的时候再手动起。第三显示号做规划。一台服务器上如果要跑多个用户的会话提前把display号分配好并记录在案:1给A、:2给B写进运维文档。别今天这个人用:1明天另一个人也起一个:1冲突了再互相排查纯粹是给自己找事。第四改配置之前先备份。cp /etc/tigervnc/vncserver.users /etc/tigervnc/vncserver.users.bak这种动作就一秒钟但出问题时能让你一分钟回滚而不是从零重建。我自己在实际操作中的体会是VNC这类看起来很基础的服务坑几乎都不在VNC本身而在它跟桌面环境、systemd、防火墙、SELinux这一圈的交互上。所以真出了问题别只盯着VNC的配置翻来覆去改先把服务活着没、桌面起来没、网络通没通这三件事按顺序确认一遍多半能快速定位到真正的故障点。这套流程我在这次银河麒麟V10-SP1的部署里走了一遍从最开始的黑屏折腾到后面稳定运行前后大概花了一个下午其中大部分时间都消耗在桌面组件没装全和xstartup权限这两件事上——现在这些经验写出来你照着走应该半小时就能搞定。
返回列表