2016-10-12

折腾OpenWRT软路由Designated Driver trunk 4.4核心的Hyper-V支持

致谢

我参考的是原始作者Ning Ye的代码,感谢Ning Ye,https://patchwork.ozlabs.org/patch/431583/


简介

此种办法是通过Kernel的Module加载Hyper-V相关支持,是本人目前唯一找到源代码并且在所有版本(Attitude Adjustment,Barrier Breaker,Chaos Calmer和4.4核心trunk)测试通过的Hyper-V支持方法。

同时这也是最大限度使用OpenWRT官方源代码的Hyper-V支持方法;
其他有些Hyper-V虽然有“源代码“但是似乎对代码修改太多,需要从github迁出整份第三方修改的源代码才行,而不是简短的一个patch可以搞定了,以至于失去了通用性。

其他各种大牛、大神有各种支持Hyper-V的办法,非常牛叉,非常高大上,可惜没有源代码,无从研究。
根据OpenWRT的协议,照理说各种对OpenWRT的修改都应该公开源代码的……

CC和BB的Hyper-V支持

关于Chaos Calmer(同时适用于15.05和15.05.1)的Hyper-V补丁源代码可以看这里,https://github.com/tedaz/Hyper-V-support-for-OpenWrt-Chaos-Calmer

关于Barrier Breaker的Hyper-V补丁源代码可以看这里,https://github.com/tedaz/Hyper-V ... Wrt-Barrier-Breaker

DD trunk 4.4核心的Hyper-V支持

下面的办法是为了让OpenWRT Designated Driver trunk源代码编译后,可以运行在Hyper-V虚拟机上,且支持标准网卡(而不是Legacy百兆网卡)。

我用的是今天(2016-10-12)迁出的trunk源代码,因为Designated Driver依然处于Bleeding Edge状态,以后的代码很可能无法应用此补丁。

如果仅仅是测试目的,可以回滚到今天的代码应用补丁然后直接编译。
当然,关键还是弄明白补丁的意思,这样就可以手动修改今后版本的源代码了,而不需要依赖于预制做的补丁。

迁出源代码,

git clone git://github.com/openwrt/openwrt.git

最新的kernel 4.4已经彻底删除了对Hyper-V虚拟化支持的virtual.mk文件,
故首先到OpenWRT官网代码库下载历史版本的virtual.mk文件,

下载地址https://dev.openwrt.org/browser/ ... x/modules?rev=47415

下载virtual.mk文件,并拷贝到
./package/kernel/linux/modules/virtual.mk

建议备份virtual.mk文件,以备不时之需。

此时运行
make menuconfig
Kernel modules中并不会显示Virtulization菜单,需要
touch ./package/kernel/linux/Makefile

然后再次运行
make menuconfig
就会显示Virtulization菜单了。

只需要选中
kmod-hyperv-net-vsc

kmod-hyperv-storage
即可。
另外两个不用选。

Target Images选中ext4,然后用qemu-img命令转换为vhd就可以创建Hyper-V虚拟机了。

注:Openwrt默认的qemu-img生成的vhd有问题,无法使用。

保存后进行编译。

编译后生成img文件,运行命令转换为vhd,

qemu-img convert -f raw ./bin/x86/openwrt-x86-generic-combined-ext4.img -O vpc ./bin/x86/openwrt-x86-generic-combined-ext4.vhd

Windows Server 2008 R2直接创建虚拟机,选中标准网;
Windows Server 2012 R2创建虚拟机时选中Generation 1虚拟机,然后选中标准网卡。


源代码

下载的virtual.mk文件需要在文件末尾添加下述内容

#
# Hyper-V Drives depends on x86 or x86_64.
#
define KernelPackage/hyperv-balloon
  SUBMENU:=$(VIRTUAL_MENU)
  DEPENDS:=@(TARGET_x86||TARGET_x86_64)
  TITLE:=Microsoft Hyper-V Balloon Driver
  KCONFIG:= \
    CONFIG_HYPERV_BALLOON \
    CONFIG_HYPERVISOR_GUEST=y \
    CONFIG_PARAVIRT=n \
    CONFIG_HYPERV=y
  FILES:=$(LINUX_DIR)/drivers/hv/hv_balloon.ko \
    $(LINUX_DIR)/drivers/hv/hv_vmbus.ko
  AUTOLOAD:=$(call AutoLoad,06,hv_balloon)
endef

define KernelPackage/hyperv-balloon/description
  Microsofot Hyper-V balloon driver.
endef

$(eval $(call KernelPackage,hyperv-balloon))

define KernelPackage/hyperv-net-vsc
  SUBMENU:=$(VIRTUAL_MENU)
  DEPENDS:=@(TARGET_x86||TARGET_x86_64)
  TITLE:=Microsoft Hyper-V Network Driver
  KCONFIG:= \
    CONFIG_HYPERV_NET \
    CONFIG_HYPERVISOR_GUEST=y \
    CONFIG_PARAVIRT=n \
    CONFIG_HYPERV=y
  FILES:=$(LINUX_DIR)/drivers/net/hyperv/hv_netvsc.ko \
    $(LINUX_DIR)/drivers/hv/hv_vmbus.ko
  AUTOLOAD:=$(call AutoLoad,35,hv_netvsc)
