分类 通用知识 下的文章

在开源驱动和闭源驱动之间进行切换时,KDE的字体会受到影响。最典型的就是最近从Intel核显切换到NVIDIA独显使用,重启之后从sddm到KDE,字体都变得异常小,以至于几乎看不清了。不过好在这个问题普遍存在,所以很容易就找到解决方案了。只是有一个坑要注意,所以特别来记录一下

一、调整KDE字体

根据解释,在切换到英伟达驱动后,字体改变的原因在于NVIDIA驱动使用了显示器提供的DPI设置。而KDE与Gnome等其他的DE不同之处在于它并没有强制使用某一个固定的字体DPI值。所以在切换驱动后,KDE的字体会受到影响而其他DE基本不会。

解决方案也很简单,前往 系统设置—字体 ,将 固定字体DPI 勾选,并保持96默认值即可。

二、调整SDDM大小

正如前面说到的,NVIDIA使用了显示器提供的DPI,所以SDDM的大小同样会受到影响。所以可以通过修改sddm的配置文件解决。

打开 /etc/sddm.conf(具体位置需要自行查找),找到 ServerArguments=-nolisten tcp 字段(在[X11]区域内),在这句话的结尾追加 -dpi 96 (96根据自己的情况修改)。最终效果为

ServerArguments=-nolisten tcp -dpi 96

保存即可。

但是在我的sddm配置文件中,并没有这个字段。这可能是由于这个配置文件是KDE生成的,而不是SDDM自己产生的。所以一些无关紧要的配置项便没有设定。因此在进行上述操作之前,需要生成一份全功能的配置文件。

# 将当前配置文件备份(具体文件位置视自己的情况而定)
sudo mv /etc/sddm.conf /etc/sddm.conf.bak
# 切换到root
sudo su
#生成sddm的配置模板
sddm --example-config > /etc/sddm.conf

然后便可以修改了。

注意,如此生成之后,sddm的所有配置就都被初始化了,所以需要前往 系统设置—开机和关机—登陆屏幕(SDDM) 中重新配置一下。

至此,驱动切换前后的字体问题便解决了。

视频点此

在Windows下面,有一个默默工作,为机械硬盘做提速工作贡献一生的系统软件——碎片整理程序。
但是,随着固态硬盘的普及,越来越多的看到一句话:固态硬盘不要做碎片整理。
而在Win8以后的版本中,这个程序被默认设定成了每周自动整理所有分区,行踪变得更加隐蔽了。就仿佛是个特务,潜伏在广大不知情的用户的电脑当中,伺机整理掉你的固态硬盘。
所以,看到这里,如果你有固态,请先去你的“优化驱动器”程序看看,是不是每周整理的。如果是,就赶紧把固态硬盘的分区取消掉吧。
但是,为什么会出现碎片呢?碎片又是如何影响机械硬盘速度的呢?是所有的磁盘分区类型都会出现碎片吗?今天,我打算通过一些形象的手段,跟你说说这三个问题。


在说三个问题之前,先来介绍一下什么是碎片。

在Linux方面,碎片被分为“内部碎片”和“外部碎片”。现在我们假设一个磁盘的空间有20k,它的基本存储单位为簇。至于簇到底是什么我们就不深究了。现在有两个文件,一个7k,一个1k。当簇的大小为4k时,磁盘分为了5个簇,两个文件共占用3个簇,即使用了12k,其中浪费地空间就是4k,而浪费的这4k空间,就是内部碎片。因此我们就了解了:内部碎片主要是造成磁盘空间的浪费。要注意:windows的磁盘碎片整理功能所整理的碎片不是这个碎片,也无法对这个碎片进行操作,它所对应的碎片概念是外部碎片。

任何一种分区格式都离不开簇这个东西,只是有名称可能不一样。所以任何一种系统下的分区都会有内部碎片出现。那可以对内部碎片进行优化处理吗?可以。以上面的例子来说,如果把每一簇分成2k,那么20k的磁盘就分为了10个簇,7k和1k两个文件共占用了5个簇,10k的空间,浪费的空间——内部碎片为2k。

那么内部碎片说完了,我们来看Windows概念下面的碎片——在Linux这边被称作“外部碎片”。它是怎么产生的呢?我通过一个矩阵来解释。

