今日神秘

自从ArchLinux新装以来,就出现了没有办法连接校园网的问题。即使修改了防火墙,甚至改到没有拦截,都还是八行。最后只能从Network Manager身上找原因。想着和之前最大的区别就是没有装dhcpcd,装上再改了一下NetworkManager.conf指定

[main]
dhcp=dhcpcd

突然就可以了。真迷惑。
 

Windows虚拟机部署dm-crypt的Archlinux到物理分区并启动的记录

今天探索了怎么在linux上实现加密的效果。毕竟用惯了linux,还是有点离不开的感觉,但是Windows已经用了bitlocker进行加密,如果只有windows加密了linux不加密那和白给有什么不同呢。所以就看着Archlinux的维基进行摸索。

背景是Windows已经用bitlocker加密了系统分区(同时也是数据分区,毕竟SSD容量不大)。因为bitlocker要求加密分区之外再有一个引导分区,所以mbr分区表最多4个主分区已经占用了两个。ArchLinux的主分区也需要占用一个Primary分区,因为主分区要加密,所以引导分区也需要独立的一个,所以mbr下4个占满。如果直接在Windows的磁盘管理里面建立第四个分区,它会默认建立扩展分区,所以需要进PE用DG指定建立主分区。

为了减少流量消耗,这次安装用了骚方法:在Windows上用VirtualBox启动arch的liveCD,然后虚拟机的硬盘直接用物理硬盘sda3、sda4来做。这里说一句题外话:也就linux能这样安装还能启动,windows这样搞一下子就死了。Virtualbox和VMware不太一样,后者有GUI的“使用物理硬盘”的选项——虽然并不能用,用了就黑屏开不了机——前者需要用命令来完成,参考virtualbox manual的9.8.1.2

VBoxManage.exe internalcommands createrawvmdk -filename /path/to/file.vmdk
 -rawdisk /dev/sda -partitions 3,4

光盘位置挂载arch的liveCD,然后启动进去就完成了前期准备工作。

加密用的是dm-crypt的全系统加密,由于是对块(block)设备的加密,所以要在建立建立文件系统之前就执行。按照wiki的指示配置好主分区的加密,其实就是几行命令:

# cryptsetup -y -v luksFormat /dev/sda3
# cryptsetup open /dev/sda3 cryptroot
# mkfs.ext4 /dev/mapper/cryptroot
# mount /dev/mapper/cryptroot /mnt

把sda4格式化之后挂载到/mnt/boot目录,就可以按照安装指导的Installation部分一直做到Initramfs之前为止。

然后回到dm-crypt的wiki,配置mkinitcpio.conf,主要是要保证有"keyboard keymap encrypt"三个钩子,并重新运行mkinitcpio:

HOOKS=(base udev autodetect keyboard keymap consolefont modconf block encrypt filesystems fsck)

之后要配置bootloader,选用的是grub,所以要在/etc/default/grub的GRUB_CMDLINE_LINUX里写好Configuring the boot loader小节的内容:

cryptdevice=UUID=device-UUID:cryptroot root=/dev/mapper/cryptroot

不用UUID也行,直接写"/dev/sda3"就可以:

cryptdevice=/dev/sda3:cryptroot root=/dev/mapper/cryptroot

到这里为止,主要的安装部分就结束了。但是真正安装bootloader是要真正的物理机重启到live system才能做,所以还是要用rufus刻一个live U盘。重启之前先把Windows的Bitlocker挂起保护,否则安装bootloader会让Windows觉得有问题,重启的时候会要求输入恢复密钥。

重启到live system,首先要把sda3解密了而且挂载上来:

# cryptsetup open /dev/sda3 cryptroot
# mount /dev/mapper/cryptroot /mnt
# mount /dev/sda4 /mnt/boot

chroot到mnt,运行:

# grub-install /dev/sda
# grub-mkconfig -o /boot/grub/grub.cfg

之后就可以umount并且重启了。如果安装了os-prober,grub是会识别到windows的,回到windows把bitlocker的状态改回保护状态,就大功告成了。

两个系统都加密了的效果就是无论谁的recovery类型的系统都没有办法直接读取文件,防止别人偷文件。而virtualbox能够直接用物理硬盘的好处就是能够在windows的虚拟机里面挂载linux,再连接校园网进行大流量的更新——垃圾校园网有线网只能用Windows认证登陆,真实恶心人了。

deepin-wine-wechat

archlinux+KDE

首先参考的是AUR|deepin qq的评论区,留意其中关于Deepin QQ(Office)的X Error of failed request: BadWindow 评论。

github issue | KDE环境完全无法使用wine-tim可知在KDE环境下无法启动deepin-wine系列的东西是因为缺少了gnome依赖。所以用console启动的时候可以看见报错是X Error of failed request: BadWindow 之类的(依靠这个才找到AUR,才解决了问题)。

所以就是怎么办的问题。置顶评论只是解决了中文无法输入的问题,或者是治标不治本的简单粗暴方法:直接换用gnome。但是下面评论的一条解决了问题:

