Archive for the 'Linux技巧' Category

自动获取sentense.me图片做为桌面背景

煎蛋看见这个sentense.me的,图片做得挺好看,遂萌发自动下载后随机替换桌面背景的想法。

稍微写一下正则就可以解决了。以下为代码。请确保系统装有wget、feh,并建立一个wallpapers目录作为存放图片的目录。另外其中的1280×800是适合我屏幕的分辨率,你可以根据你自己屏幕分辨率更改:

#!/bin/sh
 
wget http://sentense.me/  -O - -q |\
sed -n 's/.*"\([^"]*1280x800[^"]*\.png\)".*/http:\/\/sentense.me\1/p'|\
wget -i - -P wallpapers -nc -q 
cd wallpapers
set -- *
length=$#
random_num=$(( $RANDOM % ($length + 1) ))
#echo ${!random_num}
DISPLAY=:0.0 feh --bg-scale ${!random_num}

可以将这个脚本加入crontab,或者在系统每次登录时执行
其中随机取文件那部分是从网上找的sniplet…其实我没看懂…

广告:请关注我的VPN服务~http://yegle.net/openvpn/

使用proxychains防止DNS缓存污染

今天看见@kevinxue在twitter上问,某socks代理,能在浏览器里使用,不能与proxychains搭配使用,我第一反应就猜到是proxyresolv这个脚本里设置的DNS服务器的问题。默认在proxychains.conf里设置了proxy_dns,proxychains会自动调用proxyresolv这个脚本来进行DNS解析。
打开这个proxyresolv就可以知道,其实只是用socks代理服务器,让dig这个命令到特定的DNS上查询而已。其实可以写一个更加简单的脚本,配合一个PHP脚本进行DNS解析。至少在我测试看来,比dig的效率更高。
Continue reading ‘使用proxychains防止DNS缓存污染’

awesome里实现真全屏

做个awesome小tip集锦好了,资料实在太难找,整理一下方便后人

默认的awesome配置文件,细心的话会发现,xterm最右边有一个区域是没有被xterm窗口覆盖的,即使全屏了也是这样

google之后找到FAQ里这条:
http://awesome.naquadah.org/wiki/FAQ#Gaps.21_There_are_gaps.21_How_do_I_get_rid_of_the_gaps_at_the_top.2Fbottom_of_the_screen.3F

在rc.lua里搜索:
awful.hooks.manage.register
在后面的匿名函数里添加这行:
c.size_hints_honor = false
重启awesome即可

awesome版本:3.3.3

关于transmission的ipv6支持问题

transmission是一个在linux下比较流行的bt客户端,gtk界面,支持daemon,并有方便的web前端第三方的客户端

transmission在大约1.50版的时候开始声明支持ipv6了,但是实际使用过程中却发现连接到byrbt的tracker时,服务端见到的ip是v4的ip,即使在/etc/hosts文件中指定了tracker的v6地址也一样。

google到了transmission的trac上有讨论这个问题(12)。似乎是transmission在对byrbt这样的v4/v6双栈的tracker时只解析v4地址,不解析v6地址。

trac里原文:

Brief explanation for posterity and those out of the loop: In libTransmission (pre-1.60?, that’s the plan anyway) “torrent” and “tracker” are used interchangeably. With the addition of IPv6 support, the two concepts need to be separated. This is a fairly major refactoring job. For 1.5x and in trunk currently, IPv6 DNS resolution in libcurl (the library we use for tracker communication) is disabled to prevent breakage of trackers with AAAA and A records on the same hostname (notably, TPB). For those of you coming here from #1937, the curl option to disable IPv6 “DNS resolution” apparently also causes curl to bail if given an explicit IPv6 tracker address (such as http://[::1]/announce), so that bug is the same as this one.

解决的办法很简单,修改源码里libtransmission/web.c,找到curl_easy_setopt( easy, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );一行,将CURL_IPRESOLVE_V4修改为CURL_IPRESOLVE_V6,然后正常编译安装即可。如果同时需要使用v4的tracker,可以把这部分修改成CURL_IPRESOLVE_WHATEVER。

实际使用效果甚好。原本都是做种很久后才有零星的ipv6的peer连接,现在连上tracker后不久就能得到ipv6的peer了

BTW,不知道为什么,transmissionbt.com也被墙了……万恶的GFW……

用bash脚本更新校内状态

其实就是些模拟post操作……

昨天跟@liufeng在twitter上说研究一下那个python代码……其实我不懂python……仔细看了一下发现看不懂……还是自己用firefox+live http header模拟表单提交吧……

liufeng兄……辜负你的期望了……

我用wget搞定的,应该用curl也行,没去研究了……

登录
wget –no-proxy -O xiaoneilogin.log –post-data=”email=youremailaddr&password=yourpasswd&autoLogin=true”  –keep-session-cookies –save-cookies=xiaoneicookie http://login.xiaonei.com/Login.do

