标签 KDE 下的文章

视频点此

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

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.

视频点此
第一期第二期

一、为什么需要

举个形象的例子:你的Linux装在一个50G的硬盘中。就是说,能用的空间就只有50G。现在,加入了一个100G的硬盘。

要知道:Linux中任何分区都需要映射到某一个文件夹上面才能使用。这个映射过程叫做“挂载”,而这个显示分区内容的文件夹就是“挂载点”。一旦文件夹变成了挂载点,这个文件夹下的内容便不能被显示出来了。而Linux的很多文件放置的位置都是统一的,你不能更改。所以这100G你要怎么加入到系统中使用?

仔细想想,挺不好搞的吧?

新建一个文件夹当作挂载点:你只能存储你自己的东西到这上面,大多数内容还是在50G的硬盘中;

挂载到内容多的文件夹下:不但需要先将所有东西移动过去,还需要调整fstab文件。而且容量是事先定死的,如果其他文件夹占用也高了,还需要经历无损调整分区—新建分区—移动数据—设置挂载点这样繁琐的步骤。不好。

这时候,lvm的作用便显现出来了。

二、优势

lvm把任何你想的分区整合成一个大的虚拟硬盘,使你可以在这上面进行分区操作。而任何事后加入的硬盘,都可以在不关机的情况下进行整合操作。

就像Windows的跨区卷,可以将不同硬盘的空闲空间整合成一个分区使用,容量等于空闲空间之和。但lvm更灵活的地方,在于它整合之后,出现的是一个新的“硬盘”,用户可以在这个“硬盘上面”再分区。

三、方法

总是有人认为Linux需要用命令,一般人用不懂。我也不知道这种印象是怎么来的,大概是因为网上能找到的教程都是命令形式?那我就用图形化的来展示一下。参见这里

在新的笔记本上头安装好Arch后,最近几次突然出现了个奇怪的问题:

系统检查完成后,sddm总是起不来。但系统是已经启动成功的,因为我可以切换到tty界面进行操作。但尝试在tty界面输入sddm,却给我返回错误:

Failed to read display number from pipe

但是,通过systemctl restart sddm重启一次服务,却又可以正常启动了,直到下一次重新启动需要再进行一次这个步骤。

真是头一次遇到这种问题……

后来在Archlinuxcn的群组里搜索了一番,看到了一个解释,说是熵不够。可以通过命令

cat /proc/sys/kernel/random/entropy_avail

来查看熵值。想要sddm启动需要差不多2000的样子。

我照做了。然后得到了刚启动时候的熵值:20

虽然到了也没明白为什么sddm启动要检查熵,但是这很明显差得太多了,那问题应该就是这里了。

有没有什么办法能提高熵的值呢?还真有。

pacman -S rng-tools
systemctl enable rngd

重启。

真好,刚启动就2700多了呢。

但是,对sddm启动的解决卵用也没有…

后来又看到一个,大概意思就是:

kabylake架构的CPU,要把驱动加入内核

来试一下:

  1. 安装intel驱动:pacman -S xf86-video-intel
  2. 编辑/etc/mkinitcpio.conf,在MODULES=的括号内增加intel_agp i915
  3. 重新生成initramfs。以防万一,先不做覆盖:mkinitcpio -c /etc/mkinitcpio.conf -g /boot/linux-i915.img
  4. 重新启动。在grub处按 e 编辑启动项,将 initramfs-linux.img 位置更改为 linux-i915.img,按F10启动

啊…终于成功了。虽然熵才30多,但sddm也终于能一次起来了。

既然启动成功了,就可以把这个自定义的名称更改成initramfs-linux.img并覆盖原先的镜像了。不过为了安全,把原先镜像做个备份大概也是有必要的。

不过,虽然解决这个问题了,但我到底也没闹清楚为什么这种架构的CPU要启用KMS,更不明白为啥提高熵也能解决一部分sddm卡住的问题…

不过还行,从解决到现在,驱动啥的都滚了几个版本了,找时间去掉这俩模块再试一下

这个问题应该是从72版本开始的——如果我没记错的话。但是目测不会是Chrome的bug,因为到了76版本更加的变本加厉了…不过还好,办法总比困难多。

1、版本号≤75

具体来说应该就是72~75吧。这几个版本号还是比较容易解决的。只需要去往chrome://flags,将Enable Network Service给禁用掉即可。

究其原因(下面这些都是我猜的),大概就是从72开始,Chrome将网络服务作为独立进程执行。而系统监听的是Chrome这个进程,并没有相应真正发送网络请求的进程,所以Chrome的请求便直接发出去,不能经过代理了。而将这个选项禁用,也就是让Chrome的网络服务运行在程序内,那么网络请求便可以被监听到,PAC模式便也正常了。

2、版本号76+

76应该是最新的版本号了——至少在Archlinux里面是这样的。

即使之前你已经调整过,并且顺利解决了,但当你升级到了76这个版本号的时候,就能惊喜的发现:这个问题又复发了。

如果你还想按照75-的那种操作方法修正,那么很遗憾,Enable Network Service这个选项已经不存在了。

所以可以证明一件事:72~75出现的问题不能说是Chrome的bug,而是Network Service这个新特性导致的问题,而且Chrome大概是不打算修复这个问题的…

但总不能一直使用全局系统代理吧…国内网站绕一圈国外再回来…太慢了。

所以还是要想想解决方案,让PAC模式可以应用。

如果在Chrome://flags里边,以Network Serivce为关键字查找的话,会找到一项Runs network service in-process的选项。回顾一下刚刚说到的出现这个问题的原因,仿佛这个选项会管用?

很不幸,这个选项是没用的。所以暂时就不要想着能通过Chrome自己的设置来解决这个问题了。

好在Chrome的插件里边有一个神器——SwitchyOmega。通过它来判断是否需要使用代理就行了。


  • 从Chrome应用商店安装 Proxy SwitchyOmega
  • 进入插件设置页,新建情景模式(我这里名字叫做proxy),类型代理服务器
  • 在这个情景模式下,设置代理协议为SOCKS5,服务器和端口为127.0.0.1:1080(这两项应该与你代理软件内对应的本地设置相同)
  • 新建一个情景模式(我这里名字叫做auto switch),类型自动切换模式
  • 在这个情景模式下,添加规则列表,格式为AutoProxy,网址https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt,对应这一条的情景模式选择刚刚创建的proxy。看图

  • 点一下立即更新情景模式,待正文框内出现内容,代理便设置完成

现在,点击Chrome地址栏边上的SwitchyOmega图标,选择auto Switch,问题便解决了。


其实这样设置之后,并没有通过系统的PAC,而是Chrome自己判断并决定是直接访问还是间接访问。也就是说,即使系统没有配置好全局的PAC,而仅仅是启动了一个代理服务,通过该方法同样可以让Chrome顺利跨越。所以,为了不荒废系统代理的作用,还是希望有朝一日Chrome的Network Service可以被系统监听到并响应吧…

在开源驱动和闭源驱动之间进行切换时,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) 中重新配置一下。

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