文章目录
打造「素晴らしい」的 Manjaro 开发环境
如何打造一个优秀的 linux 工作站?在 fedora、centos、ubuntu、deepin 等诸多系统辗转之后,笔者最终还是为 manjaro 基于 arch 的高度定制性、强大 pacman 包管理器和丰富、细致的 arch-wiki 文档以及其本身修改所带来的的易用性所折服。
尽管 arch wiki 的文档已经相当丰富,但是面对实际的需求还显得比较零碎难以查找,笔者以问答的形式记录了一些常用的需求及其设置选项,便于日后快速从零搭建一套适合自己的 manjaro 开发工作站环境:
1. 使用 hyper-v
时, manjaro
会卡住,无法进入图形界面;以及使用 hyper-v
时,无法调节可视界面分辨率;manjaro
的 ISO 安装在分区阶段失败:
2. manjaro 中文在使用 sudo pacman -Syyu
等命令升级系统后, 变成方块乱码:
缺少中文字体, 使用 sudo pacman -S wqy-microhei
命令安装中文字体.
3. 使用 xdmcp
远程连接时, kde5
无法成功:
kde5
使用 sddm
代替了原本的图形服务, 而该服务对于 xdcmp
缺少驱动, 详情见 github issue, 作者的理由是 xdcmp
不安全. 可以换用 xrdp
等远程图形工具.
4. 使用 yay
等工具安装 aur
等第三方来源的包时, 出现依赖库和被依赖库版本不对应的问题.
manjaro
官方源基于 archlinux
发行, 但是在一些包上存在区别, 为保证稳定, 日常使用中还是建议使用 manjaro
源.
针对该问题, 建议临时在 /etc/pacman.d/mirrorlist
第一条加上一个 archlinux
的源, 例如: 中科大 archlinux 源, 保存后使用 sudo pacman -Syy
更新源信息, 再使用 sudo pacman -S <pkgName>
升级包. 升级后再注释该源,或调整排序,并再次强制更新源的元信息.
5. 如何使用即时通讯工具 QQ
建议不要使用, 体验很差, 浪费时间. 特别需要, 可以如下使用 (简略版本):
sudo pacman -S wine winetricks
安装wine
, 以模拟windows
环境.- 使用 Wine-QQ-TIM
6. manjaro
默认会修改用户主目录的一级文件夹为对应语言, 导致终端很不好提示.
- 修改目录映射文件:
1 2 3 4 5 6 7 8 9 10 11 |
vim ~/.config/user-dirs.dirs # 改为以下内容 XDG_DESKTOP_DIR="$HOME/Desktop" XDG_DOWNLOAD_DIR="$HOME/Download" XDG_TEMPLATES_DIR="$HOME/Templates" XDG_PUBLICSHARE_DIR="$HOME/Public" XDG_DOCUMENTS_DIR="$HOME/Documents" XDG_MUSIC_DIR="$HOME/Music" XDG_PICTURES_DIR="$HOME/Pictures" XDG_VIDEOS_DIR="$HOME/Videos" |
- 将主目录下的对应语言目录改为对应名称
1 2 3 4 5 6 7 8 9 10 |
cd ~ mv 公共 Public mv 模板 Templates mv 视频 Videos mv 图片 Pictures mv 文档 Documents mv 下载 Download mv 音乐 Music mv 桌面 Desktop |
- 重启系统
7. 包管理器速度慢
- 更换源至国内, 请先升级整个环境:
1 2 3 |
sudo pacman -S base-devel sudo pacman -Syyu |
- 增加
archlinuxcn
源:
在 /etc/pacman.conf
文件末尾添加两行, 并更新包.
1 2 3 |
[archlinuxcn] Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch |
- 安装
archlinux-keyring
:
1 2 3 |
sudo pacman -S archlinuxcn-keyring sudo pacman -Syu |
- 更改国内源
1 2 3 4 5 |
sudo pacman-mirrors -c China -m rank # 或者采用交互式 # sudo pacman-mirrors -c China -m rank -i sudo pacman -Syy |
或手动修改 /etc/pacman.d/mirrorlist
, 记得修改前先保存. 请不要使用 163 源, 笔者使用多次出现同步和包问题.
8. 默认浏览器没有中文
以下指令安装环境并升级浏览器, 记得先升级系统包, 否则可能出现依赖库不兼容.
1 2 |
sudo pacman -S firefox firefox-i18n-zh-cn |
此外, 也可以选择安装 chrome
作为替代.
1 2 |
sudo pacman -S google-chrome |
9. 默认没有中文输入法
- 须添加
archlinuxcn
和archlinux
源(非只需manjaro
源),安装输入法包:
1 2 3 4 5 6 7 |
sudo pacman -Rsn fcitx-im fcitx-configtool sudo pacman -S fcitx-lilydjwg-git fcitx-sogoupinyin # kde sudo pacman -S kcm-fcitx # gnome sudo pacman -S fcitx-configtool fcitx-qt5 |
- 设置用户环境:
对于 xprofile
配置:
1 2 3 4 5 6 |
cat >> ~/.xprofile << EOF export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS="@im=fcitx" EOF |
对于系统环境变量:
1 2 3 4 5 6 |
sudo cat >> /etc/environment << EOF GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS="@im=fcitx" EOF |
10. 默认 bash
比较难用:
- 安装
vim
和zsh
, 并切换到zsh
1 2 3 |
sudo pacman -S vim zsh chsh -s /bin/zsh |
- 安装
oh-my-zsh
1 2 3 4 |
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" # 或者 sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)" |
- (选装) 更改主题
1 2 3 4 5 6 |
vim ~/.zshrc # 找到ZSH_THEME=更改为 ZSH_THEME="agnoster" # 刷新配置,使之生效 source ~/.zshrc |
- (选装) 安装插件
下载插件
1 2 3 |
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/plugins/zsh-syntax-highlighting |
修改配置
1 2 3 4 5 6 7 8 9 10 11 12 13 |
vim ~/.zshrc # 在~/.zshrc中找到 plugins=( git ) # 在括号中git的下一行添加插件名称使其生效 plugins=( git zsh-syntax-highlighting ) # 刷新配置,使之生效 source ~/.zshrc |
11. 磁盘没有开机自动挂载
- 找到磁盘对应的
UUID
, 可以通过/dev/disk/by-uuid
- 修改
/etc/fstab
1 2 3 |
## <file system> <mount point> <type> <options> <dump> <pass> UUID=2319A046633DD0D1 /storage ntfs defaults,noatime,discard 0 2 |
其中, options
请查表, 推荐配置如上; dump
为备份情况, 0
为不备份; pass
为遍数, 1
为 root
分区, 2
为其他需扫描的分区, 0
为不扫描.
12. 使用科学上网
- 可以使用
SS
直连, 或者kcptun
加速的方式, 建议使用shadowsocks-rust
(命令行)或者shadowsocks-qt5
(图形化)。前者请前往对应 Github 仓库的Release
页面查找,对于后者:
1 2 |
sudo pacman -S shadowsocks-qt5 |
- 对于后者设置直连服务器列表, 设置开机启动和隐藏:
- 对于选择性代理,可以设置
PAC
:
1 2 3 4 5 6 7 |
sudo pip install genpac genpac --pac-proxy="PROXY 127.0.0.1:1080" --gfwlist-proxy="PROXY 127.0.0.1:1080" --gfwlist-url="https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt" --output="<path-to>/autoproxy.pac" ## 修改系统代理为自动, 网址为 `<path-to>/autoproxy.pac` ## 修改浏览器代理为 `PAC`, 网址为 `<path-to>/autoproxy.pac` /usr/bin/google-chrome-stable %U --proxy-pac-url="http://127.0.0.1/genpac/autoproxy.pac" # google chrome 不支持本地 pac,请使用 nginx 等作为文件服务器 |
- 此时, 终端仍未代理, 请安装
proxychains4
;或者同时修改http_proxy
和https_proxy
:
1 2 3 4 |
sudo pacman -S proxychains # 如下使用 proxychains4 <命令> |
- 使用
kcptun
加速
下载 kcptun
预编译客户端文件到 <path-to>/client
, 增加 /lib/systemd/system/kcptun.service
如下, 允许并启动服务, 并修改 shadowsocks-qt5
的服务器为本地。注意某些版本 fedora
和 centos
可能无法使用 systemd
来进行 kcptun
的服务化,可以使用 supervisord
:
1 2 3 4 5 6 7 8 9 |
[Unit] Description=Kcptun After=network.target [Service] Type=simple ExecStart=/code/kcptun/client -l :8531 -r [your_ip]:8534 -key "your_password" -crypt salsa20 -nocomp -datashard 8 -parityshard 2 -mtu 1200 -sndwnd 256 -rcvwnd 512 -dscp 0 -autoexpire 900 -keepalive 10 -sockbuf 4194304 -mode fast3 [Install] WantedBy=multi-user.target |
- 使用对
ssh
和git ssh
进行代理加速
如使用 http 代理,安装 socat
1 2 |
sudo pacman -S socat |
修改 ~/.ssh/config
类似如下
1 2 3 4 5 |
Host github github.com ProxyCommand socat - PROXY:127.0.0.1:%h:%p,proxyport=1080 Hostname github.com IdentityFile ~/.ssh/id_ed25519 |
或者 socks5(必须使用 openbsd-netcat)
1 2 3 4 5 |
Host github github.com ProxyCommand /usr/bin/nc -X 5 -x 127.0.0.1:1080 %h %p Hostname github.com IdentityFile ~/.ssh/id_ed25519 |
- 其他修改见各自对应代理说明, 例如
git
见对应文件夹. - (可选) 第一步如果了解, 也可以使用
shadowsocks-rust
, 其使用SOCKS5
协议, 请替换genpac
等软件的代理协议从PROXY
到SOCKS5
,注意vscode
等部分软件不支持socks5
代理(规则问题),需要使用privoxy
进行协议转换。
1 2 3 4 5 6 7 |
sudo pacman -S privoxy vim /etc/privoxy/config # 修改 listen-address localhost:1081 为监听地址 # 修改 forward-socks5t / 127.0.0.1:1080 . 为转发地址 sudo systemctl enable privoxy sudo systemctl start privoxy |
或者在外部设置参数,此时需要注意设置终端环境变量 http_proxy
和 https_proxy
为空,否则设置的镜像源可能会被拒绝连接。
1 2 |
/opt/visual-studio-code/code %f --https_proxy=socks5:⁄⁄127.0.0.1:1080 --http_proxy=socks5:⁄⁄127.0.0.1:1080 |
13. ~/.ssh
文件夹的权限问题
1 2 3 4 |
chmod 600 ~/.ssh/id_* chmod 644 ~/.ssh/id_*.pub chmod 644 ~/.ssh/config ~/.ssh/known_hosts ~/.ssh/authorized_keys |
14. 在 ~/.bashrc
等文件中修改的环境变量不在非交互终端中生效
在 /etc/environment
中添加键值对, 注意会影响所有用户, 且不能引用 ${PATH} 等变量, 例如:
1 2 |
http_proxy="http://127.0.0.1:1080" |
或者在 ~/.pam_environment
中添加键值对,可以使用形如 ${PATH} 和 @{HOME} 的变量,形如:
1 2 3 |
EMSDK_CONFIG=@{HOME}/.emscripten PATH=${PATH}:@{HOME}/.cargo/bin |
15. 推荐的编辑器:
推荐使用 VSCODE,insider 版本为体验预览版,可自己探索安装方式:
1 2 |
sudo pacman -S visual-studio-code-bin |
16. 推荐的 C++ 包管理器
推荐使用 vcpkg, 注意请先安装 base-devel
等环境.
1 2 3 4 5 6 7 8 9 |
git clone git@github.com:microsoft/vcpkg.git cd vcpkg ./bootstrap-vcpkg.sh ./vcpkg integrate install ./vcpkg integrate bash ./vcpkg integrate zsh sudo ln -s /code/vcpkg/vcpkg /usr/local/bin/vcpkg vcpkg install boost catch2 caf openssl pcre2 opencv opengl ffmpeg qt5 |
17. 推荐安装的包
1 2 3 4 5 6 7 8 9 10 11 |
sudo pacman -S yay sudo pacman -S zsh vim sudo pacman -S curl unzip tar yasm sudo pacman -S base-devel net-tools dnsutils inetutils iproute2 bind-tools openbsd-netcat qt5 socat gdb automake sudo pacman -Sy git wget vim openssh cmake llvm-libs llvm lld nginx-mainline lldb sudo pacman -Sy nodejs ruby dotnet-sdk jdk-openjdk python clang go python-setuptools python-pip maven gradle scala clojure elixir rlwrap npm luajit lua sudo pacman -Sy postgresql redis sudo pacman -S mariadb # 安装 mysql 则为 sudo pacman -S mysql |
18. Bay trail
架构芯片在各种 linux
系统中出现随机性卡死
内核和芯片设计, 能源管理的复杂性 bug, 解决方法:
- 在
BIOS
中关闭能源管理的 C6 状态, 开启 C7 状态. - 升级系统内核到
5.3
以后.
参见: 一种解决方法
19. 创建 crontab
任务
- 安装
cronie
1 2 3 4 |
sudo pacman -S cronie sudo systemctl enable cronie sudo systemctl start cronie |
- 创建文件并使用,注意编辑模式的控制命令为
ctrl
+ 其他按键。
1 2 3 4 5 6 7 |
vim ~/.crontab # 格式如: */5 * * * * <path-to>/dnspod_ddns crontab ~/.crontab crontab -l # 查看任务 crontab -e # 编辑任务 crontab -r # 清空任务 |
20. 安装打印机和扫描仪驱动,以爱普生部分型号的墨仓式一体机为例:
1 2 3 4 5 6 |
yay -S tesseract tesseract-data yay -S epson-printer-utility yay -S imagescan yay -S epson-inkjet-printer-201601w sudo systemctl enable --now ecbd |
21. 部分大陆日用软件
1 2 |
yay -S baidunetdisk-bin baidupcs-go-bin netease-cloud-music |
22. 网盘/文件服务器
23. 数据库
23.1 MSSQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
sudo pacman -S docker docker-compose sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://0reahvwf.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker sudo docker pull mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04 sudo useradd mssql sudo passwd mssql sudo mkdir /var/lib/mssql -p && sudo chmod 770 -R /var/lib/mssql sudo ln -s /var/lib/mssql /data/mssql sudo docker run --name ENFW-D1IN-MSSQL1 -p 1433:1433 -v /var/lib/mssql:/var/opt/mssql -m 1024m -e "ACCEPT_EULA=Y" -e "MSSQL_AGENT_ENABLED=True" -e "SA_PASSWORD=password1" -e "TZ=Asia/Shanghai" --restart=always -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04 |
23.2 Postgresql
创建数据库:
1 2 3 4 5 |
sudo pacman -S postgresql sudo su - postgres -c "initdb --locale en_US.UTF-8 -E UTF-8 -D '/var/lib/postgres/data'" sudo systemctl enable postgresql --now sudo mkdir /data -p && sudo ln -s /var/lib/postgres /data/postgres |
常用操作:
1 2 3 4 |
[postgres]$ createuser --interactive $ createdb myDatabaseName [postgres]$ psql -d myDatabaseName |
配置 /var/lib/postgres/data
的 postgresql.conf
及 pg_hba.conf
:
若要监听远程端口,则需要修改 postgresql.conf
listen_addresses = 'localhost,my_remote_server_ip_address'
,
修改对应用户为 pg_hba.conf
的 :
1 2 3 |
# IPv4 local connections: host all all my_remote_client_ip_address/32 md5 |
23.3 Mariadb
安装:
1 2 3 4 5 |
sudo pacman -S mariadb sudo mariadb-install-db --user=mysql --basedir=usr --datadir=varlibmysql sudo systemctl enable mysqld --now sudo ln -s /var/lib/mysql /data/mysql |
配置:
1 2 |
sudo mysql_secure_installation |
并编辑 /etc/my.cnf.d/server.cnf
1 2 |
bind-address=* |
编辑 /etc/my.cnf.d/my.cnf
,添加:
1 2 3 4 5 6 7 8 9 10 11 12 |
[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] collation-server = utf8mb4_unicode_ci init-connect='SET NAMES utf8mb4' character-set-server = utf8mb4 |
重启服务
23.4 Mongodb
安装服务:
1 2 3 |
yay -S mongodb-bin mongodb-tools-bin sudo systemctl enable mongodb --now |
设置:
1 2 3 4 5 6 7 8 9 10 |
> mongo use admin db.createUser( { user: "root", pwd: "abc123", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ] } ) |
编辑 /etc/mongodb.conf
1 2 3 |
security: authorization: "enabled"` |
23.5 redis
编辑 /etc/redis.conf
1 2 3 4 5 6 |
unixsocketperm 770 unixsocket /run/redis/redis.sock requirepass password bind 127.0.0.1 ::1 port 6379 |
24. nvm
安装和环境变量:
1 2 3 4 5 |
sudo pacman -S node npm nvm yarn echo 'source /usr/share/nvm/init-nvm.sh' >> ~/.bashrc echo 'source /usr/share/nvm/init-nvm.sh' >> ~/.zshrc source ~/.zshrc |
设置:
1 2 3 4 |
nvm install 12 nvm alias default 12 nvm use 12 |
25. 如何选用 GPU 加速终端(实验性)
1 2 3 4 5 6 |
# archlinux sudo pacman -S alacritty alacritty-terminfo # fedora dnf copr enable pschyska/alacritty dnf install alacritty |
26. 禁用 VIM 鼠标选中时的可视模式
编辑 ~/.vimrc
1 2 |
set mouse-=a |