……
非gnome系的解决方案:安装gnome-settings-daemon,然后运行/usr/lib/gsd-xsettings

manjaro+awesome下测试通过

确实OK了。最后再加一个systemd服务在开机的时候自动启动就好了:


[Unit]
Description=GSD-Xsettings Service
After=rc-local.service

[Service]
Type=simple
User=root
Group=root
#WorkingDirectory=/home/sieve
ExecStart=/usr/lib/gsd-xsettings
Restart=always

[Install]
WantedBy=multi-user.target

gentoo

编译

gentoo下官方当然是没有这个包的,所以要靠野包(overlay)来实现。首先是安装layman来管理overlay,然后layman -L && layman -a deepin把deepin的overlay加进去。他们的github是:deepin-overlay
第二步,emerge --ask deepin-wine-wechat,甚至可以加上--newuse --update,然后就会出现一大堆条件未满足,一般会在/etc/portage/package.use文件夹里面产生._cfg开头的文件,把那个文件cat/etc/portage/package.use里面的一个文件里面就好了,我是cat进了wechat文件里面。然后再来一次emerge,这次应该就能开始编译了。

再次编译

编译完成之后,用命令行启动,会发现出现段错误,查找github可以发现有人提过一个issue谈到这个问题。解决问题的办法就是用-O1重新编译一次x11-libs/libxcb和x11-libs/libX11,命令是CFLAGS="-march=native -O1 -pipe" emerge --ask x11-libs/libxcb x11-libs/libX11

安装gnome-settings-daemon

这是和上面的一样的了,稍有不同的是gentoo安装好的要执行的文件的路径是/usr/libexec/gsd-xsettings。往/opt/deepinwine/tools/run_v2.sh的RunApp()里面添加:

if [[ -z "$(ps -e | grep -o gsd-xsettings)" ]]
        then
         /usr/libexec/gsd-xsettings    &
        fi

就可以启动微信了。

中文呢?

/opt/deepinwine/apps/Deepin-WeChat/run.sh里面需要export一些环境变量:

export LC_ALL=zh_CN.UTF8
export [email protected]=fcitx
export QT_IM_MODULE=fcitx
export GTK_IM_MODULE=fcitx

丑是丑了点,但是能用了。

NTP时间同步

记录一下如何配置archlinux上的实践同步。

用到三个网站:systemd-timesyncd (简体中文)Asia — asia.pool.ntp.orgTime.is

首先根据systemd-timesyncd,

systemctl enable systemd-timesyncd.service

然后修改/etc/systemd/timesyncd.conf,找到#NTP=,去掉注释并添加Asia — asia.pool.ntp.org里的NTP服务器:

/etc/systemd/timesyncd.conf

NTP=0.asia.pool.ntp.org 1.asia.pool.ntp.org 2.asia.pool.ntp.org 3.asia.pool.ntp.org

最后用root权限完成启动和同步:

sudo systemctl start systemd-timesyncd
sudo timedatectl set-ntp true

查看同步结果:

timedatectl status

同步之后可以在Time.is上面对表。

archlinux音量管理器

Archlinux内置了asla,所以只需要安装用来调整配置的Sound servers就可以了。根据Arch Wiki的写法,选择了pulseaudio。pacman安装完之后只是有了server,还需要配置界面pavucontrol和系统托盘pasystray。为了利用音量键调整声音,需要安装pulseaudio-ctl,然后在Settings-Keyboard里面设置快捷键。pulseaudio-ctl的用法:

/bin/pulseaudio-ctl {up,down,mute,mute-input,set,atmost,full-status} [n]

 Where up and down adjust volume in ±5 % increments
 Where up and down [n] adjust volume in ±n % increments
 Where mute toggles the mute status on/off
 Where mute-input toggles the input status on/off
 Where set set the volume to [n] %
 Where atmost only takes effect if current volume is higher than [n]
 Where full-status prints volume level, sink and source mute state to stdout

如果是在xfce4下面,打开Settings-Session and Startup-Application Autostart,添加一个/usr/bin/pasystray的启动项就好了。

 

参考:
[SOLVED] PulseAudio and volume buttons
pulseaudio-ctl: vol+/- and mute from the shell or shortcut keys

kvm+QEMU安装虚拟机

一切都要从换用i3wm之后说起。其实背景不复杂,就是在i3wm下面无法启动deepin-wechat这一大杀器……所以只能用传统解决办法:装虚拟机。

现在的Intel CPU基本都支持Intel-VT,所以只需要确认BIOS 里没有禁用虚拟化就可以了。archlinux的官方内核默认加载了kvm模块,所以直接安装QEMU即可。为了偷懒,再安装virt-manager来提供图形界面。为了以普通用户身份来运行virt-manager,需要把用户加入libvirt和kvm组。为了支持NAT,需要安装ebtables和dnsmasq。

启动之前首先用systemctl启动ebtables、dnsmasq、libvirtd(顺序matters),随后启动virt-manager,之后的步骤就和virtualbox的安装步骤差不多了。