a b c d e f g h i j k l m n o p q r s t u v w x y z
a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
n 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

这就可以简单的用来表示一个很小的硬盘,初始状态是空的,全部都被0填充。在矩阵顶部和左侧的a-z都是用来定位每一个数据的。最左上角的那个0就是aa,最右上角的那个0就是za,最左下角的就是az。

以FAT文件系统作为代表,NTFS类似。我现在在磁盘上加入一个文件,于是磁盘看起来会变成这个样子:

a b c d e f g h i j k l m n o p q r s t u v w x y z
a T O C h e l l o . t x t a e l e 0 0 0 0 0 0 0 0 0 0
b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e H e l l o , _ w o r l d 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

(为了看起来更加清楚,g-z的空行被省略了)

前4行是TOC(Table Of Contents),即所谓的内容表。TOC会存储磁盘上所有文件的位置。磁头会根据这个表来移动到对应的位置。在我上面的例子中,TOC包含了一个名字叫做“hello.txt”的文件,并且这个文件的内容是从ae到le的。往下看ae到le之间的内容,我们能看到这个文件的内容是“Hello,_world”

到目前为止,一切都正常对吗?好,那我们再来添加一个文件:

a b c d e f g h i j k l m n o p q r s t u v w x y z
a T O C h e l l o . t x t a e l e b y e . t x t m e z
b e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e H e l l o , _ w o r l d G o o d b y e , _ w o r l d
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

正如你所见,第二个文件被紧接着放置在第一个文件之后。这样的好处是你所有的文件都会紧密地放置在一起,这样读取它们将会非常的迅速和方便。要知道磁盘上最慢的就是读写头的移动了,它移动的越少,则读取的速度越快。

但是,当需要修改第一个文件的时候,问题就出来了。现在假设我们需要在“hello.txt”文件的尾部加入两个感叹号,我们就会遇到问题:没有空间。文件“bye.txt”挡住了“hello.txt”的去路。这时候我们有两个解决方法,但是没有一个是完美的。

  • 把文件“hello.txt”删掉,然后再“bye.txt”后面加入修改过后的“hello.txt”。
  • 把文件“hello.txt”拆成两部分存储,这样在“bye.txt”之前就不会有空的磁盘空间了。

第一种方式表现出来就是这样:

a b c d e f g h i j k l m n o p q r s t u v w x y z
a T O C h e l l o . t x t a f n f b y e . t x t m e z
b e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e 0 0 0 0 0 0 0 0 0 0 0 0 G o o d b y e , _ w o r l d
f H e l l o , _ w o r l d ! ! 0 0 0 0 0 0 0 0 0 0 0 0

第二种方式表现出来就是这样:

a b c d e f g h i j k l m n o p q r s t u v w x y z
a T O C h e l l o . t x t a e l e a f b f b y e . t x
b t m e z e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e H e l l o , _ w o r l d G o o d b y e , _ w o r l d
f ! ! 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

而FAT采用了哪种方式呢?显然,第二种更快捷。我们只需要在TOC中读取到文件的起始位置,然后让这个作为起始的簇指向保存着这个文件的下一个簇,而下一个簇继续指向下下个簇,依次类推,便可以让磁头知道我要通过哪一个路径来读取这个文件了。这就是FAT保存文件的链式结构。

而这,就是为什么FAT格式的文件系统经常需要磁盘碎片整理的原因。所有的文件都紧挨着存放,所以任何时候,只要一个文件需要增大,就会产生碎片。而任何文件被删除了,就会留下一个空白区域。于是很快磁盘就会变成一堆乱糟糟的碎片和空白,效率就会变低了。

不知道你有没有听到我刚刚说过的一句话:要知道磁盘上最慢的就是读写头的移动了,它移动的越少,则读取的速度越快。所以整理碎片,让文件保存在一个连续的区域,减少磁头的摆动,这就是整理碎片加速磁盘读写的原因。而现如今的固态硬盘已经不需要磁头的概念了,反而会更关注每一块的读写次数,自然也就不需要,也不推荐进行碎片整理了。

那么,这种“外部碎片”是每一个操作系统对应的每种文件系统类型都会产生的吗?