endef

define KernelPackage/hyperv-net-vsc/description
  Microsoft Hyper-V Network Driver
endef

$(eval $(call KernelPackage,hyperv-net-vsc))

define KernelPackage/hyperv-util
  SUBMENU:=$(VIRTUAL_MENU)
  DEPENDS:=@(TARGET_x86||TARGET_x86_64)
  TITLE:=Microsoft Hyper-V Utility Driver
  KCONFIG:= \
    CONFIG_HYPERV_UTILS \
    CONFIG_HYPERVISOR_GUEST=y \
    CONFIG_PARAVIRT=n \
    CONFIG_HYPERV=y
  FILES:=$(LINUX_DIR)/drivers/hv/hv_util.ko \
    $(LINUX_DIR)/drivers/hv/hv_vmbus.ko
  AUTOLOAD:=$(call AutoLoad,10,hv_util)
endef

define KernelPackage/hyperv-util/description
  Microsoft Hyper-V Utility Driver
endef

$(eval $(call KernelPackage,hyperv-util))

#
# Hyper-V Storage Drive needs to be in kernel rather than module to load the root fs.
#
define KernelPackage/hyperv-storage
  SUBMENU:=$(VIRTUAL_MENU)
  DEPENDS:=@(TARGET_x86||TARGET_x86_64) +kmod-scsi-core
  TITLE:=Microsoft Hyper-V Storage Driver
  KCONFIG:= \
    CONFIG_HYPERV_STORAGE=y \
    CONFIG_HYPERVISOR_GUEST=y \
    CONFIG_PARAVIRT=n \
    CONFIG_HYPERV=y
  FILES:=$(LINUX_DIR)/drivers/scsi/hv_storvsc.ko \
    $(LINUX_DIR)/drivers/hv/hv_vmbus.ko
  AUTOLOAD:=$(call AutoLoad,40,hv_storvsc)
endef

define KernelPackage/hyperv-storage/description
  Microsoft Hyper-V Storage Driver
endef

$(eval $(call KernelPackage,hyperv-storage))

创建并应用hyper-v.patch

注意创建文件时使用linux格式的换行。
  
diff --git a/target/linux/x86/config-4.4 b/target/linux/x86/config-4.4
index 13f1f9c..0c401af 100644
--- a/target/linux/x86/config-4.4
+++ b/target/linux/x86/config-4.4
@@ -216,6 +216,16 @@ CONFIG_HW_RANDOM=y
 CONFIG_HW_RANDOM_GEODE=y
 CONFIG_HW_RANDOM_VIA=y
 # CONFIG_HYPERVISOR_GUEST is not set
+# CONFIG_HYPERV is not set
+# CONFIG_HYPERV_BALLOON is not set
+# CONFIG_HYPERV_NET is not set
+# CONFIG_HYPERV_STORAGE is not set
+# CONFIG_HYPERV_UTILS is not set
+# CONFIG_HYPERV_KEYBOARD is not set
+# CONFIG_FB_HYPERV is not set
+# CONFIG_HID_HYPERV_MOUSE is not set
+# CONFIG_VMWARE_BALLOON is not set
+# CONFIG_MOUSE_PS2_VMMOUSE is not set
 CONFIG_HZ_PERIODIC=y
 CONFIG_I8253_LOCK=y
 # CONFIG_I8K is not set

2016-09-06

搞了一下Fedora,碰巧搞定了Arch任务栏网络图标和图形界面vpnc

Fedora release 24 (Twenty Four) Workstation

先说Fedora,本次尝试的是Fedora release 24 (Twenty Four) Workstation版本。安装之后默认的桌面环境是Gnome。默认显示效果什么的也还行,开启和关闭VMware Workstation虚拟机显卡的3D功能,对图形界面影响不大。

yum命令被废弃,请使用dnf命令

一个比较明显的变化是yum命令被废弃,取而代之的是dnf命令。
例如:
dnf update #更新系统
dnf install nano #安装nano

vm-tools

默认安装,会自动安装open-vm-tools-10.0.5-3.fc24.x86_64,宿主与虚拟机之间拷贝什么的都是正常的。

相比而言,Arch Linux今天更新到最新版,也只有open-vm-tools-6:10.0.7-5。
不知道是不同Linux的版本叫法不同,还是真的差了这么多版本。

Fedora 24让普通用户可以使用sudo命令的正确方法

usermod john -a -G wheel
Fedora默认允许wheel组的成员使用sudo命令,所以只需要将john加入到wheel组就可以了。不要直接编辑/etc/sudoers文件。

Fedora 24默认开启了密码策略,要求使用比较复杂的密码。对于生产系统也需很必要;但是对于测试用的系统来说则完全没必要,甚至与有可能导致在测试系统上,为了满足密码复杂度而输入了生产系统的密码。所以,

禁用密码复杂度

nano /etc/security/pwquality.conf
取消注释一些行——比如最短密码,是否要求混合字符什么的。取消注释就是放开限制;注释状态是要求复杂密码的状态。
保存设置文件,重启生效。
之后可以使用
passwd root
passwd john
将两个用户修改为简单密码。

