给 Systemd 的操作加上 Bash 简写及其自动完成

大家都知道 systemd 启个服务打 systemctl start nginx.service 实在是长的难受(尽管有Tab…), 于是 ArchWiki 上有介绍一个简单用 start nginx 来代替的方法, 但是这个方法没有 Bash 自动补全, 于是我自己折腾了一下..

补全函数都取自他们各自原来的 bash-completion 文件, 我只修改了一点点(可惜不能复用啊..).

嗯, 照例上代码…
/etc/bash.bashrc, 或者 ~/.bashrc 里添加:

if ! systemd-notify --booted; then  # not using systemd
  start() {
    sudo rc.d start $1
  }

  restart() {
    sudo rc.d restart $1
  }

  stop() {
    sudo rc.d stop $1
  }
else
  _target() {
    if [[ "$1" == *.service ]]
    then
      echo $1
    else
      echo $1.service
    fi
  }
  export -f _target

  start() {
    sudo systemctl start $(_target $1)
  }
  export -f start

  restart() {
    sudo systemctl restart $(_target $1)
  }
  export -f restart

  stop() {
    sudo systemctl stop $(_target $1)
  }
  export -f stop

  enable() {
    sudo systemctl enable $(_target $1)
  }
  export -f enable

  status() {
    sudo systemctl status $(_target $1)
  }
  export -f status

  disable() {
    sudo systemctl disable $(_target $1)
  }
  export -f disable
fi
Continue reading 给 Systemd 的操作加上 Bash 简写及其自动完成

简易的默认网关保存+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 无法选用), 绑定上面的命令, 就可以了 🙂

最新 nvidia 295.20 驱动造成 gnome-shell 搜索时崩溃的临时解决方案

最近的 nvidia 295.20 驱动会造成 gnome-shell 搜索时崩溃, 查看自己的log有类似如下输出者即为此 bug 所致:

/var/log$ sudo grep gnome messages.log | grep nvidia
Feb 15 14:16:16 archdesktop kernel: [10841.584296] gnome-shell[9257]: segfault at c ip b5433ea3 sp ab7f3c8c error 6 in libnvidia-tls.so.295.20[b5433000+3000]

下面翻译来自 Arch 官方论坛的一些临时解决方案(任选):

  1. 清除GLCache的旧缓存文件:
    rm -rf ~/.nv/GLCache

    不过肯定过些时会重现这个问题

  2. 清空最近打开文件记录:
    echo "" > ~/.local/share/recently-used.xbel
    sudo chattr +i ~/.local/share/recently-used.xbel

    第二句会让文件处于”只读”状态, 使问题不再重现.

  3. 降级 nvidia 驱动到 290.10 或更早的版本

参考资料: https://bbs.archlinux.org/viewtopic.php?id=135826

让 Linux 里的 .xmind 文件能被双击打开

这其实只是一个简单的小trick 🙂

ubuntu和arch默认安装的xmind, 如果直接在WM/DE的文件管理器里双击打开, 只会打开一个新脑图, 而不会打开你指定的文件, 这个问题还是相当annoying的. 下面是解决方法:

编辑 /usr/share/applications/xmind.desktop 文件,
找到 Exec= 开头的那一行, 修改为:

Exec=/usr/share/xmind/xmind-bin %f

(如果安装位置不一样请自行修改, 总之一定要是这个-bin的文件, 而不能是直接xmind %f)
(其实很纳闷为啥xmind的策略这么诡异- -)

之后保存退出, 然后xmind文件就能直接打开啦!
不过这样仍然有一个问题: 打开的xmind里会有两个标签页, 一个是你打开的文件, 一个仍然是个新建的脑图, 而且默认焦点在新建的脑图上, 这个还是非常不爽的…希望各路大神提供解决方法 ^_^

参考资料: http://code.google.com/p/xmind3/issues/detail?id=200

我的scrot截图脚本(自动上传imgur并复制链接)