不是。Linux就不会出现。因为它使用一种不同的方式来处理这种问题。当然,对于单用户来说Windows的文件系统已经够好的了,但是Linux生来就是为多用户设计的系统,它总是假设在同一时间有多个用户试图去操作不同的文件。所以Linux相对FAT文件系统,使用了另一种方法来设计自己的文件系统。Linux文件系统看起来是这样的:

a b c d e f g h i j k l m n o p q r s t u v w x y z
a T O C h e l l o . t x t h n s n 0 0 0 0 0 0 0 0 0 0
b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
n 0 0 0 0 0 0 0 H e l l o , _ w o r l d 0 0 0 0 0 0 0
o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

当我们添加了文件以后就变成这样了:

a b c d e f g h i j k l m n o p q r s t u v w x y z
a T O C h e l l o . t x t h n s n b y e . t x t d u q
b u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
n 0 0 0 0 0 0 0 H e l l o , _ w o r l d 0 0 0 0 0 0 0
o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
u 0 0 0 G o o d b y e , _ w o r l d 0 0 0 0 0 0 0 0 0
v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

这种文件系统的好处是磁盘的磁头可以一直位于中间位置,而所有的文件平均下来都会非常近。

当我们仍然给“hello.txt”加入两个感叹号时:

a b c d e f g h i j k l m n o p q r s t u v w x y z
a T O C h e l l o . t x t h n u n b y e . t x t d u q
b u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
n 0 0 0 0 0 0 0 H e l l o , _ w o r l d ! ! 0 0 0 0 0
o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
u 0 0 0 G o o d b y e , _ w o r l d 0 0 0 0 0 0 0 0 0
v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

没有任何的障碍。

Windows总是试图把文件存储在尽量靠近磁盘开始位置的地方,这导致当磁盘利用率变高的时候它经常会产生磁盘碎片。Linux却在整个磁盘上存储文件,所以当文件的大小需要改变的时候,总是有足够的空间。当然,想必你也可以看出来,当磁盘利用率接近饱和的时候Linux同样需要文件整理。但是根据linux.org的说法,只要磁盘还有5%以上的可用空间,那么这种碎片是基本不会出现的(Linux native file systems do not need defragmentation under normal use and this includes any condition with at least 5% of free space on a disk.)。而在实际使用中,磁盘在还有8%左右未使用时就会有警告产生,所以碎片整理是不用考虑的。

视频点此

这看起来只是一个简单的显卡选谁的问题,实际上这是两种思维的较量。今天,我就来跟你聊聊,如何看待这个较量。

要注意呢,我的观点可能在有些人看来是有失公允的。因为我是站在Linux阵营来说话的,这在一定程度上必然会让我的观点偏向开源一方。所以如果你正尝试,或者已经开始想Linux平台过渡了,这个视频可能对你有所帮助;如果你是坚定的Windows拥护者,那么我之后的观点可能会与你有所违背。斟酌着听吧。

好了,现在就来正式的谈一谈开闭源驱动这个问题。

其实曾经它俩还不是这样的。在那个时候,它们俩都需要使用专有驱动——也就是闭源驱动——来运行。在Windows下面,NVIDIA比AMD更被玩家接受,有一点就是它的驱动优化要比AMD强一些。而Linux下,在两者都需要闭源驱动的年代,NVIDIA的驱动同样可以说一直在是吊打AMD的专有驱动。但这个并不是体现在优化方面,而是两者安装方式的差异上面:NVIDIA,通过.run扩展名的的可执行文件来安装驱动,驱动会被固化到Linux内核之中。这对于安装专属驱动来说是一个很好的方法——简单来讲,固化的过程,就是利用用户的电脑编译出一个内核模块并插在用户的内核上。因为通过用户电脑完成编译,所以得到的这个模块可以说是完全根据用户当前的系统环境生成的,非常灵活。
而AMD,通过amdgpu-pro完成——体验很差。但到现在AMD仍然在维护这个玩意儿。不要装!想给它整服帖,要命。因为AMD维护这个驱动的思路和Windows类似,就是定期释放一个新版本,这个版本只能用在指定的Linux内核版本上,一般是LTS版本的内核。所以如果你使用的是更新更好的内核,或者一个自定义内核的话,这个驱动通常将不再可用。当然,如果你会魔改这个驱动,它兴许能用,但半死不拉活的用起来还不如不要。所以不要用AMD的闭源驱动。
但AMD有一个优势,就是它喜欢开源。我的理解就是:既然我做不好,那我就公开,让有兴趣的人帮我改进,质量提升的同时我还不用额外雇开发者。不管是不是这种想法,喜欢开源的特性让针对AMD显卡的开源驱动性能同闭源驱动几乎无差距,并且这个开源驱动被先天性的整合到了Linux内核之中。与之相比,NVIDIA由于各种技术封闭,针对它的开源驱动只能靠开发者从零开始一点一点写出来,无论性能还是功能同闭源驱动都相差悬殊。所以,如果你使用AMD显卡,那你不需要因为安装不了amdpro驱动而焦头烂额,所有Linux都先天性自带的开源AMD驱动可以给你闭源同等的体验。而如果你使用NVIDIA显卡,那么闭源驱动是一定要安装的。不过好在NVIDIA的闭源驱动不是nvidia-pro这种实现方法,所以你不必担心NVIDIA的闭源驱动装不上。但闭源驱动终究动辄到内核层面,所以NVIDIA的.run实现方式再简单,你可能也会遇到一些不可预料的问题。因此在这一方面,我会倾向开源,偏向AMD阵营。