禁止启动时的等待

nano /etc/default/grub
将其中的5秒等待时间改为0秒,开启直接启动,不显示引导菜单。

修改后需要重新生成grub,
grub2-mkconfig -o /boot/grub2/grub.cfg

安装chromium

dnf install chromium

安装flash

https://get.adobe.com/flashplayer/otherversions/
下载Choose Linux 64-bit, FP 22.0 (or later) for other Linux 64-bit, PPAPI.

Unpack it into /usr/lib64/chromium-browser/PepperFlash/.

此时会出现一个问题,虽然root和john的密码已经修改为简单密码了。但是由于系统安装时设置的是复杂密码,所以系统默认的Keyring密码依然是当初的复杂密码。
也就是每次启动Chromium浏览器需要输入的那个密码依然很复杂。

修改Keyring 密码

图形界面搜索password,启动
Password and Keys->
Password->Login
右键,Change Password

安装Opera

nano /etc/yum.repos.d/opera.repo
添加下列行,
[opera]
name=Opera packages
type=rpm-md
baseurl=https://rpm.opera.com/rpm
gpgcheck=1
gpgkey=https://rpm.opera.com/rpmrepo.key
enabled=1

运行命令
dnf install opera-stable

KDE桌面环境

由于最近折腾Arch Linux,对KDE Plasma很有好感,所以手动在Fedora上安装了KDE,

dnf group install kde-desktop-environment
重启后选中KDE登录。

之后需要更改默认的输入法设置,
Input Method Selector
选中ibus
重启生效

然后可以安装ibus-rime输入法,实测没有候选字黑色方块问题

意外发现

本人愚钝,一直不知道Arch Linux的System Tray上为什么没有网络图标,就是那个点击后可以查看、设置网卡IP,VPN拨号等的那个网卡图标。
在Fedora上安装KDE后发现,竟然有这个小标志,键下图那个电脑样子的图标:






为什么Arch Linux的System Tray上就没有这个图标呢?
System Tray Settings->Extra Items中已经选中了Networks,可就是不显示。

搜索发现,需要开启一个服务,
systemctl enable NetworkManager.service
重启之后,Arch Linux的System Tray上就会显示那个网络图标了。可以方便的更改网卡设置,查看网络流量。

并且还可以直接VPN拨号,并显示VPN状态。
如果需要使用vpnc(Cisco pure IPSec VPN),需要安装一个包,
pacman -S networkmanager-vpnc

VPN连接后的图标样子,

2016-09-02

全新安装了Ubuntu 16.04 LTS

刚装完后直接安装VMware workstation 11.1.4的vm-tools。之后有点非法操作的提示,dist-upgrade一下就没有提示了。但是有时候重启时依然会出现非法操作,无所谓了,反正虚拟机很多时候都是保存状态,而不是关机重启。

开启了3D,速度也还好。

还是有vm-tools的3D升级提醒,但似乎不影响使用。

也安装了开源的chromium,并安装了flash插件。

编译openwrt成功。

Opera默认也有些乱码,安装中文支持后乱码显示,区域什么的依然是en_US,挺神奇的,不知道ubuntu的中文支持到底都干了什么。(相比Arch下的Opera,只要安装了infinality就无法显示中日韩字符了。)

16.04最大的特点是字体漂亮,默认是Noto了,“门”问题依然存在,不过好在Ubuntu默认已经创建了控制CJK字体优先级的文件,只需要更改CJK字体优先级——将SC(简体中文)调整到最前面就OK了:
nano /etc/fonts/conf.d/64-language-selector-prefer.conf
调整为下面的顺序,
            <family>Noto Sans CJK SC</family>
            <family>Noto Sans CJK TC</family>
            <family>Noto Sans CJK JP</family>

Ubuntu 16.04 LTS的整体感觉不错,继续作为主力Linux桌面系统使用。

2016-09-01

Arch Linux KDE Plasma的System Tray Settings在哪里?

肯定可以直接修改配置文件来更改System Tray Settings;但是一般人通常需要通过图形界面来进行修改。

然而,Arch Linux的System Settings中并没有System Tray Settings这一项。

下面是通过图形界面进入System Tray Settings的办法:

右键点击任务栏(Panel)的空白处,然后点击右键菜单中的Panel Options,鼠标悬停在System Tray Settings上会出现System Tray及其左边那个小标志,点击那个小标志,就会出现System Tray Settings菜单了。



2016-08-26

VMware虚拟机折腾Arch Linux(4)中文输入法

Arch有两种输入法平台,分别为fctix和ibus。

中文输入法fcitx

Arch关于fxitx中文输入法的官方Wiki:
https://wiki.archlinux.org/index.php/Fcitx_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

安装fcitx的基本包,
pacman -S fcitx fcitx-im kcm-fcitx

安装fcitx的rime输入法,这是目前最好用、最强大的Linux输入法,支持ibus及fcitx。
pacman -S fcitx-rime

修改配置文件
当前用户(非root)
nano ~/.xprofile
添加三行:
export XMODIFIERS=@im=fcitx
export QT_IM_MODULE=fcitx
export GTK_IM_MODULE=fcitx

