LinuxNotes

来自公开记录
跳到导航 跳到搜索

Linux 笔记

子页面

这两天我对 Linux 做了一些配置,让它更好用了。配置文件都在比较琐碎的地方,整合在这里,以便将来浏览。

ZSH 配置

主要是开机后需要启动一些后台进程。简单的把命令放在 .zsh 文件里是不行的,这样每次打开一个终端都会执行这些命令。Shell 有 login shellnon-login shellinteractive shell 几种形式,每一个形式都有自己的配置文件。通过调查,得到的结论如下:

  1. login shell 是从虚拟终端登录的 shell,配置文件是 .zlogin。还有一个在退出时执行的配置文件 .zlogout。
  2. non-login shell 是执行脚本时用到的 shell,比如运行 ruby 脚本,系统会打开一个当前 shell,然后在这个 shell 下 fork 一个 ruby 进程。所以,脚本中需要用到的一些变量设置,比如 PATH 等,都要在这个 shell 中设定。
  3. interactive shell 是与用户交互的 shell,你打开一个虚拟终端时,会启动这个 shell。它的配置文件就是 .zshrc 了。

当然,以上说明都很简陋,仅仅适用于我自己的情况。尚有其它配置文件,如 .profile 或者在 etc 目录下的全局配置文件,因为不涉及我目前的需要,因此没有提到。

我目前的配置文件是:

#!highlight sh
# ~/.zlogin

fetchmail
# LC_CTYPE=zh_CN.UTF-8 emacs --daemon
mpd
nohup sslocal -c ~/.config/shadowsocks/config.json &


#!highlight sh
# ~/.zlogout

killall emacs
killall mpd
killall fetchmail
killall sslocal


#!highlight sh
# ~/.zshrc
# .zshrc 中我用了 oh-my-zsh 的配置,与标准配置不同的是,我添加/改动了一些设置

ZSH_THEME="clean"          # 原本是 robbyrussell,改了一个我喜欢的
alias df="df -h"
alias la="ls -A"
alias free="free -h"

alias e="emacsclient -nw"

source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh


Tmux 配置

配置文件如下:

#!highlight sh
# ~/.tmux.conf

# 把 prefix 键绑定到 ^L,原先用 Screen 的时候就是这么弄得,个人习惯
unbind C-b
set -g prefix C-l
bind C-l send-prefix

# 让 Tmux 使用 non-login shell,否则每次开一个 session 就执行一遍 .zlogin 的内容,不要啦!
set -g default-command "${SHELL}"

# 剪切板设置,在 C-cxv 前面加上 prefix 键,不过我这里似乎有点问题,复制功能不大好用。但粘贴没问题
##CLIPBOARD selection integration
##Requires prefix key before the command key
#Copy tmux paste buffer to CLIPBOARD
bind C-c run "tmux save-buffer - | xclip -i -selection clipboard"
#Copy CLIPBOARD to tmux paste buffer and paste tmux paste buffer
bind C-v run "tmux set-buffer -- \"$(xclip -o -selection clipboard)\"; tmux paste-buffer"


Emacs 配置

装好 Linux 后 Emacs 一直没法用 fcitx 来输入中文。经过查找文档及实际测试,Emacs 需要 LC_CTYPE 设置成中文才行。我设置了之后,i3bar 里的文字都太难看了,最后单独设置 emacs 进程自己的 LC_CTYPE,能解决问题。开始时我向使用 Emacs 的 daemon 模式,把 daemon 进程的 LC_CTYPE 设置了,但最终弄起来还是太麻烦,干脆直接修改 emacs.desktop 文件中的内容,然后设置 dmenu-desktop,算是解决了问题。

#!highlight sh
# /usr/share/applications/emacs.desktop

