分类 Linux 下的文章

视频点此

有没有想过,当系统出现了内核级别的错误导致完全卡死时还可以自动重启,甚至还能提供一份出错时候的系统快照让你发现出错的位置?对于Windows,内核错误往往会伴随着蓝屏的出现,并提示错误代码。蓝屏的时候有部分情况可以做到自动重启,但大多数情只会卡在蓝屏界面,等待用户手工操作。对于Linux,因为内核的稳定性,出现这种层次的错误在日常应用中几乎遇不到。而一旦遇到,就直接卡死没有任何提示,这会让错误排查变得很困难。而由于驱动的缺陷,确实会有一些电脑的配置让Linux内核运行不稳定导致系统完全无响应的现象频发。所以在这种情况下,自动重启并提供错误文件就十分必要了。那有办法实现吗?有。今天就跟着我打造一个内核保姆吧。可能稍微的硬核一点儿…有些硬核…或者说…还蛮硬核的。

思路

就像最近报道的美国“末日计划”,一旦主领导人遭遇不测,则北方司令部司令可临时替代总统,直到新的领导人产生。这种内核也一样。在正常的内核里边嵌入另一个崩溃拯救内核待命。一旦正常的内核卡死,则自动启动拯救内核,在这个内核下导出当前崩溃的系统环境并重启回正常的内核。还挺好理解的吧?

方法

理解了思路就可以开始制作了。注意,我是Arch系统。对于RedHat和Debian分支,只可做参考。因为部分操作在其他发行版不适用,部分操作不需要像Arch这么麻烦。

再来约定两个内核的名字吧:正常使用的内核叫主内核,崩溃时启动的内核就叫拯救内核。

1、准备需要的软件包

asp   //获取内核源文件的工具
base-devel  //编译依赖包
pacman-contrib  //更新MD5工具
kexec-tools  //将拯救内核注入到主内核的工具
makedumpfile  //精简快照文件体积,通过AUR安装

安装好这些软件包,就可以正式开始了。

2、获取内核源码

因为这个内核需要我们自己编译出来,所以它并不会跟随源的更新而更新,因此我推荐用长期支持内核作为模板进行编译,并且除非出现异常,否则就一直用就可以了。为了方便,可以通过官方的内核模板来制作这个内核。这里假设在~/build/文件夹下执行下面的指令。

asp update linux-lts
asp export linux-lts

3、修改模板

与一般的内核不同,拯救内核需要修改一些参数以开启错误快照功能。编辑~/build/linux-lts/config,修改下述参数并保存。

CONFIG_DEBUG_INFO=y
CONFIG_CRASH_DUMP=y
CONFIG_PROC_VMCORE=y

再编辑相同文件夹下的PKGBUILD,修改下述内容并保存。

pkgbase=你自定义一个包名以区分一般的内核。比如叫linux-dump

4、更新MD5并开始编译

现在终端进入~/build/linux-lts,输入命令updpkgsums完成更新,再输入makepkg -s --skippgpcheck开始编译。

你可能会发现,这其实就类似手工安装AUR的过程。所以在这一步进行的时候,如果发现下载内核源码相关文件的过程太慢,可以参考我以前说过的内容,通过事先下载的方法来解决。

而且因为是编译内核,所以这个过程消耗的时间并不短,具体时间就看你的电脑配置了,一般应该差不多一个小时的时间吧。

5、安装自定义内核

漫长的等待之后,你会在~/build/linux-lts下面发现两个.tar.xz文件。现在你要做的,就是使用pacman -U 两个文件名来安装上编译好的内核。

由于没有做优化,所以这个内核的fallback文件会很大导致EFI分区可能不够进而提示错误。但无需担心,主要的内容已经安装完成,我们可以进入/boot将fallback删除掉。

内核安装完成。如果你想确定一下是否已经安装成功,可以直接更新grub文件,然后选择这个自定义内核启动,或者如果你会临时修改grub启动项参数的话,可以直接修改来临时测试一下,因为一般用不到这个内核做引导。

然后,去往~/build/linux-lts/src/唯一的那个文件夹/下,将vmlinux拷贝出来备用——如果你想做内核Debug而不单单只是做崩溃重启来用的话。

6、添加内存参数