重启生效
reboot

KDE图形界面设置,
System Settings->Regional Settings->Input Method->
取消选中“Only Show Current Language”
然后将Rime添加到
Current Input Method

开启leafpad或其他文本工具,
按CTRL+Space应该可以开启Rime输入法输入中文了。
输入法开启状态,按Ctrl+·(Tab上方的那个按键),
可以切换繁体,简体等。

实测,fcitx还是比较完美的,基本没发现什么异常。

Rime的一些简单设置

本人比较习惯当年拼音加加的效果:每页3个候选字,空格发射第1候选字,左shift发射第2候选字,右shift发射第3候选字。这样可以完全不使用数字键发射候选字,虽然每页只有3个候选字,但是常用字都在第一页或第二页,还是非常快的。

开始更改Rime的配置文件,
nano ~/.config/ibus/rime/default.yaml
编辑一行,
  page_size: 3 #每页3个候选字
 
增加一行,
  horizontal: true #候选字橫排显示

编辑两行,
    '/' : [ 、, ÷ ] #本人习惯用/键输入顿号
    '\' : [ /, \ ] #用\键输入斜线和反斜线

增加两行,
    - {accept: Shift_L, send: 2, when: has_menu} #分號選第二重碼
    - {accept: Shift_R, send: 3, when: has_menu} #引號選第三重碼

注释两行,防止shift键功能被重复定义
#    Shift_L: inline_ascii
#    Shift_R: commit_text

nano ~/.config/ibus/rime/symbols.yaml
编辑两行,
    '/' : [ 、, ÷ ]
    '\' : [ /, \ ]

Rime需要“部署”后新的配置文件才会生效。

部署:开启一个文本编辑工具,然后按Ctrl+Space开启输入法,
右键点击任务栏上的输入法图标,
然后点击Deploy(部署)。
会看到正在部署的提示,等显示部署完成,
新的配置文件就生效了。


此时左shift键会不正常,因为被KDE系统的全局热键占用了,将KDE的全局shift热键禁用,
System Settings->Regional Settings->Global Config->

Extra key trigger input method
改为
Disabled

有待解决的问题:如何使用Rime模仿拼音加加的笔画辅助的拼音输入法——也就是在拼音输入过程中,遇到罕见字,可以通过横竖撇捺折的方式快速排除同音字。
这里有个教程(http://tieba.baidu.com/p/3527609852),但是语焉不详,不知道如何将笔画辅助挂载到朙月拼音简体字中。 而且即使将其作为单独的schema,有些字可以用笔画输入;有些字依然没法用笔画输入,搜索yaml文件可以看到那些字的笔画码都是在的,但就是没法输入,不得其解。

中文输入法ibus

【会有第一候选字显示为黑色方块的问题】
官方Wiki在这里:
https://wiki.archlinux.org/index.php/IBus_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

安装ibus基本包,
pacman -S ibus ibus-qt

安装ibus-pinyin输入法,
pacman -S ibus-pinyin

当前用户(非root)
编辑配置文件,
nano ~/.bashrc
添加三行:
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus
export GTK_IM_MODULE=ibus

当前用户(非root)
ibus-setup
完成基本设置。


编辑配置文件,是ibus开机启动启动,
nano ~/.xprofile
添加一行:
ibus-daemon -x -d

设置ibus为默认输入法,而不是使用xim,
qtconfig-qt4
在 "Interface" -> "Default Input Method" (译:“界面”->“默认输入法引擎”) 中,选择“ibus”,而不是"xim"。

重启生效
reboot

之后开启文本编辑器试一下,会发现第一个候选字是黑色方块。
效果如下,

个人以为,这个问题应该与Arch有关,而不是ibus的问题;或者是pacman安装的ibus版本有问题。无论如何,这是Arch特有的问题。

理由:ibus在Ubuntu Desktop 14.04上是正常。

2016-08-24

VMware虚拟机折腾Arch Linux(3)中文显示支持及字体渲染优化

第三部分:中文显示支持及字体渲染优化


默认设置安装的Arch是不支持中文显示的,试着打开中文txt文件或这网页,显示都是小方块乱码。

下面是保持英文界面不变的情况下,添加中文显示支持的办法。

强烈不建议将整个界面都改成中文显示,会有很多小的技术细节和翻译术语问题。

目前主流的操作系统和软件,都能够(或者说应该能够)保证任何国家/语言的用户,无障碍(无乱码)的阅读任何语言的文档及网页。

比如,一个英国人很可能使用英文菜单及英文错误信息的操作系统,但他依然可能需要阅读某些中日韩文字的文档和网页。类似的,一个法国用户也可能需要在某些时候输入日文。

所以,中日韩字符的显示和输入法不应以中文界面为前提,因为正确显示中日汉字符和操作系统菜单的语言没有必然联系。

最后,即便是中日韩(CJK)也是三种不同的文字啊,很可能一个简体中文用户,除了输入简体中文,也需要输入日文和韩文。总不能为了输入日本,就把整个操作系统改成日文的吧?

然而,非常遗憾的是,Arch的官方Wiki以及Google搜索到的很多资料,都仅仅提供了将操作系统改为特定区域,然后才能正常显示/输入与之一致的语言。例如,为了显示简体中文和输入简体中文,必须修改当前用户的文件“~/.xinitrc”和“~/.xprofile”,设置export LANG=zh_CN.UTF-8,export LANGUAGE=zh_CN:en_US。这其实是强制设置了简体中文,如果CJK的J(日文)和K(韩文)显示出了问题,Wiki和教程根本就帮不上忙。因为搜索日文显示问题,会要求将区域设置成日文。

经过上述分析可知,就汉字(准确的说是中日韩文字) 显示来说,不需要针对区域/语言等进行任何设置,或者说可以随意设置区域和语言,完全不会(也不应该)对中文显示构成影响。

因为,即使是英国人,阿拉伯人用的电脑(显然他们的区域/语言设置不可能是zh_CN),他们在浏览中文网站或含有中文的页面时也应该正确显示中文汉字。

所以下面关于区域,语言的设置可以忽略,因为这些不是显示汉字所必须的。

真正必须的是,一定要安装一个支持中日韩语言的字体。
(Arch Linux和Windows 7等操作系统一样——英文版,阿拉伯文版等操作系统,只要安装了中文字体,就可以正确显示中文。系统的区域,时区设置,首选语言等设置并不影响中文网页和文档的显示。)

这里是Arch中文显示支持的官方Wiki,https://wiki.archlinux.org/index.php/Arch_Linux_Localization_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

由于区域和语言设置不是必须的,所以这里直接跳过这些设置。


中文字体和字体渲染

此时打开中文网页依然是乱码,因为缺少中文字体。
并且此时字体渲染显示效果可以用“惨不忍睹”来形容,甚至不如Ubuntu,更别说跟Windows比了。
这是字体和字体渲染问题,Windows有Clear Type向导用于优化字体渲染。Arch可以用下面的办法:

编辑配置文件,添加bohoomil来源,以便安装第三方字体渲染软件infinality,
nano /etc/pacman.conf:

添加下面的文字:
[infinality-bundle]
Server = http://bohoomil.com/repo/$arch

[infinality-bundle-multilib]
Server = http://bohoomil.com/repo/multilib/$arch

[infinality-bundle-fonts]
Server = http://bohoomil.com/repo/fonts

保存并退出。

运行命令更新一下系统,
pacman -Syu
会提示error,需要更新key。

运行下面的命令添加key,
pacman-key -r 962DDE58
pacman-key --lsign-key 962DDE58

再次更新一下系统,
pacman -Syyu

安装infinality,
pacman -S infinality-bundle infinality-bundle-multilib ibfonts-meta-extended

安装字体设置工具,
pacman -S fontconfig

开一个终端,运行命令进行字体设置,
fc-presets set
1) combi
2) free
3) ms
4) reset
5) quit
Enter your choice...