但大多数人都是用NVIDIA显卡,并且不是很看好AMD显卡——尤其是Windows用户。所以接下来我们聊聊NVIDIA这个闭源驱动的问题。

如果你使用Arch分支以外的发行版,你要怎么安装NVIDIA的闭源驱动呢?

前往NVIDIA的官网——搜索你的显卡驱动——下载.run文件——给其加上可执行权限——安装。当然,一些开箱即用的发行版比如Deepin、Ubuntu这种,会配有一个显卡驱动管理器,通过管理器我们就可以一键安装驱动。但这就又有一个问题:我们并不知道一键安装驱动的背后系统到底都干了些什么,一旦出现了异常,回退的操作就会变得非常艰难。当然,你可能会说这是Linux的问题。如果你这么想了,就说明你对Linux高度自定义性的“高度”一词理解的不深。它太能自定义了,所以想让一套代码适配各种情况太艰难了,所以这就是为什么Linux会推崇开源了。但就像我一开始说的,NVIDIA的.run解决方案可以说是闭源中非常好的了。因为它至少可以适应大多数人的系统,这便足矣。

还有一个问题,可能就不限于Linux方面了:我是否需要安装最新版本的显卡驱动?

Windows下面这个回答可能比较多样化,但Linux下面,这个问题的答案很精确:需要。你需要前往NVIDIA官网,下载新版本的.run文件,然后重新安装。挺麻烦的。

而对于Deepin这种通过一键安装驱动的,更新显卡驱动同样是一个比较麻烦的事情。你不但需要知道这个程序拥有的驱动版本更新没有,还要冒风险卸载再安装。这也是为什么Linux阵营相对会更偏向AMD显卡。

对于绝大多数软件和开源驱动,它们都会被发行版收录到软件仓库之中。amd的开源驱动自然也是如此。所以每次你更新系统的时候,这些软件和驱动就都会被更新到最新了,所以除非你不更新系统,否则你的使用的软件和开源驱动总会是你的发行版下面最新的版本。

这里我想额外插一句啊:Linux更新本质就是下载软件包替换,所以每次更新的量相比Windows来说很小,而且软件包它装它的,你照常使用即可。只有当你将软件关掉了,这个旧版本才终止使命。换句话说,如果这个软件你开了一年不关,那么即使中途这个软件升级了两百次,你在用的这个软件仍然是一年前的老版本。只有当你关掉软件再打开,最新的才会启动。这个过程是无缝的。并不像Windows那种要你重启以应用更新,而且一更更好长时间,不完成还不让你动。

好,两种代表我就说的差不多了。总的来讲,AMD开放,NVIDIA封闭。这在Windows上得不到什么体现,但在Linux上,AMD虽然自己做的不好,但借助开源让其处在优势地位;而NVIDIA自己很强大,但由于封闭使得很多特性不能完整的发挥。正所谓“人多力量大”。

资安公司Intezer发现了一种名为HiddenWasp的恶意软件,让黑客得以远端控制受感染的系统,HiddenWasp专门感染Linux平台,由使用者模式Rootkit、木马以及初始部署脚本组合而成,研究人员表示,这个恶意软件疑似由中国黑客创造。