虽然崩溃内核在主内核崩溃时才启动,但还是需要实现为其分配内存空间以保证它可以随时拥有足够内存来启动,因此需要在主内核增加参数来空出一部分内存。这也意味着这部分内存在主内核中就不能被使用了。编辑/etc/default/grub,修改如下参数并保存:

GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet crashkernel=256M@16M"

crashkernel部分是新增的,意思为从内存的16M地址位置开始,向后空出256M的内存区域。

之后,使用grub-mkconfig来更新grub文件。

现在重启电脑,浏览/proc/iomem文件,如果有一行为Crash kernel,则证明主内核已经为拯救内核分配了空闲空间,修改成功了。

7、制作服务

到此就已经完成了大部分困难的工作了,接下来只需要制作两个服务,让拯救内核自动部署,卡死时自动导出错误快照并重启即可。

先来制作自动导出快照和重启的服务。将下述内容保存为/etc/systemd/system/kdump-save.service

[Unit]
Description=Create dump after kernel crash
DefaultDependencies=no
Wants=local-fs.target
After=local-fs.target

[Service]
Type=idle
ExecStart=/bin/sh -c 'mkdir -p /var/crash/ && /usr/bin/makedumpfile -c -d 31 /proc/vmcore "/var/crash/crashdump-$$(date +%%F-%%T)"'
ExecStopPost=/usr/bin/systemctl reboot
UMask=0077
StandardInput=tty-force
StandardOutput=inherit
StandardError=inherit

通过这个服务,可以实现每当主内核出现错误,拯救内核启动时,将当前的环境快照保存到/var/crash/下,命名为crash-dump-日期时间,然后重启系统。

千万不要在主内核启动这个服务。否则你会陷入无限重启,无法自拔。

然后制作自动加载拯救内核的服务。将下述内容保存为/etc/systemd/system/kdump.service

[Unit]
Description=Load dump capture kernel
After=local-fs.target

[Service]
ExecStart=/usr/bin/kexec -p [/boot/vmlinuz-linux-dump] --initrd=[/boot/initramfs-linux-kdump.img] --append="root=[root-device] systemd.unit=kdump-save.service irqpoll maxcpus=1 reset_devices"
Type=oneshot

[Install]
WantedBy=multi-user.target

其中:

  • [/boot/vmlinuz-linux-dump] 为你的拯救内核vmlinuz文件的文件名,一般是在boot目录,但名称是你自己定的
  • [/boot/initramfs-linux-kdump.img] 同理
  • [root-device] 为你的/挂载点设备
  • 真正编写时,将上述的三个位置换成自己的,并且不需要中括号

然后,通过systemctl enable kdump实现启动时自动部署拯救内核。

现在,重启你的电脑,查看/sys/kernel/kexec_crash_loaded文件,如果显示1,则证明拯救内核已经加载,双内核保障系统就建设完成了。

8、测试

接下来就是激动人心的测试环节。但正常使用的系统稳的一批,因此我们可以手工让内核出错,从而触发这个拯救机制来测试。但为了看效果,推荐进入到tty界面测试,图形界面只会在卡死一段时间后自动重启而看不到任何过程。

  1. 登录tty界面
  2. 提权到超级用户sudo su
  3. 手工输入一个错误的系统调用,使内核崩溃echo c > /proc/sysrq-trigger

好了,现在你已经手工让内核崩溃掉了。你会发现,在崩溃的一瞬间,拯救内核开始启动,并将错误内容导出,然后将你的电脑重启了。

至此,一个双内核加持的系统便制作完成了。不知你看没看出来,无论是各种载入状态的判断,还是让内核崩溃,都体现了一切皆文件的精髓:不管干什么,其本质都是在读写文本文件。而且你应该还可以发现,除了导出错误之外,因为可以自动重启,所以它还能为服务器做到错误自动恢复的功能。但到底要如何用好这个第二内核,就看你自己了。


如果你有耐心看到了这里,或者说你真的从视频跳到这里了,那么恭喜你,这里有5.4.28长期支持版本的编译文件,你可以直接下载而无需等待AUR从外网下载了。

地址:https://pan.baidu.com/s/1O8tkjjAKB-93clV1_Wm_JQ

提取码:6gfb

视频点此

“Linux不能玩游戏!”

就我真想给你一巴掌……

哦,如果你只是玩儿腾讯游戏,那就把这一巴掌打回来吧还是……

