简易的默认网关保存+Bash补全解决方案 For Arch Linux

嗯, 本猫的脚本有多烂大大们都知道的, 所以本文旨在抛砖引玉, 简单介绍利用 pppd hook 和 dhcpcd hook 做到记忆网关, 以及 bash_completion 补全的实现.

保存用的脚本:
/usr/local/bin/froute-save

#!/bin/bash
interface=${interface:-$1}
gateway=${new_routers:-$5}

if [ "$reason" = 'BOUND' ] && ! ([ -z "$interface" ] || [ -z "$gateway" ])
then
    mkdir -p /tmp/froute/
    chmod 755 /tmp/froute
    echo $gateway > /tmp/froute/$interface
    chmod 644 /tmp/froute/$interface
elif ([ "$reason" = 'STOP' ] || [ "$reason" = 'RELEASE' ]) && ! [ -z "$interface
" ]
then
    rm -f /tmp/froute/$interface
fi

嗯..然后首先是pppd的hook, 代码如下:
/etc/ppp/ip-up.d/02-route.sh

reason=BOUND froute-save $1 0 0 0 $5

/etc/ppp/ip-down.d/02-route.sh

reason=RELEASE froute-save $1

然后是dhcpcd的hook.
/etc/dhcpcd.enter-hook

froute-save

如果有用 netcfg 设置静态地址连接, 可以参考如下配置:

POST_UP="env reason=BOUND froute-save $INTERFACE 0 0 0 $GATEWAY || true"
PRE_DOWN="env reason=RELEASE froute-save $INTERFACE || true"

嗯, 现在记忆网关的部分就完成了 ><

Continue reading 简易的默认网关保存+Bash补全解决方案 For Arch Linux

检查 /usr 目录哪些文件不在包管理里 For Arch Linux

当然改改里面的命令也就能用在其他发行版了= =
随手写的, 各种不靠谱勿喷哦><

#!/usr/bin/env python2
import subprocess
import os
from os.path import join

pkg_list = subprocess.check_output(["pacman", "-Q"]).split("\n")[:-1]
pkg_list = map(lambda line:line.split()[0], pkg_list)

file_mapper = {}
for pkg in pkg_list:
    file_list = subprocess.check_output(["pacman", "-Ql", pkg]).split("\n")[:-1]
    file_list = map(lambda line:line.split(" ",1)[1], file_list)
    for filename in file_list:
        file_mapper[filename] = pkg

for root, dirs, files in os.walk('/usr'):
    if "__pycache__" in root:
        continue
    for name in files:
        filename = os.path.join(root, name)
        if filename not in file_mapper:
            if filename.endswith(".pyc") or filename.endswith(".cache"):
                continue
            print filename, "Not Found!"

在 Xfce4 里一键切换 Composite 开关

常用 KDE4 的用户可能很熟悉 KDE 的 Alt-Shift-F12 切换 Composite 状态, 下面咱让 Xfce4 拥有相同的效果:

xfconf-query -c xfwm4 -p /general/use_compositing -T

在 Xfce4 的快捷键设置里, 定义一个快捷键(我选的是Ctrl-Alt-Backspace, 不知为何 Alt-Shift-F12 无法选用), 绑定上面的命令, 就可以了 🙂

Google TalkPlugin (包括 Hangout) 不能正常使用与 iptables NAT

嗯, 准确的说, 如果 iptables -t nat 吃掉了 lo 的包 (MASQUERADE 之类的), Google TalkPlugin 就会傲娇掉, 具体表现为无论刷新重装多少次, 都提示没有连接, 网上介绍的各种方法都无效.

[006:450] Started GoogleTalkPlugin, path=/opt/google/talkplugin/GoogleTalkPlugin 
[006:450] Waiting for GoogleTalkPlugin to start... 
[007:451] Read port file, port=52545 
[007:453] Initiated connection to GoogleTalkPlugin 
[007:551] Socket connection established 
[007:551] ScheduleOnlineCheck: Online check in 5000ms 
[007:552] Warning(clientchannel.cc:669): Connection lost while waiting for authorization reason=0 
[012:567] HandleOnlineCheck: Starting check 
[012:567] Warning(clientchannel.cc:778): Not connected; restart already tried, giving up 

简单举例, 引起问题的会吃掉 lo 的包的规则如:

-A POSTROUTING -j MASQUERADE

如果想尽量保持原语句正常功能, 而仅仅排除掉 lo 的包, 可以用:

-A POSTROUTING ! -o lo -j MASQUERADE

-A POSTROUTING -o ‘!lo’ -j MASQUERADE
注意: 网上各种教程都玩坏了, ! 和 lo 之间不能有空格, 且用单引号以防止被转义.

更新: ‘!lo’ 也是错的!!!

当然如果能指定 -o eth0 什么更准确的当然最好啦 🙂

QR Code Business Card