Intezer指出,HiddenWasp与其他常见的Linux恶意软件不同,HiddenWasp目的不是将用户的计算机变成矿机开采加密货币,或是进行DDoS攻击,而是单纯用于远端控制。HiddenWasp可以操作本机档案系统,上传、下载并执行档案,执行终端命令等动作。

HiddenWasp组成复杂,作者从各种公开可用的开源恶意软件中,像是Mirai和Azazel rootkit等项目借来大量程序码,并且与其他中国恶意软件存在一些相似之处,特别是与近期Alphabet旗下的资安子公司Chronicle,发现的Winnti恶意程序Linux变种类似,而这个Winnti变种则是中国黑客的著名工具。

虽然有不少恶意软件也会拼凑使用来自于其他项目的程序码,但研究人员从中找到一些线索,发现HiddenWasp与名称为Adore-ng的Linux中文开源Rootkit存在一些关联,而且虽然HiddenWasp可能由中国黑客开发,但是恶意软件本身却是在中国境外创建与营运,有趣的是HiddenWasp档案曾被上传至恶意软件分析网站VirusTotal中,使用的路径包含了一间中国鉴识公司的名字。

HiddenWasp的植入载体(Implant)被托管在ThinkDream位于香港的服务器中,研究人员提到,HiddenWasp是整个攻击手法的第二阶段工具,用来感染受害者已经受损的系统,他们无法得知黑客传播HiddenWasp的方法。现在有证据显示,可能已经有受害者受到HiddenWasp控制,且进行过大规模侦查活动,目前HiddenWasp正处于活跃的状态,而且所有主要的防毒软件都检测不出来。

研究人员提到,HiddenWasp看起来是有针对性的恶意软件,但无法肯定是受到国家资助的攻击计划,但可以确定的是,HiddenWasp的目的,不是执行挖矿或是DDoS攻击这种可以快速获取利润的短期目标。

要防止Linux系统受到HiddenWasp的攻击,可以封锁Intezer提供的C&C IP位置,而他们也提供了YARA规则,让系统检测在存储器中执行的程序是否包含HiddenWasp植入载体。另外,研究人员也提供了一个快速检查系统是否遭到感染的方法,就是搜寻系统中的ld.so文件,当系统中不存在任何包含/etc/ld.so.preload字符串的文件,则系统可能受到感染,因为HiddenWasp的植入载体会对ld.so实例进行补丁,以便从任意位置执行LD_PRELOAD机制。

通过删除最大化时候的标题栏,从而实现让窗口尽可能多的利用屏幕空间。

一、通过插件实现

这是很方便的一种实现方法。只需要通过plasma的在线安装插件功能,装好Active Window Control这个插件并启用,之后在这个插件的设置界面中,改动下述几个位置(其他地方随意):

  • Appearance标签页下

    • 取消勾选Fill width,并将下边的拖动条移至合适的位置(根据一会儿设置的图标大小调整)
    • 勾选Hide titlebar for maximized windows
    • 取消勾选Show window title

  • Buttons标签页下如图设置

注意:Button sizeButtons spacing以适合panel为准;而Appearance标签页的拖动条以这里为准

完成。实现了类似与Unity桌面环境的最大化窗口时,标题栏合并到panel的效果。

二、通过配置文件实现(已失效)

本段所述之文件现已被移除。

编辑~/.config/kderc,做如下修改:

  • [Compositing]中添加语句
BorderlessMaximizedWindows=true
  • [windows]中,将BorderlessMaximizedWindows的值改为true

完成。现在最大化窗口时会隐藏标题栏。可以通过alt+左键拖动窗口取消最大化,进而关闭窗口。

视频点此

随意选择。


这可能是很多刚接触Linux的用户的一个疑问。全世界600+发行版,我到底该怎么选择我要用的发行版呢?

随着Linux各种支持的完善、稳定性和易用性的提升,现在各个发行版之间的差异性已经愈发的不明显了,因此开头所说的随意选择并不是玩笑。但发行版之间的差异确实依旧存在,加之每个发行版的用户数量、用户质量都不尽相同,所以我相信在每一名Linux用户的心中都有一份自己的Linux发行版排名。一个很明显的例子:如果你在Youtube上面搜索Linux相关的视频,你会看到很多标题为“Top x Best Linux Distros”之类的,给发行版做一个排名的视频。当其他人询问“我该装哪个发行版”这种问题的时候便会根据自己心目中的排名来推荐。因此为了最大化的公正,在这个视频里边,我分为两部分向你介绍怎么选择:第一部分,根据我心中的排名,完全主观的向你推荐;第二部分,向你介绍几种相对客观的选择方法。