今天就简单的来聊聊Gaming on Linux.

其实我经常会提到一句话:

你对Linux的认识还停留在十年前。

游戏就是一个很明显的例子。就连我往期内容也有人说不能玩游戏。如果你也是这么认为的,那推荐去看看Steam Play的那期内容,你会对这个问题有一个新的认识。

不过,还有一些不在Steam内的游戏,有没有办法玩耍呢?

有。而且还能让你在一个平台管理你所有平台的游戏。这就是Lutris。接下来主要介绍一下它的安装过程。

先来参照 https://github.com/lutris/lutris/wiki/Installing-drivers将显卡驱动的包补全。这地方就显示出来pop OS作为游戏系统的优势了:它把显卡的相关包都实现做了配置,你大可跳过显卡这一步。

接下来安装Lutris和相关包。因为是开源程序,所以直接通过源来一键安装即可:

pacman -S dxvk wine-staging lutris
  • dxvk: DX到vulkan的翻译层
  • wine-staging:有些发行版叫winehq-staging。而且有些发行版不包含这个包,需要去winehq官网对照步骤增加源

安装好这些之后,再前往https://github.com/lutris/lutris/wiki/Wine-Dependencies安装剩余的一些可选依赖。到此,lutris就可以正常运作了。不过,还有一些额外的配置,虽然配不配两可,但配置之后可以提升百分之二三十的性能。来看看。

  • 安装gamemode:Debian源里边会存在,arch分支则通过aur安装。包名就叫gamemode
  • 查找库文件路径:无论通过文件管理器还是命令,只要找到libgamemodeauto.so.0,将完整路径复制备用。
    查找文件的命令find /usr -name 'libgamemode*'
  • 现在,打开Lutris,点击左上图标- Preferences,切换到System Options,在Enviroment variables增加一项

    • Key = LD_PRELOAD
    • Value = 前面复制的路径

到此,gamemode配置完成。如果你还想进一步优化性能,可以参考https://github.com/lutris/lutris/wiki/Performance-Tweaks的最后两节,在上述位置中增加变量。

在上述全局配置完毕后,如果想再进一步提升性能,则可以选择tkg版本的wine,这个系列的wine启用了ESync,对性能的提升同样不容小觑。但若发挥ESync的效果,需要对系统内核进行一下调整。

  • 通过命令ulimit -Hn可以查看当前系统是否已经启用ESync。只要返回的数值不小于524288,那么就无需继续配置了。(systemd 240以后的版本默认是启用的)否则继续操作
  • 编辑/etc/systemd/system.conf,在结尾增加DefaultLimitNOFILE=524288
  • 编辑/etc/systemd/user.conf,在结尾增加DefaultLimitNOFILE=524288
  • 重启,再通过命令ulimit -Hn验证,应该就完成了

还有一些其他的配置,如果你想的话,可以去https://github.com/lutris/lutris/wiki/阅读。

到此,一个系统显卡双调优的、几乎支持全平台的游戏主机产生了。在lutris里,你可以导入你的Steam列表、GOG列表、甚至是你的KDE内置小游戏都可以被导入其中。自然,你也可以通过这个软件安装一些Steam平台以外的Windows游戏。安装也很简单:

  • 前往lutris官网
  • 切换到Games标签页
  • 搜索你想安装的游戏,进入其页面
  • 点击Install

然后,什么都不用管了,lutris会自动配置、下载、安装。

借这个机会,再来说两个关于显卡的问题。

第一、显卡加速组件。

更多的会是opencl和cuda这两种。如果你是英伟达显卡,那么cuda不会像win的驱动那样随安装包附带,需要另行安装。而cuda对驱动版本有对应关系,所以如果你需要cuda,那最好就不要从英伟达官网下载驱动,直接通过源来安装即可(以archlinux为例):pacman -S nvidia cuda

opencl同样如此。但因为AMD和Intel的驱动均为开源驱动(或者说是不需要闭源驱动。因为开源性能更强),驱动版本和opencl包总是同步更新的所以这两个平台无需考虑版本对应问题,直接通过源来安装即可:

pacman -S opencl-headers
pacman -S opencl-mesa lib32-opencl-mesa

