linux-zen

最近将自己的笔记本电脑(联想小新13pro锐龙版)操作系统由原先的Pop!_OS替换为Arch Linux,Arch Linux默认内核是Linux的主线内核,不过在Arch Linux仓库中,有一个linux-zen内核,有关介绍在这里,安装很简单,操作如下。

  1. 安装 Zen Kernel

    1
    sudo pacman -S linux-zen linux-zen-headers
  2. grub引导

    1
    sudo grub-mkconfig -o /boot/grub/grub.cfg
  3. systemd-boot引导。首先新增一个zen的配置文件,我的笔记本CPU是AMD,已经安amd-ucode,如果是Intel,安装intel-ucode,修改为intel-ucode.img,PARTUUID需要修改为当前电脑实际的PARTUUID值,可以执行 sudo blkid 进行查看。

    1
    2
    3
    4
    5
    sudo echo "title          Arch Linux Zen
    linux /vmlinuz-linux-zen
    initrd /initramfs-linux-zen.img
    initrd /amd-ucode.img
    options root=PARTUUID=xxxxxx rw" >> /boot/loader/entries/zen.conf
  4. 修改/boot/loader/loader.conf,将default对于的值修改为zen,因为原有主线内核保留,可以在systemd-boot引导开始时选择不同的内核启动系统。

相关ArchWiki:

https://wiki.archlinux.org/index.php/kernel

https://wiki.archlinux.org/index.php/GRUB

https://wiki.archlinux.org/index.php/Systemd-boot

chromium-vaapi硬件加速

硬件加速

硬件加速在智能手机上很常见,可以使用手机处理器中的GPU对播放视频进行硬件解码,相比软件解码,耗电低,手机不易发烫。

Linux下的浏览器

众所周知Linux下的Chromium Chrome Firefox都没有开启视频播放硬件加速。得益于Chromium的开源,有人做出了对VA-API支持的chromimu-vaapi,前段时间我已将自己的笔记本重装为Arch Linux,安装chromium-vaapi变得简单。

  1. 添加archlinuxcn源,可以选择一个国内镜像,例如163

    1
    2
    sudo echo "[archlinuxcn]
    Server = http://mirrors.163.com/archlinux-cn/$arch" >> /etc/pacman.conf
  2. 安装archlinuxcn的PGP Keys

    1
    sudo pacman -Syy && sudo pacman -S archlinuxcn-keyring
  3. 安装chromium、驱动、检测VA-API工具 ,由于我的笔记本CPU是ADM安装是这样的,Intel可以参照ArchlWiki相对应的方法安装必要的驱动

    1
    sudo pacman -S chromium-vaapi libva-mesa-driver libva-utils
  4. 执行vainfo命令,查看输出,VA-API是否工作正常

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    vainfo: VA-API version: 1.7 (libva 2.7.1)
    vainfo: Driver version: Mesa Gallium driver 20.0.7 for AMD RAVEN (DRM 3.36.0, 5.6.13-arch1-1, LLVM 10.0.0)
    vainfo: Supported profile and entrypoints
    VAProfileMPEG2Simple : VAEntrypointVLD
    VAProfileMPEG2Main : VAEntrypointVLD
    VAProfileVC1Simple : VAEntrypointVLD
    VAProfileVC1Main : VAEntrypointVLD
    VAProfileVC1Advanced : VAEntrypointVLD
    VAProfileH264ConstrainedBaseline: VAEntrypointVLD
    VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
    VAProfileH264Main : VAEntrypointVLD
    VAProfileH264Main : VAEntrypointEncSlice
    VAProfileH264High : VAEntrypointVLD
    VAProfileH264High : VAEntrypointEncSlice
    VAProfileHEVCMain : VAEntrypointVLD
    VAProfileHEVCMain : VAEntrypointEncSlice
    VAProfileHEVCMain10 : VAEntrypointVLD
    VAProfileJPEGBaseline : VAEntrypointVLD
    VAProfileVP9Profile0 : VAEntrypointVLD
    VAProfileVP9Profile2 : VAEntrypointVLD
    VAProfileNone : VAEntrypointVideoProc
  5. 打开chromium,输入chrome://flags,开启#ignore-gpu-blacklist,开启后会提示重启chromium,重启即可。

  6. 由于YouTube的视频默认输出为 VP8/VP9,需要安装扩展h264ify

  7. 打开 chrome://gpu 查看Video Decode是否为Hardware accelerated,打开YouTube播放一个视频,打开 chrome://media-internals 查看Player Properties 中的video_decoder

    • 硬件解码: MojoVideoDecoder, GpuVideoDecoder;
    • 软件解码: VpxVideoDecoder, FFmpegVideoDecoder.