效果: 调用后用鼠标选中一矩形区域, 截图后上传到imgur, 上传成功后复制图片的外链地址到剪贴板, 并弹出系统提示, 然后删除本地保留的临时图片文件.

脚本(其实就一行 – -)

sleep .1; scrot -bs -e 'curl -F "image=@$f" -F "key=486690f872c678126a2c09a9e196ce1b" http://imgur.com/api/upload.xml | grep -E -o "(.)*" | grep -E -o "http://i.imgur.com/[^<]*" | xclip -selection c; notify-send "Screenshot has successfully uploaded to `xclip -selection c -o`";rm -f $f' 2> ~/screenshoterr.log

注: 可以把这个脚本绑定到WM/DE的快捷键上, 比如我绑定的是类似QQ的 Ctrl+Alt+A
注2: 不加sleep .1的话, 用KDE快捷键绑定调用的时候存在时不时失灵的问题, 暂不知为什么, 其他环境未测试.

拆解一下scrot自动调用的部分:
上传图片:

  • curl -F "image=@$f" -F "key=486690f872c678126a2c09a9e196ce1b" http://imgur.com/api/upload.xml
    

提取图片直接外链地址

  • grep -E -o "(.)*"
  • grep -E -o "http://i.imgur.com/[^<]*"
Continue reading 我的scrot截图脚本(自动上传imgur并复制链接)

ArchLinux 小白好奇看 (3)

1, 应用ubuntu的LCD补丁, 让字体不发虚!
从AUR里那高高的投票数就知道这几乎是个must-have feature了`~
使用这货让整个2D渲染都犀利起来, 尤其是中文字, 完全不发虚~~
安装方法:

yaourt -S cairo-ubuntu

一路上会继续自动安装 fontconfig-ubuntu, freetype2-ubuntu, libxft-ubuntu 这么几个带补丁的包(从aur里).
这个包提供了3种可选的优化方案, 可以用下面的方法选用其中一种:

cd /etc/fonts/conf.d/
sudo ln -s ..conf.avail/10-hinting-<新方案名>.conf ./
sudo rm 10-hinting-<原方案名>.conf

来实现可选渲染方案的切换.
默认的方案名是 slight, 可选的方案名总共包括: slight medium full

2, 试一试systemd!
首先是安装:

pacman -S systemd arch-systemd-units initscripts-systemd

然后…替换syslog-ng为rsyslog:

pacman -R syslog-ng
pacman -S rsyslog

并编辑rc.conf, 把DAEMONS里的syslog-ngd改为rsyslogd.
然后在/boot/grub/menu.lst里对应启动项的kernel行后面加上

init=/bin/systemd

就行了!
最后…需要配置systemd使用service. 比如我使用kdm, 那么就需要:

sudo systemctl enable kdm.service

在我的测试中, 经过多次反复比较, systemd比upstart启动略快(约1s), 但是启动后有些东东运行不正常(比如USB即插即用).
此外即使我启用了rc-local.service, /etc/rc.local在开机仍然不被执行, 这个也是有些奇怪的 = =

Continue reading ArchLinux 小白好奇看 (3)

Linux 命令行调节屏幕到任意分辨率的 Python 脚本

本猫把一台19寸显示器插在本本VGA插口上, 结果在KDE的分辨率管理界面上发现只能最高选择分辨率到1024×768, 甚是不爽! 于是…写了一个脚本, 以后就可以一步做到啦!
此外: 运行此脚本后, KDE的分辨率管理列表中也会出现运行此脚本的时候指定的分辨率哟!(即使是显示器不支持的)
当然啦, 显卡不支持的分辨率是不会设置成功的…

实现的功能比较简单, 但是很方便, 希望对你也有用~

使用方法:

resolution <设备名> <分辨率> [刷新率]

使用示例:

resolution VGA1 1366x768 60
resolution LVDS1 1280x800

Changelog:
2011-4-29 发布第一个版本

下面…就是脚本啦!

Continue reading Linux 命令行调节屏幕到任意分辨率的 Python 脚本
QR Code Business Card