至于英伟达,与cuda一样,不要手工从官网下载驱动安装,因为这样一来驱动版本可能会跟不上opencl的版本造成版本不对应。所以一切组件均通过源安装即可:pacman -S opencl-nvidia lib32-opencl-nvidia # 这里假设nvidia驱动已经从源安装

第二、英伟达驱动更新后,库连接被打破

如果你是从源里边安装的驱动,一般不会出现这种问题。但出现这种问题也无需担心,只需要通过ln -s手工建立软连接即可。

视频点此

这其实是从看板的一个问题引出来的。这个问题其实可能不是很常见,但与字体相关的一个问题却经常会看到:

Linux下面的中文排版和Word中不同。

这是误解,还是冷知识呢?还请你看过今天的内容后自行决断吧。

先来了解一个概念:版权。版权亦称“著作权”,指作者或其他人(包括法人) 依法对某一著作物享受的权利。根据规定,作者享受下列权利: (1) 以本名、化名或以不署名的方式发表作品; (2)保护作品的完整性; (3) 修改已经发表的作品; (4) 因观点改变或其他正当理由声明收回已经发表的作品,但应适当赔偿出版单位损失; (5) 通过合法途径,以出版、复制、播放、表演、展览、摄制片、翻译或改编等形式使用作品; (6) 因他人使用作品而获得经济报酬。上述权利受到侵犯,作者或其他版权所有者有权要求停止侵权行为和赔偿损失。

上面的话来自百度百科。放到现实中说就是:我可以用,你也可以用,但是咱都别随便就四处分发拷贝。如果想传播,那至少也要获得许可。

微软的那些字体就是如此。所以你能明白为什么Linux下面的中文排版会混乱了吗?没错,发行版们不拥有Windows系统下面那些字体的版权,所以只能用开源字体做替代,因而就不能保证版式相同了。

但,这能拿出来作为Linux的一项弱势吗?

显然,如果你拥有自己的大脑,你应该可以意识到:既然版式打乱的原因是字体缺失,那么让Linux拥有Windows字体不就可以解决了?

没错,就是这么一层窗户纸,却挡住了很多人的眼睛。所以接下来看看Arch下面如何补全Windows字体吧。

复制

我不相信有这个问题的人电脑里面没有一个Windows系统,所以直接进入Win的系统盘/Windows/fonts,将文件拷贝到/usr/share/fonts,然后打开终端,输入fc-cache -fv刷新缓存。再打开文档,你就会发现自己的创造性思维是多么的缺乏了。

不过注意哦,如果你的文档是在Office 2007里边编辑的,那么因为07版本的docx结构有问题,打开依然会是混乱的版式。但这是07版office的问题,同样的文档放到office2010、13、16、365下面同样是混乱的。所以如果使用07版office,保存成不带x扩展名的文档才是让文档拥有兼容性的方法。

在Linux下面,还有一种字体安装方法,就是如同安装软件那样,直接通过源来安装。这有一个明显的好处:全自动部署,无察觉的自动更新。但很显然,这只能安装开源的字体,对于微软旗下的字体并不适用。不过Linux下面(我)最常用的中文字体文泉驿就可以这么安装。直接搜索 wqy-microhei,安装就行了。

AUR

对于Arch分支,无论多么刁钻的需求,AUR都能满足你。就像微软字体这种有版权限制的东西,你同样可以通过AUR完成安装。无论用命令还是图形界面,安装ttf-ms-fonts即可。

同样的,看板的nerd-font字体亦可以通过AUR安装。搜索nerd-font,安装需要的即可。我不推荐安装完整包,一,太大;二,太慢。就像看板描述的那样:

首先我尝试了aur下载nerd-font-dejavu-complete。提示raw.github...443 connectre refuse。生成ssh key后,还是443。放弃了。。

这是AUR的一个弊端所在。因为是用户维护,所以下载链接一般只有一个,而且多数是在国外。想这个描述的,显然这是因为网络问题导致的下载失败,与ssh的关系不大。

但raw.github这个网址是github的,它虽然慢,但其实并不是不能连上。所以索性就坡下驴,卡在哪儿就手工操作哪儿,让程序绕过去就得了呗。怎么做?

AUR说白了就是一个执行脚本,所以只需要打开pkgbuild,把里边的下载内容复制到浏览器进行下载,然后再安装就可以了。不过看板说不起作用我测试之后还真没发现,可能是中文编码占用了一些特殊符号的位置而我虚拟机没装中文的缘故?