这里描述的相关操作来自于https://wiki.archlinux.org/index.php/Chromium#Hardware_video_acceleration

利用mpv观看斗鱼直播

​ 平日使用Chrome观看斗鱼直播,笔记本电脑风扇全速运转,噪音较大。怀疑斗鱼为了减少自己的CDN的压力而使用了P2P,网页版我不清楚,但是Windows客户端使用了P2P。即使没有,那斗鱼直播网页的广告和花哨的礼物我也不想看。

​ 想到斗鱼直播流是应该可以获取,Google搜索了一下,找到利用一个油猴脚本获取斗鱼的直播流地址,再加上mpv播放器,即可完成不需要Chrome或者客户端(GNU/Linux)的方式观看直播。

​ 现在笔记本使用的Pop!_OS基于Ubuntu,安装最新的mpv命令如下。如果是Arch,AUR库里面有,直接安装即可。

1
2
3
sudo add-apt-repository ppa:mc3man/mpv-tests
sudo apt-get update
sudo apt-get install mpv

​ 现在可以使用mpv观看直播啦,例如:

1
mpv http://tx2play1.douyucdn.cn/live/71415ryinzitv.flv?uuid=

Docker容器安装MySQL数据库

由于操作系统切换为ArchLinux,pacman软件仓库中的MySQL变成了Mariadb,版本为10,平日开发中使用的MySQL版本为5.7,为了后续的开发方便,使用Docker容器安装一个MySQL,操作步骤如下:

  1. Docker拉取5.7版本的MySQL镜像,有的用户需要加sudo

    1
    docker pull mysql:5.7
  2. 在我用户目录下有个devel文件夹,这个可以自选。执行如下命令,创建mysql文件夹,内部包含三个文件夹,分别是conf:存放配置,data:存放数据,logs:存放日志

    1
    cd ~/devel && mkdir -p mysql/conf mysql/data mysql/logs
  3. 设置utf8编码,logbin,东八时区

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    echo \ 
    '[mysqld]
    character_set_server = utf8
    server-id = 1
    log_bin = /var/lib/mysql/mysql-bin.log
    default-time_zone = '+8:00'
    [mysql]
    default-character-set = utf8
    [client]
    default-character-set = utf8' \
    >> ~/devel/mysql/conf/my.cnf
  4. 创建MySQL容器,挂载配置、数据、日志,绑定端口,设置密码:root,容器名称为:mysql

    1
    2
    cd ~/devel/mysql && \
    docker run -p 3306:3306 --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/var/log/mysql -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
  5. 使用MySQL管理工具,我这里使用的是DBeaver,连接数据库,地址为localhost,用户名密码均为root,测试是否连接正常,连接成功后查看MySQL编码是否为utf8,如果都正常,安装完毕!

  6. 开机后docker内部容器不会自动启动,需要手动开启MySQL

    1
    docker start mysql

ArchLinux下的KDE全局菜单开启

最近将自己使用的操作系统由之前的Ubuntu切换到ArchLinux,pacman的好处自然不用说。由于之前使用的桌面环境是xfce4,也有全局菜单,但是xfce4全局菜单组件依赖有内存泄露问题。更换ArchLinux后桌面环境选择了KDE,为了配合KDE下全局菜单使用,需要安装一些依赖,Firefox安装archlinuxcn源下firefox-kde-opensuse,这样Firefox也可以开启全局菜单,依赖包安装执行命令如下:

1
sudo pacman -S appmenu-gtk-module libdbusmenu-glib libdbusmenu-gtk3 libdbusmenu-gtk2

Linux安装JDK11

前言

​ 由于oracle改变了jdk的授权协议,jdk8安全更新也正式进入授权付费模式,而根据授权协议改变后的第一个长 期支持版本(lts)jdk11的免费更新也终止。针对这些,大家可以上网去由oracle推出的openjdk进行安装。

​ 由于openjdk给出的包只有tar.gz这一种格式,相对来说JDK升级比较费事。市面有第三方维护的比较出名的有:amazonredhatazul,目前我使用的jdk是azlu,安装方式除了传统的安装包(deb rpm)的方式,还可以通过添加第三方仓库的方式进行安装,便于jdk升级。

apt

  1. 添加azul公司的公钥到本地

    1
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9
  2. 将azul包添加到apt仓库

    ubuntu

    1
    sudo apt-add-repository 'deb http://repos.azulsystems.com/ubuntu stable main'

    debian

    1
    sudo apt-add-repository 'deb http://repos.azulsystems.com/debian stable main'
  3. 安装jdk11

    1
    2
    sudo apt update
    sudo apt install zulu-11

yum

  1. 添加azul公司的公钥到本地

    1
    sudo rpm --import http://repos.azulsystems.com/RPM-GPG-KEY-azulsystems
  2. 将azul包添加到yum仓库

    RHEL 或者 Oracle Linux

    1
    sudo curl -o /etc/yum.repos.d/zulu.repo http://repos.azulsystems.com/rhel/zulu.repo

    SLES

    1
    sudo zypper addrepo http://repos.azulsystems.com/sles/latest zulu
  3. 安装jdk

    1
    2
    sudo yum update
    sudo yum install zulu-11

注意

​ 上面安装的版本是11,如果安装jdk8,改变zulu-8即可。可以在本地安装多个版本,利用sudo update-alternatives –config java 对当前电脑的jdk版本进行切换。

删除.git下的大文件

今天在准备将之前一个工程文件压缩打包一下,发现压缩时间很长,怀疑工程内部的git版本管理文件夹.git占比大造成的。利用ncdu命令进行查看,发现.git文件夹使用了80M,看来是之前提交的一些大的文件造成的,虽然后期那些文件删除了,但是在git版本管理中因为已经提交了几个版本,所以还存在。于是Google如何删除.git中的大文件。


使用Git命令的方式

  1. 进入工程文件夹,开始查看占用最大的5个文件

    1
    git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
  2. 对查找出的文件进行删除

    1
    git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch big-file.jar' --prune-empty --tag-name-filter cat -	- --all
  3. 更新提交到远程仓库,然后删除本地文件

    1
    2
    3
    git push origin --force --all
    rm -rf .git/refs/original/
    git reflog expire --expire=now --all && git gc --prune=now

使用工具的方式

一个由scala编写的工具对git大文件进行清理 BFG Repo-Cleaner

  1. 使用–mirror的方式克隆当前的工程

    1
    git clone --mirror git://example.com/some-big-repo.git
  2. 使用Java的jar命令启动bfg.jar开始扫描仓库大于20M的文件

    1
    java -jar bfg.jar --strip-blobs-bigger-than 20M some-big-repo.git
  3. 进入–mirror方式克隆的目录,执行清除操作

    1
    git reflog expire --expire=now --all && git gc --prune=now --aggressive
  4. 执行下面的命令,等待上传到远程仓库完成更新。由于是使用的–mirror的方式克隆的仓库,push操作会提交到所有分支

    1
    git push

我这里推荐工具的方式进行删除操作,速度快,不易出错。

ranger的使用