选择3,也就是微软Windows风格的字体渲染效果,重启生效,
reboot

infinality默认会安装Google Noto CJK字体,相当牛的字体,支持任何UTF语言的文字显示,当然也包括简体中文,正体中文,日文和韩文。

综上所述,不需要任何特别的区域,语言设置。
只要安装infinality就可以支持中文显示了,因为infinality自动安装了CJK字体。
同时infinality还可以调整文字渲染,使显示效果更漂亮。
infinality是个一举两得的好东西!

infinality的Google Noto字体bug

重启之后会发现:
  1. 字体变漂亮了,不仅中文字体,连英文字体也变得更清晰漂亮了;
  2. 个别中文字符明显有问题,比如“关”,“门”等。
下面这几个汉字显示有问题:
关 (U+5173)
复 (U+590D)
甩 (U+7529)
门 (U+95E8)

这是有问题的显示截图(Snapshot of Google Noto 1.004 CJKjp bug)


这是正确的显示效果(Snapshot of correct Chinese sinograms)


Noto字体确实有过bug,具体见这里, https://github.com/googlei18n/noto-fonts/issues/151
但是Google说在Noto的1.002版已经修复了,然而实测发现,infinality安装的是Noto 1.004,可是问题依旧。

直接到Google Noto字体官网,https://www.google.com/get/noto/,下载476.2MB的zip包手动安装也一样有问题。

具体问题出在那几个CJKjp的字体文件上。

恕本人愚钝,实在是不明白为什么中文显示时infinality会自动选中那些CJKjp字体,而不是选择更正常的CJKsc;而且也实在是搞不明白如何修改配置来强制使用CJKsc字体显示简体中文。

似乎跟区域也没有关系,即使删除所有的区域,仅保留zh_CN.UTF-8,并且将操作系统界面设置成简体中文,infinality依然会坚持选择CJKjp字体。

猜测:
  1. infinality有问题:在选择字体时认为任何CJK字体应该都可以同时正常显示所有中日韩字符,事实上也应该如此,所以infinality选择第一个可用的CJK字体,也就是CJKjp。
  2. Google Noto字体有问题:理论上,任何CJK字体,均应该可以同时正常显示所有中日韩字符。然而,同样是Noto的CJK,CJKsc可以正常显示中日韩,但是CJKjp却在显示个别汉字时出现错误,这应该是bug。