当然,卡住的地方有时不是网络,而是很长时间不更新导致的依赖缺失——这也是用户维护的有一个大缺陷。就像看板里边的这个问题.

跟前面一样,就坡下驴安装法:哪儿错补哪儿。

我选择qt5编译的版本。因为KDE就是qt构成的,这样不但安装的依赖少一些,还能避免莫名其妙的错误。

先来看touchegg-qt5的AUR页面。评论提到连接换了。不过最后更新日期就在评论时间的1小时后,所以有理由相信这个问题已经被解决了。所以直接安装。

这时候会发现,它的依赖geis也是AUR安装,所以现在来geis的AUR页面看看。

最后更新在17年,而19年有评论需要补充依赖,所以当安装器询问是否要编辑geis的pkgbuild时,选择是,并增加xorg-server保存。

而geis又要从AUR安装grail,再看grail的AUR页面。可见最后的评论说找不到inputproto,看上方的依赖列表,这个包已经改名xorgproto-git,所以当安装器询问是否编辑grail的pkgbuild时,选择是,将inputproto修改成xorgproto-git,保存。

到此,过时的AUR都已经修复完成,安装就可以正常进行了。

当然,相对于touchegg,我更推荐libinput-gestures这个软件,因为如果你有archlinuxcn源,可以直接安装,而且AUR上面也有人为它制作了图形界面,非常好用。只需要AUR安装libinput-gesture-qt,然后通过命令sudo gpasswd -a $USER input将用户加入input组,注销再登录即可设置使用了。

这次没有直接针对看板的问题说解决方法,因为主要还是想让你能体会出来就坡下驴的解决方法是怎么用的。这个方法不止是针对Linux安装程序,硬件问题、软件崩溃都可以通过这个方法进行排查。所以就坡下驴这个解决问题的思路才是我做这个主题的目的所在。正因此,很多地方的细节我并没有说,也不打算去说。都说出来了,你的思路就被限制住了。曾经我在KDE美化的那个主题下面就说过,希望你可以Stay Creative.

视频点此

其实对于Arch这种如此高自定义性的安装盘,用命令来安装才应该是最简单的方法。但如果你无论如何也不相信的话,那就试试这个不需要记忆指令的问卷式Arch安装程序吧。

一、联网,设置中国镜像源

其实只需要联网就行了,但由于通过安装程序更改镜像源会先行同步一次源,这时候同步的速度简直不要太慢,所以还是推荐先手工把镜像源换到中国,然后之后跳过镜像源选择即可。至于怎么换,参照手工安装,编辑/etc/pacman.d/mirrorlist即可。

二、获取脚本,安装

wget archfi.sf.net/archfi    # 获取archfi​
chmod +x archfi    # 增加脚本的可执行权限​
./archfi   # 运行脚本​

三、综合上面两步骤的方法

如果你连这都嫌麻烦,那在联网后直接使用我提供的脚本,就能综合上面两步,直接进入到archfi的界面:curl https://arch.bwsl.wang | sh

视频点此

整理自Archwiki,Install archlinux from SSH。原文已经过于陈旧,但是描述的更加详细,值得一看。

在以下情况安装Arch...

  • 没有显示器的HTPC(比如一个SDTV)。
  • 一个在另外城市、省份、国家的PC。(朋友的家、父母的家等等)
  • 一个你想要远程安装的PC,比如从一个可以方便的从 Arch Wiki 复制/粘贴的自己的工作站上远程安装。
注意: 前2步需要直接的物理控制PC。显然,如果PC在别处,就需要另外一个人的协调。
  1. 使用最新的安装媒介启动PC到Arch的live环境。

    现在你的眼前应该可以看到[root@archiso~]#的提示。

  2. 启动SSH进程:systemctl start sshd
  3. 设定一个建立ssh链接需要的root密码;默认root的arch密码是空的。使用命令passwd
  4. 在另一台电脑上,通过ssh连接到上面的机器中:ssh root@ip

从现在开始尽管我们在本地,也可以通过我们自己的键盘控制远程的机器显示安装画面了。

视频点此