ranger是一个可以在GNU/Linux终端模拟器中,进行预览文件的一个工具,相当于一个简易的文件管理器,
安装最新版本建议使用pip或者pip3,我这里使用的Ubuntu,软件仓库的版本较低,所以使用了pip3进行安装

1
sudo pip3 install ranger-fm

使用sudo安装的好处是在root下也可以使用ranger,安装完成后,可以集成fzf模糊查询,在~/.config/ranger/目录下,新增commands.py,
加入如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from ranger.api.commands import Command

class fzf_select(Command):
"""
:fzf_select

Find a file using fzf.

With a prefix argument select only directories.

See: https://github.com/junegunn/fzf
"""
def execute(self):
import subprocess
import os.path
if self.quantifier:
# match only directories
command="find -L . \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) -prune \
-o -type d -print 2> /dev/null | sed 1d | cut -b3- | fzf +m"
else:
# match files and directories
command="find -L . \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) -prune \
-o -print 2> /dev/null | sed 1d | cut -b3- | fzf +m"
fzf = self.fm.execute_command(command, universal_newlines=True, stdout=subprocess.PIPE)
stdout, stderr = fzf.communicate()
if fzf.returncode == 0:
fzf_file = os.path.abspath(stdout.rstrip('\n'))
if os.path.isdir(fzf_file):
self.fm.cd(fzf_file)
else:
self.fm.select_file(fzf_file)

编辑~/.config/ranger/rc.conf,加入

1
2
3
set preview_images true
map <C-f> fzf_select
map DD shell mv %s /home/${USER}/.local/share/Trash/files/

安装highlight进行代码高亮提示。

ranger有几款插件也很不错,可以自行安装。

xterm与uxterm字体设置

由于我使用的xubuntu中自带两个模拟终端:xterm与uxterm,这个两个终端默认使用时字体偏小,并且
不支持中文。解决方法是,编辑当前用户的配置文件 vim ~/.Xdefaults,增加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
! TrueType font
UXTerm*faceName: DejaVu Sans Mono
XTerm*faceName: DejaVu Sans Mono
! Chinese
UXTerm*faceNameDoublesize: Noto Sans CJK SC
XTerm*faceNameDoublesize: Noto Sans CJK SC
! font size
UXTerm*faceSize: 10
XTerm*faceSize: 10
! color
UXTerm*background: black
UXTerm*foreground: lightgreen
XTerm*background: black
XTerm*foreground: lightgreen

UXTerm*geometry: 120x35+500+250
UXTerm*metaSendsEscape: true
UXTerm*eightBitInput: false
UXTerm*selectToClipboard: true
UXTerm*locale: zh_CN.UTF-8
Uxterm*utf8: true
Uxterm*utf8Title: true

XTerm*geometry: 120x35+500+250
XTerm*metaSendsEscape: true
XTerm*eightBitInput: false
XTerm*selectToClipboard: true
XTerm*locale: zh_CN.UTF-8
xterm*utf8: true
xterm*utf8Title: true

然后保存退出,执行 xrdb .Xdefaults,这样字体就都修改好了!

注意:有些GNU/Linux发行版桌面环境是读取 .Xresources文件,所以当注销后,.Xdefaults不起作用时可以

mv ~/.Xdefault ~/.Xresources 修改配置文件名称后注销再登录。

Neovim在Windows下如何配置

Neovim是一个精简而又现代的vim编辑器,兼容vim脚本,在Windows上下载后,解压zip,将Neovim拷贝到一个固定的文件夹(这里我拷贝到C:\Program,在当前用户 C:\Users\yangxuan\AppData\Local\nvim\目录下增加配置文件init.vim,在init.vim添加

1
2
set nu
colorscheme delek

加入Python3支持,下载Python3进行安装,cmd或者powershell运行

1
pip install neovim

一个Windows下的Neovim就配置完成了!

推荐一个模糊搜索插件,利用Python,加快搜索文件,函数名称,缓存。