总结一下,如果infinality能够配置使用CJKsc字体渲染简体中文,应该可以解决上面问题;或者,如果Google Noto字体的CJKjp字体做到同时正常显示所有中日韩字符,应该也可以解决上述问题。

然而,infinality和Google Noto目前的版本都没有解决上述问题;或者是本人不知道正确的设置方法。

修复bug

运行命令看一下CJK字体的优先级,可以看到默认选中的是CJK  JP,所以有些中文汉字被显示成了日文汉字。
fc-match sans-serif -s|grep 'CJK'

回显:
NotoSansCJK-Regular.ttc: "Noto Sans CJK JP" "Regular"

强制CJK字体优先级:
nano /etc/fonts/conf.d/64-language-selector-prefer.conf

向文件中粘贴下述内容
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <alias>
        <family>sans-serif</family>
        <prefer>
            <family>Noto Sans CJK SC</family>
            <family>Noto Sans CJK TC</family>
            <family>Noto Sans CJK JP</family>
        </prefer>
    </alias>
    <alias>
        <family>monospace</family>
        <prefer>
            <family>Noto Sans Mono CJK SC</family>
            <family>Noto Sans Mono CJK TC</family>
            <family>Noto Sans Mono CJK JP</family>
        </prefer>
    </alias>
</fontconfig>

再次查看CJK字体优先级,
fc-match sans-serif -s|grep 'CJK'

回显:
NotoSansCJK-Regular.ttc: "Noto Sans CJK SC" "Regular"
此时已经默认选中CJK SC了,也就是简体中文。

infinality的副作用——导致Opera乱码

无论如何设置,安装何种字体,只要安装了infinality,Opera就无法显示中日韩字符。官方Wiki没有提供详细的解释及解决办法,https://wiki.archlinux.org/index.php/Opera。但是这个Wiki似乎并不是针对infinality导致的问题。

下面问题截图。
 
图中Chromium,Firefox以及Konqueror均可以正确显示中文汉字(可见系统设置应该是正确的,字体是ok的,而且本人也知道如设置浏览 器以便正确显示中文汉字),惟独Opera的汉字显示是乱码,这应该可以说明Opera是有问题的;另一方面,Opera是安装infinality之后出现的乱码,下载infinality并随便安装一个CJK字体后,Opera就可以正常显示中日韩字符了,这说明infinality也是有问题的。

无论如何,是infinality和/或Opera的问题。与Arch Linux系统的区域/语言等设置无关,因为其他的浏览器已经在相同的设置下正确显示中文了。

2016-08-23

VMware虚拟机折腾Arch Linux(2)基本设置,微调和open-vm-tools

第二部分:基本设置,微调和open-vm-tools

开启终端的方法

点击任务栏的最左侧图标,直接键盘输入konsole,然后鼠标点击就可以开启一个终端了。

修改boot菜单等待时间

编辑文件
sudo nano /etc/default/grub
将其中的GRUB_TIMEOUT=5改为“0”,以便不等待直接启动就进入系统。

修改之后需要重新生成配置文件才能生效,
grub-mkconfig -o /boot/grub/grub.cfg

重启生效。

安装基本工具

sudo pacman -S net-tools gtkmm

安装open-vm-tools

如果之前安装了VMware官方tools,需要先卸载。两种vm-tools不能共存。
vmware-uninstall-tools.pl

sudo pacman -S open-vm-tools

似乎,下面的命令很关键,必须运行。
否则会出现与宿主间拷贝文件时卡死的现象。
systemctl enable vmware-vmblock-fuse.service

重启生效
reboot

试一下,现在Arch虚拟机和宿主之间,互相拷贝文本字符或文件,应该都是流畅的。

安装VMware Tools(不推荐)

VMware官方工具并不支持Arch,需要使用下述办法安装,但是即使安装完成也会有各种问题。(此方法实际上是使用Arch的一个第三方patch将VMware官方的9.0版vm-tools修补后进行安装。)不推荐此法,如有需要可以参看Arch官方wiki,https://wiki.archlinux.org/index.php/VMware/Installing_Arch_as_a_guest
主要问题是,至少本人一直遇到这个问题,这样安装的VMware Tools仅对root用户有效,其他用户一律无效,这太浮云了吧。无论用root直接安装,还是普通用户sudo安装,均只有root会自动加载VMware Tools,其他用户就是无法启动VMware Tools。
可能我的情况是个例吧,google也搜索不到关于这个问题的描述。

确保交换分区已经启用

运行命令查看交换分区情况,
free -mh
很可能看到的是swap total 0GB,这是由于交换分区没有正确挂载及启用。

编辑fstab文件,保证开机挂载swap交换分区,
nano /etc/fstab
添加
/dev/sda2       none    swap    sw      0       0

重启生效
reboot

重启之后再次
free -mh
应该可以看到类似下面的信息,
              total        used        free      shared  buff/cache   available
Mem:           1.9G        1.6G         77M         47M        316M        205M
Swap:          4.0G        1.4G        2.6G

