
前几天给一台测试用的服务器装RedHat 7.6系统装完顺利进到了命令行结果发现整台机器只有黑底白字根本没有桌面环境。这应该是很多运维朋友都踩过同一个坑RHEL 7.6默认采用最小化安装默认是不装图形界面的。而后续不管是给开发同事交付环境还是跑一些需要可视化界面的业务软件都要先把桌面补上。这篇文章我就把RedHat 7.6系统图形界面安装的完整流程写一遍从判断当前环境、准备YUM源到实际执行安装、配置远程桌面再到常见坑的排查尽量做到拿来就能用。不管是给虚拟机装RHEL 7.6还是给物理机做定制化交付这套流程都适用。1. 装图形界面前的三种场景与思路选择很多人一上来就直接敲yum groupinstall结果不是找不到包组就是网络源没配好导致依赖下载失败。其实装图形界面这件事第一步不是执行命令而是先搞清楚自己处在哪种部署场景里不同场景下的操作路径完全不一样。1.1 先确认当前系统是不是真的没有GUI有些系统虽然装的时候选了“最小化安装”但可能因为模板镜像里自带了一部分图形组件界面不一定就完全没有。判断一个RHEL 7.6系统当前到底有没有启用图形接口最快的方式就是查看默认的systemd目标systemctl get-default如果输出是multi-user.target说明默认进入纯命令行模式如果输出是graphical.target那说明系统本身就带图形界面不需要再折腾。还有一种情况是当前默认目标是multi-user但图形组件已经装了只是没启用这种情况可以直接跳到“切换启动级别”那一步。再配合查看包组情况yum grouplist | grep -i gui yum grouplist | grep -i desktop如果能看到“GNOME Desktop”“Server with GUI”之类的包组并且前面没有显示“Installed”说明桌面组件还没装上。用这两条命令基本上就能对系统现状心里有数了。1.2 三条安装路径横向对比RHEL 7.6图形界面安装实际上有三种路径。把这三条路径放在一起对比你会更容易理解为什么下面的正式操作要那样做。安装路径触发时机适用场景缺点安装系统时勾选“Server with GUI”系统安装阶段全新交付、机器数量少如果已经装完系统就走不通了最小化安装后yum补装系统已装完进入命令行绝大多数存量机器依赖下载耗时较长离线环境下用ISO做本地源再补装无法访问外网的内网环境政企内网、安全区需要准备完整ISO镜像实际工作中遇到最多的就是第二种系统早在几个月前就装好了一直跑着命令行服务现在突然说需要图形界面。你总不能把机器重装一遍吧所以下面的篇幅主要围绕“在已安装好最小化RHEL 7.6的基础上通过YUM补装图形界面”来展开。1.3 装GUI之后会影响系统性能吗这是我被问得最多的问题之一。坦白说GNOME桌面环境跑起来会占用不少内存。RHEL 7.6的GNOME 3.28完整版在干净启动的情况下大概会占用300到500MB内存如果你还开一些图形化的管理工具内存占用会更高。所以如果机器内存只有1GB或者更少建议升级到至少2GB再安装图形界面否则桌面即使装上了操作起来也会卡得让人崩溃。另外装了图形界面后系统的启动时间会变长默认开放的端口和系统进程也会增加。如果你的服务器定位是“生产环境跑数据库”那我还是建议保持最小化安装图形界面能不装就不装但如果是开发测试机、交付演示机装一下影响不大反而能提高使用效率。2. 最重要的前置工作YUM源准备图形界面不是一个小软件它是一个包含大量X11组件、GNOME桌面程序、系统工具和字体的软件包集合。要顺利装上YUM源是第一关。很多人在RHEL 7.6上执行yum groupinstall报错或者提示找不到匹配的包组八成就是源有问题。RHEL原生的yum源需要订阅才能在官方仓库下载而我们手上大部分是非订阅环境。这时候就需要自己动手配一个能用的源。2.1 在线环境下替换可用源如果你的机器能访问外网最简单的方式就是使用社区镜像站提供的CentOS 7仓库。虽然RHEL和CentOS的版本号体系不完全一致但RHEL 7.6可以正常使用CentOS 7的软件仓库这是业内很常见的做法历次实测下来依赖兼容性都OK。在/etc/yum.repos.d/目录下新建一个repo文件例如centos7.repo写入以下内容[base] nameCentOS-7 - Base baseurlhttps://mirrors.aliyun.com/centos/7/os/x86_64/ enabled1 gpgcheck0 [extras] nameCentOS-7 - Extras baseurlhttps://mirrors.aliyun.com/centos/7/extras/x86_64/ enabled1 gpgcheck0 [updates] nameCentOS-7 - Updates baseurlhttps://mirrors.aliyun.com/centos/7/updates/x86_64/ enabled1 gpgcheck0写完之后先清理缓存再构建新缓存yum clean all yum makecachegpgcheck0是为了避免导入GPG key时报错在内网和测试环境里用这个配置问题不大。如果你的环境对安全要求很高可以保留gpgcheck1并且导入对应key但操作上会多一些步骤。注意CentOS 7虽然已经停止官方维护但镜像仓库目前仍是可用的。实际生产中如果卡得很严建议还是先确认公司的内网源是否可用能用内网源当然优先内网源。2.2 离线环境用ISO做本地源很多内网机器是物理隔离的外网根本访问不了。这种情况下最省事的方案就是用RedHat 7.6的完整ISO镜像搭本地源。把ISO文件上传到服务器或者直接放在光驱里然后执行挂载mkdir -p /mnt/cdrom mount -o loop /path/to/rhel-server-7.6-x86_64-dvd.iso /mnt/cdrom如果你是用虚拟机挂载ISO通常直接mount /dev/cdrom /mnt/cdrom即可。挂载好了之后在/etc/yum.repos.d/下新建local.repo[local-media] nameLocal YUM Repo baseurlfile:///mnt/cdrom enabled1 gpgcheck0这里重点提醒一句baseurl一定要写file://协议后面跟挂载点目录。有人会写成/mnt/cdrom这种路径yum是认不出来的。配好之后同样执行yum clean all yum makecache。用本地源安装图形界面的最大好处是速度快因为不经过网络下载完全依赖光盘里的包。缺点也很明显ISO里的软件包版本固定想顺便装一些ISO里没有的软件还得另想办法。2.3 源配置完成后如何验证源到底有没有配好不要凭感觉用命令验证一下yum repolist如果看到repo id和repo name下列出了仓库并且“status”列中包数量不是0说明源已经可用。比如本地源通常会显示6000多个包在线源可能显示10000多个包这都正常。验证通过之后还要专门检查一下包组是否可见yum group list重点看输出里有没有“Available Environment Groups”这一项下面有没有“Server with GUI”或者“GNOME Desktop”。如果能看到说明源工作正常可以进入安装环节了。3. 图形界面安装实操一步步从命令行到桌面前面的准备工作做完真正安装反而很简单。但简单归简单有两个细节我还是要啰嗦一下一是选对包组名二是给长任务预留合理的等待心理预期。否则中间一旦断掉或者装错组件返回去排错的时间还不如一次装对。3.1 用yum groupinstall安装图形组件在RHEL 7.6上最直接的包组名是“Server with GUI”。执行下面这条命令yum groupinstall Server with GUI -y这个包组会安装GNOME桌面、图形管理工具、浏览器等一堆组件属于“服务器场景下带图形界面”的推荐组合。如果你更希望得到一个相对纯粹的桌面环境不想带太多服务器组件也可以选择yum groupinstall GNOME Desktop -y两种方式都可以把图形界面装起来。我个人在日常操作时更倾向于第一种因为它涵盖的内容更全面后续少一些缺包的麻烦。如果安装过程中提示找不到组先回到第二章确认源和包组名称。语言不同或者源版本不匹配可能导致包组名称显示为其他名字例如个别环境里会显示成“带图形服务器的GNOME”。遇到这种情况用yum group list | grep -i desktop重新确认一下准确名称即可。整个安装过程会下载几百MB到1GB左右的软件包具体取决于网络速度快则几分钟慢则二三十分钟。建议在终端用screen或者nohup方式跑避免远程连接一闪断导致安装中断。3.2 切换启动级别并重启验证包装好之后桌面组件是有了但系统默认目标还是multi-user.target。如果不改配置重启后依然会进命令行等于白装了。执行下面两条命令systemctl set-default graphical.target systemctl get-default第一条设置默认图形目标第二条用于确认如果输出graphical.target就说明设置成功了。这一步是很多教程容易遗漏的切记别跳过去。接着重启系统reboot重启后如果顺利你会看到登录界面输入用户名密码就能进入GNOME桌面。如果在虚拟机里卡在某个黑屏或者花屏状态先不要慌直接按CtrlAltF2切换到命令行终端检查系统日志或者显卡驱动情况具体排查思路放到第五章。3.3 想用KDE桌面的话怎么装GNOME不是唯一的选择RHEL 7.6的源里同样带KDE桌面包组包组名是KDE Plasma Workspacesyum groupinstall KDE Plasma Workspaces -yKDE和GNOME的界面风格差别挺明显。KDE更接近Windows的传统桌面交互习惯开始菜单、任务栏、系统设置都很好找GNOME则更强调工作区和全局搜索。装完KDE之后默认目标同样是graphical.target登录界面通常会提供桌面会话切换选项。如果你想同时保留GNOME和KDE在登录界面选择会话时切换就行。两个桌面环境共存会多占一些磁盘空间但功能上互不冲突。对于一个交付用的系统两者共存反而能给使用方更多选择。3.4 经常有人问的“能不能不重启直接进桌面”如果确认图形组件已经安装完成但是又不想立刻重启可以临时运行startx命令启动X会话进入图形界面查看效果。不过这里要泼一盆冷水startx这种方式只适合临时验证不适合日常使用。它不会完整启动显示管理器Display Manager很多系统服务、会话管理、权限策略都不会自动加载容易遇到各种奇怪的小问题。真正要稳定使用桌面还是老老实实设graphical.target然后重启。4. 没有显示器怎么办VNC远程桌面配置装好的图形界面往往不在你手边。服务器在机房虚拟机在宿主机上总不能每次都跑到物理机前坐下来操作图形界面吧这时候就需要远程桌面。RHEL 7.6下最常用、也最稳的远程图形方案是TigerVNC一套标准的VNC服务端和客户端组件。4.1 VNC服务安装与基础配置先装软件包yum install tigervnc-server tigervnc-server-module -y然后用系统用户比如root或者普通用户设置VNC密码vncpasswd这个密码是VNC连接时使用的独立密码并不会影响系统本身的登录密码。执行之后会要求输入两次确认密码还可以选择是否创建一个纯只读的“view-only”密码根据实际需求来。接下来把系统自带的VNC服务模板复制到自定义位置。RHEL 7.6自带的模板在/lib/systemd/system/目录下cp /lib/systemd/system/vncserver.service /etc/systemd/system/vncserver:1.service然后编辑这个文件vim /etc/systemd/system/vncserver:1.service重点是把文件里的USER替换成你真正要运行VNC的用户名。比如用root用户就改成Userroot、Grouproot、WorkingDirectory/root并确认ExecStart和ExecStop两行中没有多余的用户占位符。修改好之后重新加载systemd配置systemctl daemon-reload systemctl enable vncserver:1.service systemctl start vncserver:1.service这里的:1表示显示编号对应TCP端口5901。如果你想开多个VNC会话可以再复制一份vncserver:2.service对应5902端口依此类推。4.2 配置防火墙并连接测试VNC使用的端口需要在防火墙上放行firewall-cmd --permanent --add-port5901/tcp firewall-cmd --reload如果你启用了SELinux并且没有看到端口放行特效可以用semanage命令调整VNC端口yum install policycoreutils-python -y semanage port -a -t vnc_port_t -p tcp 5901不过多数情况下只要防火墙端口放通了VNC服务就能正常启动。确认服务状态systemctl status vncserver:1.service看到active (running)就说明服务起来了。客户端连接时用VNC Viewer软件输入服务器IP:5901回车后输入刚才设置的VNC密码就能看到远程桌面了。提示如果VNC连上之后看到的是灰色背景或者只有一个终端窗口没有完整的GNOME桌面这通常是启动脚本没有指定桌面会话导致的处理办法见下一节。4.3 VNC连上后桌面空白或灰屏的处理VNC服务默认加载的是~/.vnc/xstartup这个启动脚本。如果这个脚本不存在或者里面注释了一大堆VNC启动时就不会拉起GNOME桌面。解决办法很简单编辑VNC用户家目录下的xstartup文件vim ~/.vnc/xstartup内容改成#!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec /usr/bin/gnome-session保存后赋予执行权限chmod x ~/.vnc/xstartup然后重启VNC服务systemctl restart vncserver:1.service重新连接VNC满屏的GNOME桌面就应该正常出现了。这个坑出现频率极高遇到灰屏第一优先排查xstartup。5. 常见问题排查与避坑笔记图形界面安装这种事碰到一次问题不可怕可怕的是排查半天找不到方向。我把这些年实际遇到过的故障现象和处理方式整理成一张对照表供遇到问题时快速定位。5.1 八种常见故障对照速查故障现象可能原因处理方式yum groupinstall提示找不到包组yum源未配置或包组名称显示不同检查repo文件用yum group list确认准确名称下载依赖时提示某些包找不到源中部分软件包版本有差异执行yum clean all yum makecache再重新安装安装过程因为网络断开而中断远程会话断开用screen或nohup方式重新执行安装重启后依然进入命令行未设置graphical.targetsystemctl set-default graphical.target图形界面卡死或白屏内存不足或显卡驱动异常将虚拟机内存调整到2GB以上检查显卡适配虚拟机分辨率只有800x600且无法调整缺少open-vm-toolsyum install open-vm-tools -y重启后分辨率自动适配root用户在登录界面无法登录GDM默认禁止root登录修改/etc/pam.d/gdm-password注释用户校验行VNC连接后灰色背景没有桌面xstartup脚本未配置GNOME会话按4.3节内容重新配置xstartup并重启VNC5.2 关于虚拟机环境的一些建议如果你的RHEL 7.6是装在VMware或者类似虚拟化平台上的有两点经验值得分享。第一务必安装open-vm-tools。很多人只顾着装图形界面忘了装虚拟化驱动结果装完桌面发现鼠标飘、分辨率调不了、拖拽文件也别扭。执行一条yum install open-vm-tools -y重启之后整个图形界面体验会完全不一样。第二虚拟机扩容硬盘之后时不时会出现图形界面起不来或者界面显示异常的情况。这种情况下先确认磁盘扩容操作是否影响到了LVM和分区再检查/etc/fstab有没有异常挂载项最后再看图形层。很多时候不是桌面本身坏了而是底层存储和挂载出了问题导致启动过程卡在某个服务上。5.3 最后再分享两条实际经验第一条关于中文乱码问题。装完图形界面如果发现系统UI显示中文是一堆方块别怀疑显卡这是中文字体缺失。安装字体包和语言包就能解决yum install langpacks-zh_CN wqy-zenhei-fonts -y然后在系统设置里把语言切换为简体中文注销重登就能看到正常的中文界面了。第二条关于“是否一定要安装完整GNOME”。如果只是想让开发同事在浏览器里点点点或者跑一个JavaFX图形程序根本不需要完整桌面。给机器装上xorg-x11、xterm这类最小图形组件配合VNC或者X11转发就已经足够。装得越多系统攻击面越大、维护成本越高能节省就节省。根据自己的实际交付场景去选择安装粒度这才是成熟工程师该有的判断。