先说结果:在官网将Win10对应驱动更改为DCH版本后,Windows对比Arch系就一样了;更改之前或更早的Windows版本,Arch系更容易;对于其他Linux分支,何时都是更困难的。

这次的内容主要是回答之前有朋友问到的问题。所以主要来看Manjaro和Debian 10。

不过,为了回答这个题目,先来简单解释一下Windows要怎么装。

装好Win10后,Windows Update会自动安装DCH版本驱动。待驱动安装完毕,去往Windows应用商店搜索安装英伟达控制面板。安装结束。

其他版本的WIndows,则需要去往英伟达官网,在驱动中心下载后安装。

好了,Windows的安装方法说完了,现在来看Manjaro。

问我这个问题的朋友的原话是

nvidia-dkms装不上

可能是因为用了自定义内核吧所以需要这个。不过manjaro同Arch是不同的,它优化并维护着自己的驱动仓库,所以不需要也没必要考虑nvidia-dkms。Manjaro安装只需三步:

  1. 打开终端
  2. 输入:sudo mhwd -a pci nonfree 0300
  3. 回车

不必嫌难,因为不需要你理解什么意思。只需照着敲进去,回车,你的驱动和控制面板便安装好了。

哦,当然,也可以使用图形界面,但是可能没有终端直接:

  1. 打开设置
  2. 找到Manjaro设置管理器,打开
  3. 切换到硬件配置
  4. 对NVIDIA项目,勾选non-free
  5. 点击Install

好了,简单地操作到此结束。接下来看困难的Debian10。这是另一位朋友问的,原话如下

1.nVidia开源驱动与闭源驱动的bumblebee配置及xrandr配置

2.运行nvidia-xconfig后重启黑屏的原因及解决办法

3.显卡切换面板支持怎么弄? (目前Debian10,i5-8250u+MX250,一直无法切换显卡,只能用显卡运行程序(optirun))

先来说闭源驱动安装。

  1. 启用闭源源——我没写错。Debian的源分为开源和闭源两类,默认情况下用户只能检索到开源程序。所以这里需要启用“闭源”源

    1. sudo模式编辑/etc/apt/sources.list
    2. 在每一行后面增加contrib non-free
    3. 保存后,更新缓存:sudo apt update && sudo apt upgrade
  2. 安装头文件——黑屏的一个可能就因为这里:sudo apt-get install module-assistant
  3. 编译它们:sudo m-a prepare
  4. 安装探测程序查看自己需要装哪个驱动包

    1. 安装nvidia-detect:sudo apt -y install nvidia-detect
    2. 运行nvidia-detect,得到推荐选项。如:

      # nvidia-detect
      Detected NVIDIA GPUs:
      01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] [10de:1c03] (rev a1)
      
      Checking card:  NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] (rev a1)
      Your card is supported by the default drivers and legacy driver series 390.
      It is recommended to install the
          nvidia-driver
      package.
  5. 根据推荐,输入命令完成驱动的安装:sudo apt install nvidia-driver

然后,bumblebee我以前专门说过,这里便不赘述了;而xrandr、nvidia-xconfig与bumblebee是一种“互斥”的状态,如果bumblebee配置好了则不需调整xrandr及nvidia-xconfig,否则需要。而xrandr的写法我以前同样提过,所以请参考安装KDE桌面的内容,出现在大概在12分钟位置。

这也是我现在宁可挖坑也不把一次的内容做的很多的原因:标题表现不出来涉及到的所有内容,就很麻烦。

至于nvidia-xconfig,只要xrandr配置正常,nvidia-xconfig可能不需要单独生成。如果不行,也只需终端sudo运行一次便会自动生成配置文件,此时应该就不会有什么问题了。

如果xrandr和nvidia-xconfig都配置过了但还是黑屏,那么问题可能出现在gdm上面因为这里貌似有一个bug但没有解决。尝试换成sddm或lightdm,或者使用bumblebee去代替xrandr和nvidia-xconfig

第三件事儿,很不幸,Debian现在是没有切换面板的。也就是说,要么完全使用闭源驱动提供的PRIME,即无论何时都使用独显驱动,要么就是大黄蜂,在需要使用独显的时候通过optirun实现独显加载。

到这里,问题便说完了。顺便呢,也希望能让你发现Linux和你印象中的差别吧。同时呢,也希望你能意识到:发行版的选择其实也是门学问。