发新日志
wget –no-proxy -O xiaoneipost.log –post-data=”title=Your_blog_title&body=Your_blog_content&categoryId=0&blogControl=99&passwordProtected=0″ –load-cookies=xiaoneicookie http://blog.xiaonei.com/NewEntry.do

默认发到“默认分类”

发新状态
wget –no-proxy -O xiaoneipost.log –post-data=”c=Your_Status”  –keep-session-cookies –load-cookies=xiaoneicookie http://status.xiaonei.com/doing/update.do –referer=http://status.xiaonei.com/getdoing.do

关于如何单独编译openq代码

上次提到openq的插件部分支持qq2008协议,有人邮件问过我如何单独编译pidgin插件。

其实方法很简单。下载你正在使用的pidgin对应的源码解压缩,同时下载最新的openq代码解压缩,将解压得到的qq文件夹替换pidgin代码中libpurple/protocols/qq文件夹,然后直接不加参数configure,再cd到qq文件夹make。make完成后到libpurple/protocols/qq/.libs/下找到libqq.so文件,放到~/.purple/plugins/下即可。

P.S.windows下的编译可以看这里

另外有人说使用新版本的代码后仍然不支持验证码。需要下载openq p15以上版本才有验证码功能,并且需要在账户设置中选择Client Version为qq2008

Gentoo中指定编译的临时目录

某人说我靠一个买卖好友的bug吸引这么多的流量并以此表示对我的bs,好吧……

搞定了distcc,小学期又结束了,该写报告了,编译个openoffice吧~

可惜刚开始emerge就提示需要保证5G的编译空间,我的根目录一共才分了10G,可用4G……

这个问题当时刚开始用gentoo的时候emerge gcc,需要至少1G空间。问过oceanboo,当时想到的方法是把/home下的某目录mount到/var/tmp/portage解决了问题,之后换了250G硬盘,给/分了10G,暂时好久没关心过这个问题了,没想到今天又遇到了。

好好查了下,找到了这篇文章,终于找到一个比较合适的解决方法了。

Temporary Portage Files

Portage’s temporary files are stored in /var/tmp by default. This is defined by the PORTAGE_TMPDIR variable.

If you alter the PORTAGE_TMPDIR variable, you might want to alter the following variables as well since they will not notice the PORTAGE_TMPDIR change. This is due to how Portage handles variables: BUILD_PREFIX.

Building Directory

Portage creates specific build directories for each package it emerges inside /var/tmp/portage. This location is defined by the BUILD_PREFIX variable.

Live Filesystem Location

By default Portage installs all files on the current filesystem (/), but you can change this by setting the ROOT environment variable. This is useful when you want to create new build images.

所以解决方法也很简单,在make.conf中加入BUILD_PREFIX=/home/yegle/tmp就OK了。

P.S.发现在这里的man make.conf中有提到BUILD_PREFIX这个变量,为什么我自己的man make.conf没有呢……

使用luit转换终端的编码方式

Tilda是个好东西:后台运行,快捷键调出,依赖的软件包小,真是居家旅行,放火杀人必备之良药啊……

可惜tilda有个问题,不支持编码方式的转换。不像konsole、gnome-terminal之类大而全的终端自带了编码转换功能,tilda只能显示系统默认的编码,在使用ssh远程登录gbk编码的主机时,中文会出现乱码。
Continue reading ‘使用luit转换终端的编码方式’

在终端下用obexftp向手机传送文件

查了一下找到这个命令:

obexftp -b 00:18:8D:6D:C9:55 --channel 9 --put opera-mini-4.1.11313-advanced-int.jar

其中:

-b指定手机的蓝牙设备号。可通过打开蓝牙后执行sudo hcitool inq来获得

–channel指定obex push的channel号。可通过sdptool browse <蓝牙设备号>并在结果中找OBEX PUSH字样来获取这个channel号

–put指定传送的文件

看了一下好像没什么困难的,抽个时间用zenity写个图形前端好了,非GNOME和KDE用户居然没有合适的工具通过蓝牙传文件……囧了……

在openbox中用脚本重启、登出、关机

装了openbox之后发现一个问题,没有方便的关机方式,只能在终端用sudo poweroff。最近研究了下zenity,写了个简单的脚本来完成这个工作。

#!/bin/bash
ans=$(zenity --list --title "Make your choice" --text "What should I do?"\
--radiolist --column "Choice" --column "Action" \
reboot reboot logout logout poweroff poweroff);
echo $ans
case $ans in
'reboot')
echo "reboot"
sudo reboot
;;
'logout')
echo "logout"
killall openbox
;;
'poweroff')
echo "poweroff"
sudo poweroff
;;
esac

将以上内容保存成文件,加上可执行权限即可。首先需要保证系统中有zenity,并且在sudoers文件中设置poweroff以及reboot命令不需要密码。具体方法是:执行visudo,在配置文件最后加入:

ALL ALL=NOPASSWD:/sbin/poweroff
ALL ALL=NOPASSWD:/sbin/reboot

Enjoy~