[Desktop Entry]
Name=Emacs
GenericName=Text Editor
Comment=Edit text
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
Exec=LC_CTYPE=zh_CN.UTF-8 emacs %F
Icon=emacs
Type=Application
Terminal=false
Categories=Development;TextEditor;
StartupWMClass=Emacs
Keywords=Text;Editor;


截图

我用的是 Imagemagick 包里的 import 工具。ArchWiki 上有很多推荐 scrot 的,我不大会用。普通截屏直接运行 import <filename>,鼠标会变成一个十字,在要截图的窗口点击就行了。

截窗口

有一套命令组合可以截取当前窗口:

sleep 5; import -window `xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | cut -d ' ' -f 5` <filename>

当时我忘记了 import实际上默认是让你自己选择截取的窗口的,根本不用那么麻烦,结果上网搜索了一个笨办法,还要安装 xort-xprop 包。

Systemd

今天把 OfflineIMAP 和 Shadowsocks 配置成了 systemd 来管理启动。之前没怎么了解过这个,走了一些弯路,记载这里。

OfflineIMAP

/!\ 更新:之前的记录挺复杂,现在搞定了默认的配置,其实还蛮简单的,记下来,以此为准。

配置好 OfflineIMAP 后,使用 offlineimap-oneshot@ 这个 timer:

$ systemctl --user enable offlineimap-oneshot@Fastmail.timer


注意 @ 后要跟 OfflineIMAP 配置文件中的 Profile 名称,而不是 UNIX 用户名。

可以关注 timer 的运行状态:

$ systemctl --user status offlineimap-oneshot@Fastmail.timer


我修改了 /usr/lib/systemd/user/offlineimap-oneshot@.timer 里的刷新时间:

OnUnitInactiveSec=5m


每 5 分钟同步一次。

总结

之前看到的一些 [文章] 是让 systemd 定期运行一次 OfflineIMAP,而 ArchWiki 里的配置方法,是让 systemd 保证 OfflineIMAP 一直在后台运行,而由 OfflineIMAP 自己来定时同步邮件。

Shadowsocks 客户端

OfflineIMAP 配置好了后,我想这种方式不是可以运用到很多地方吗?比如 Shadowsocks 的客户端就可以。过去我为了能够马上翻墙,就用了 ArchWiki 上最简单的方法,就是把 nohup sslocal -c config.json & 放进 .zlogin 里,开机自动运行。然后看了一下 ArchWiki,果然有 Systemd 来启动的方法。首先把配置文件复制到 /etc/shadowsocks/ 文件夹内,我的配置文件的内容是:

#!syntaxhighlight json
# /etc/shadowsocks/linode.json
{
    "server":"<我的 linode 服务器地址>",
    "server_port":8388,
    "local_port":9999,
    "password":"密码",
    "timeout":300,
    "method":"aes-256-cfb"
}


然后运行 systemctl start shadowsocks@linode.service 运行服务,运行 systemctl enable shadowsocks@linode.service 开机自动运行。

注意:用 sudo cp 命令复制 /etc/shadowsocks/linode.json 的文件,权限跟我过去设置的一样,是 600,但在这种情况下,Shadowsocks 服务会启动失败,加上 +r 权限就正常了。

dnsmasq

dnsmasq 可以缓存 DNS 记录,让访问时变快。之前觉得会占用系统资源不值得,后来装了 Linux Mint 发现这是默认开启的,所以还是装上了,以免发生无法解析(特别是邮件服务器)的情况。

正常安装 dnsmasq 包,修改 /etc/dnsmasq.conf 文件,让 port=0 防止它作为服务器,因为我们只让它服务本机。

我现在用 NetworkManager 来管理无线网络,dnsmasq 似乎可以被 NetworkManager 来启动,这样就无需通过 systemd 来启动它了。我怀疑 /etc/dnsmasq.conf 文件也不用改了,不过不知道是不是这样。

修改 /etc/NetworkManager/NetworkManager.conf,把 dns=default 改成 dns=dnsmasq

其它的配置可以参见 [[1]]。