是的,这礼拜的投稿没有什么技术性的干货。所以如果你是想看服务器的,下礼拜再来。你应该能看出来,我的服务器系列是半月刊的吧?好,那么现在就开始今天的茶话会。

我的Linux推荐

不要看发行版众多,但本质上来说,Linux出名的就那么几种:Debian系、RedHat系、Archlinux系、OpenSUSE系。其他的发行版基本都是从这几个Linux衍生出来的——当然,也有一些可以说是独自建立的发行版比如英特尔的Clear Linux这种。它们的唯一区别就在于包管理器的不同。所以一份自己的Llinux名单建立只有两个因素:基于什么的发行版、使用体验怎么样。

一般来讲,求推荐的都是刚接触Linux的用户,所以核心问题就是易用,有问题可以很快的找到解决方法。如果放在几年前,我一定会向你推荐烂大街的Ubuntu这个占有率遥遥领先的发行版。但现在,Deepin这个基于Debian的发行版可能会是我最先向你推荐的一个。这是一个国内推出的发行版,所以相对于多数发行版来说,其本地化体验会有相当的提升。一个最简单的例子:它的软件商店包含了很多国内常用的软件,QQ、微信、百度云这种在其他发行版之下可能得配置一番的软件,在Deepin下都不是问题。只需要在应用商店里边点一下安装按钮,便可自动配置完成使用。其社区的中文用户量也算是比较庞大的,这使得如果在使用中遇到一些问题,也可以很方便的寻求答案。

图片来源深度论坛

但正所谓金无足赤人无完人,Deepin同样有一些问题需要你关注。

软件版本较旧。这可以肯定是因为最近的大概导致的。你可以理解成为了稳定做出的牺牲。但偏偏现在的系统整体又不是很稳定。这在社区中的也是反馈比较多的问题。可能是最新版本进行了重大改变的原因造成的。

社区的中文用户虽然庞大,但平均质量不高。当然,因为确实存在较高质量的用户,所以你不必担心自己的问题无人解答。但可以肯定的是,中文社区有用的信息不及国际社区有用的信息多。一些中文用户总是会充当一些莫名其妙的云CEO、时事观察员这类角色,看起来仿佛很积极的在帮助深度发展,但无疑,这种顶多能表现出自己的爱国情怀,对深度的发展、社区的质量起不到什么作用。

总的来说,Deepin在日常办公方面完全足够,其不稳定也是体现在个别的硬件或者极限工况下。但如果你确实对不稳定和软件老旧有所顾忌,或者你并不是特别需要国内常用的软件,那么Deepin可能并不是最理想的发行版。这时候,你就可以考虑烂大街的Ubuntu了。

图片来源oschina

你可以把Ubuntu理解成Linux中的Windows:技术成熟、社区庞大,开箱即用。即使有一些软件在自带的软件商店找不到,同样可以去官方网站搜索。如果这个软件支持Linux,那么它一定会提供deb格式的安装包。但这个deb很大可能只能装在Ubuntu上而不能装在Ubuntu的父亲Debian上。因为Ubuntu虽然基于Debian,但它拥有自己的软件仓库,相对于Debian同样软件的版本要新。同时,Ubuntu拥有自己的显卡驱动方案,在英伟达和英特尔核显双显卡的笔记本上技术是比较成熟的。

要我说它的缺点,首先一点,就是Deepin移植的一些国内软件Ubuntu没有,即使有,其安装过程也比较麻烦。再者,Ubuntu经常会出现恼人的“发送错误报告”窗口。主要是由于国内发送会大概率失败导致每次登陆都会询问你是否发送。你可以手动删掉它,或者你也可以听它的意见尝试发送,保不齐就发送成功了。另外,因为Ubuntu不是滚动更新,如果不是用长期支持版本的话,每半年就会有新的版本推送。这个更新是较为危险的,很可能会更新失败而无法使用。所以如果你没有能力解决这个问题,那么你可以使用长期支持的版本,或者使用我下面推荐的这个——Manjaro