桌面颜色

个人比较习惯纯色桌面,右键点击桌面,Desktop Settings->Wallpaper->Wallpaper Type: Plain Color
Color为
#2E3436

开机自动点亮NumLock

Arch默认开机后NumLock没有点亮,官方Wiki提供了多种开机点亮NumLock的方法。
实测,由于使用的是sddm,只有Wiki中的sddm方法管用,剩余其他方法均无效。
nano /etc/sddm.conf
增加
[General]
Numlock=on

重启生效。

ls命令

添加几个常用的alias,
nano ~/.bashrc

# enable color support of ls and also add handy aliases
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'

# some more ls aliases
alias ll='ls -alh'
alias la='ls -A'
alias l='ls -CF'
保存,退出终端。
再次开启终端,已经可以使用ls的alias并且是彩色显示了。

安装浏览器及常用软件


浏览器:Firefox

pacman -S firefox

浏览器:Opera

pacman -S opera

git

git是必须的,后期免不了签出各种代码才能安装AUR中的第三方软件
pacman -S git


阅读器

电子书阅读,支持CBZ, CBR, CBC, CHM, DJVU, EPUB, FictionBook, HTML, HTMLZ, LIT, LRF, Mobipocket, ODT, PDF, PRC, PDB, PML, RB, RTF, SNB, TCR, TXT and TXTZ.
pacman -S calibre

计算器

pacman -S genius
pacman -S kcalc

浏览器:谷歌浏览器

Chromium是Chrome的开源版。
Arch的官方源中只有Chromium,使用起来和Chrome一样。

pacman -S chromium

试一下这个链接http://www.caribbeancompr.com/moviepages/120910_984/index.html,应该会提示Flash无法播放。

Flash是一种过时的技术,但是有些网站依然在使用,所以只能靠安装第三方软件解决。

安装Chromium播放flash的插件:

创建文件夹,用来保存签出的源代码
mkdir ~/AUR
cd ~/AUR

签出源代码
git clone https://aur.archlinux.org/chromium-pepper-flash.git

进入源代码文件夹
cd chromium-pepper-flash

编译并安装插件, 会自动移除编译过程中生成的中间文件
makepkg -sri
此过程中会提示输入root密码才能完成安装。

关闭Chromium浏览器并重新开启Chromium浏览器应该可以播放Flash了。

如果需要卸载这种自己编译的AUR软件,运行下面的命令,
sudo pacman -R chromium-pepper-flash

Dolphin支持压缩包

因为在安装Arch操作系统时选择了尽可能少的包,所以Arch的默认文件管理器Dolphin不支持压缩包,需要安装ark压缩包工具,
pacman -S ark
之后重启dolphin即可看到压缩、解压缩菜单。


VMware虚拟机折腾Arch Linux(1)创建虚拟机完成基本安装

引言


个人以为,对于从Windows过来的Linux初学者来说,Ubuntu Desktop是最好用,最正常的Linux;Arch Linux绝对算不上容易上手的Linux。

但是,Ubuntu有点过于大而全,以至于无论如何调整,优化,总是有些停滞感,感觉速度上不够清爽,所以决定再次尝试折腾Arch Linux。

之前曾经折腾过一次Arch,但是很失败,印象中是卡在图形界面的问题上了。

这次找了一个YouTube上的视频教程,这个教程确保最基本的安装,引导以及图形界面是正常的,链接在这里https://www.youtube.com/watch?v=okct6NwqF_Y&index=1&list=FL4Diuo3KKFSkg1-kLrvZO0Q

相比之下,很多文字版的教程或多或少的忽略了一些细节,以至于难以依照教程重现安装过程。

基本需求:

  1. 必须是基于VMware  Workstation的虚拟机(任何Linux在短时间内都没法直接作为宿主并彻底替代Windows桌面电脑,必然需要在虚拟机内运行;而桌面虚拟化最正常最好用的到目前为止依然是VMware Workstation,其他都不如这个容易上手)。所以教程中必须包含vmware-tools或open-vm-tools的细节;
  2. 必须包含图形界面,因为是作为桌面电脑使用的。如果是Headless服务器,CentOS之类的更合适;
  3. 必须在英文界面下,完美支持中文显示和中文输入法,且能够正确区分繁体和简体中文。汉化界面有太多的技术细节和术语统一问题,并且考虑到在遇到问题时更方便用Google搜索,英文界面也是必须的。然而,操作系统必须能够正常显示中文,日文和韩文,也就是所谓的CJK(Chinese,Japanese,Korean),否则可能会导致很多网页都没法正常显示。类似的,中文输入法也很重要,不需要太好用,但是最基本的文字输入功能要有。特别的,很多纯老外作的软件,程序无法正确区分(同一个程序或代码运行的结果,有的汉字是繁体,有的汉字是简体,而程序只是弱智的认为是“中文”)繁体与简体中文,这也是有问题的。虽然可以勉强用,但是严重影响心情。
无论如何,折腾Arch之前都要有强悍的网络连接,因为Arch无法离线安装,所有大约1.5GB的安装文件必须在线下载,而且是需要“强悍”的连接,因为Arch的很多镜像服务器已经被干扰了,下载时断时续经常超时;必须使用“强悍”连接才能保证安装效率。