图片来源lulinux

Manjaro是基于Archlinux的发行版,最大的特点就在于完全图形化和自动化了ArchLinux的安装过程,并且拥有一系列图形化的驱动和内核配置软件,这使得用户既可以享受到ArchLinux分支的各种优势,又可以一键设置驱动,亦能根据不同的使用条件而部署不同类型的内核,还不必花费大量时间阅读ArchWiki来安装系统,并从全文本界面逐步配置起图形界面来。

刚刚我说到可以享受到ArchLinux分支的各种优势,那么它的优势在哪儿呢?

软件相比其他分支的发行版总是最新的。得益于Arch近乎简陋的包管理工具,没有版本范围限制的Arch系总是可以毫无顾忌的把软件包更新到最新。但最新同样可能出现一些意料之外的bug,所以Manjaro调慢了更新速度,一般是在Archlinux更新的两个礼拜后Manjaro才会跟进这个版本的更新,如果这过程中出现了问题,Manjaro还会暂停版本的跟进。所以,可以说Manjaro消除了Archlinux用户“滚挂”的顾虑。

另外一个优势,Archlinux特有的AUR软件仓库,使得几乎所有你能想到的软件都可以通过一条命令完成安装,而这条命令Manjaro还给图形化了。所以这相对于Ubuntu还需要去网上下载来讲简单了太多。

但我为什么只给它拍到了第三位呢?首先,我自己是Debian起家,最后不留神入了Arch邪教就出不来的用户。所以我还是偏爱Debian系发行版的;其次,装好的时候中文环境不佳,这对新手来说设置可能有些难度;最后,使用了wayland显示服务。虽然相对于xserver有很多改善,但由于现阶段软件兼容性的问题,所以我最终没有去选择它,而是选择了它的父亲ArchLinux。但我并不推荐新手选择Archlinux,它纯命令行的安装过程可能会让你没入门就放弃。

最后,如果有较多的游戏需求,pop!OS这个基于Ubuntu的发行版可能个不错的选择。相对于前边三个发行版,pop! OS开箱即配置好了游戏环境——我指的是Windows游戏。要知道,自己在Linux下配置一个完善的Windows游戏环境是很困难的。此时这个系统的优势便体现了出来:通过内置软件一键装好显卡驱动后便可直接运行。

图片来源linux公社


相对客观的发行版推荐

这就是我推荐作为刚入门的你的四个发行版。你可能会发现我没有推荐RedHat系的发行版以及openSUSE。主要是因为我很少接触这两个分支,仅仅在服务器上面使用CentOS这个RedHat分支的系统而已,其他的包括我的树莓派、我的笔记本 和台式机上面全都是Debian和Arch的发行版。这也是每个Linux用户心中对发行版的排名不一样的原因所在。所以,想要较为客观的选择发行版,可以尝试通过我现在要介绍的这两种方法决定一下。

第一种,查看distrowatch.com。这个网站聚合了几乎所有的类Unix发行版,并且根据点击量有一个排名列在这里。自然排名越高就说明热度越高,进而也能有一定的参考价值。但可以肯定的是,这里边肯定会有刷榜的情况出现,而且它也仅仅是展现了distrowatch用户的一个倾向,所以对你来说可能仅仅是一个参考作用,大概看看就好。想更有针对性的选择一款发行版,可以尝试Distro Chooser这个在线调查。它拥有中文页面,只需要根据自己的情况回答好16个问题,便可以给出一些适合你的发行版。相对来说可以得到一个比较客观的结果可以供你参考一下。如果你不喜欢听别人的主观意见,自己又不好决定,那么可以来这个网站来试一试。


其实,关于如何选择发行版这个问题可能仅仅对刚刚接触的人有参考价值。只要你真正试用过一段时间Linux了就应该能明白,在发行版上面纠结其实并没有什么太大的用处。得益于Linux的高度自定义性,你可以把任何一个发行版改造成你想要的样子,提前选择仅仅是为了省去改造的这个过程而已。但如果是初次接触,那么选择一个适合自己的发行版来使用,也许能体会到“一见钟情”的感觉吧。我是没法体会这感觉了,都用了十年Linux了,它再不好使的时候我都经历过,这进步的过程是自己经历的,必然也是感觉不到惊艳之处了。