那个视频教程完美的涵盖了“基本需求”的第1点和第2点,第3点需要自己摸索,因为那个视频教程显然是老外做的。

第一部分:创建虚拟机完成基本安装


创建虚拟机,选择Other Linux 3.x kernel 64-bit;

磁盘容量20GB,SCSI,动态,无需分卷;

CPU选择两个核心就够了;

内存2GB;

不选择Accelerate 3D graphics。否则会出现KDE  Plasma图形界面极其卡顿的现象;

加载Arch官网的iso光盘并引导虚拟机。

选择第一项,引导x64的Arch;

运行
fdisk -l
看一下磁盘的名字,应该是sda。

开始分区,
cfdisk /dev/sda

一定要选择
dos
格式。因为后续需要用grub引导程序,dos模式也就是MBR模式可以一次成功;gpt模式则是这种折腾。

然后点击
New

创建一个1GB的引导分区,类型为Linux,并选中bootable,之后会将grub引导安装到这个分区
1GB, Linux, boot

再创建一个4GB的交换分区,类型为swap
4GB, swap

最后将剩余空间创建为一个Linux系统分区,用于安装操作系统
15GB, Linux

点击
Write
保存修改。

然后
Quit
即可。

再用
fdisk -l
看一下,应该是下面的显示
Device     Boot    Start      End  Sectors Size Id Type
/dev/sda1  *        2048  2099199  2097152   1G 83 Linux
/dev/sda2        2099200 10487807  8388608   4G 82 Linux swap / Solaris
/dev/sda3       10487808 41943039 31455232  15G 83 Linux

格式化引导分区
mkfs.ext4 /dev/sda1

格式化交换分区
mkswap /dev/sda2

开启交换分区
swapon /dev/sda2

格式化系统分区
mkfs.ext4 /dev/sda3

将系统分区挂载以便安装操作系统
mount /dev/sda3 /mnt

创建几个文件夹
mkdir /mnt/boot /mnt/var /mnt/home

将引导分区挂载以便写入引导程序
mount /dev/sda1 /mnt/boot

开始安装操作系统,这个命令会安装base包和base-devel包,安装过程中一律选择all,yes等。总容量大约1.5GB,全部需要在线下载。50Mbps的ADSL大约需要20分钟左右搞定。
pacstrap /mnt base base-devel

然后更新一下系统,这个命令似乎不是必须的,而且运行可能会提示错误,忽略即可。
pacman -Syu

安装grub引导程序
pacstrap /mnt grub-bios

创建fstab,也就是引导信息
genfstab -p /mnt >> /mnt/etc/fstab

运行下面的命令切换到刚刚装好的硬盘版Arch
arch-chroot /mnt

将硬件时钟设置为utc时区
hwclock --systohc --utc

不明白下面这个命令的具体意思,似乎是识别硬件创建了一些默认设置
mkinitcpio -p linux

设置root用户的密码
passwd root

创建一个新用户,用户名john
useradd -m -g users -G wheel -s /bin/bash john

设置john用户的密码
passwd john

将grub引导信息写入硬盘,注意是sda,也就是物理磁盘;而不是sda1之类的逻辑分区
grub-install /dev/sda

生成引导配置
grub-mkconfig -o /boot/grub/grub.cfg

退出并重启系统
exit

exit

reboot

至此可以移除iso镜像了。

重启之后会提示用户名,输入root
用root登录

设置主机名为“archlinux”
hostnamectl set-hostname archlinux

看一下ip地址
ip addr
应该没有获取到地址,这是因为dhcp服务没有配置/开启。

首先开启dhcpcd服务,
systemctl enable dhcpcd

然后启动dhcpcd服务,
systemctl start dhcpcd

再看一下
ip addr
此时应该已经获取到ipv4的地址了。

将john用户加入sudo列表,使其可以使用sudo命令,
nano /etc/sudoers
取消注释下面一行
%wheel ALL=(ALL) ALL
可以使wheel组的用户使用sudo命令。

安装Linux图形界面xrog及相关工具,
pacman -S xorg
pacman -S xterm xorg-xclock xorg-twm xorg-xinit xorg-server-utils

安装KDE Plasma桌面环境,
pacman -S plasma kdebase


安装图形界面所需的必要字体,
pacman -S ttf-freefont

开启sddm(Simple Desktop Display Manager),以便在图形界面输入用户名和密码。
systemctl enable sddm

重启系统,
reboot

重启之后应该会直接进入图形界面,由于只有一个普通用户,所以Plasma提示输入john的密码进行登录。

登录之后试一下基本功能是否正常;
至此,最基本的安装已经完成了。
如果此间遇到问题,首先检查网络是不是够强悍。
再就是上述安装过程仅适用于VMware Workstation虚拟机;不能直接安装到宿主上,因为宿主的话会有无数的驱动问题需要解决,甚至可能根本就没法解决。

经过反复对比,终于决定将Blog建在blogger

多年来,从腾讯到新浪,再到MSN,WordPress;到目前为止,似乎还是Google的blogger最靠谱。