Archive

Posts Tagged ‘Linux’

安装ibus输入法

April 6th, 2009

编译太麻烦,直接从ppa的源安装,把下面这句加入/etc/apt/sources.list

	deb http://ppa.launchpad.net/ibus-dev/ppa/ubuntu intrepid main

然后安装就是了,不过ppa的源下载真的好慢啊:

	$ sudo aptitude install ibus ibus-pinyin

装好以后,修改/etc/X11/Xsession.d/95xinput,把原来fcitx的部分注释掉,换成ibus的:

	# ibus
	export GTK_IM_MODULE="ibus"
	export XMODIFIERS="@im=ibus"
	export QT_IM_MODULE="ibus"

然后切换系统的默认输入法:

	$ sudo im-switch -c

最后重启系统,一切ok。

一点感受:

  • 速度比fcitx要慢,但似乎用着反而更舒服了。
  • 没有软键盘,无法输入特殊符号(前提:我用自然码双拼,得切换到全拼下用i开头输入特殊符号,如果有全拼/双拼切换快捷键就好了)。
  • haha xixi rq xq lb sj bsn 这些很贴心啊,呵呵。

选用目前并不一定比fcitx好用的ibus,主要是看中它更新比较频繁,相信问题会不断得到修复,功能也会不断完善的。使用python开发也能够让更多的热心人介入。

Update @ 2009-04-21

如果在firefox等程序里无法实现光标跟随,可以试试装上ibus-gtk, ibus-qt4包,然后重启X。

Related posts

Linux, Tools , , , ,

VirtualBox的VRDP运行模式

March 24th, 2009

其实没什么深奥的,所谓VRDP运行模式,就是虚拟机运行的时候,没有图形窗口,但可以用VirtualBox的RDP模式远程管理,说是远程其实在本机上用很方便,用起来和windows下的远程桌面一样。如果虚拟机上安装了vncserver之类的远程控制软件,并且从主机上能够通过tcp访问,也一样可以管理的。

我使用的是非开源的VirtualBox,开源版本少一些功能。以下操作在windows下也是可以参照使用的。

启动VM的命令:/usr/bin/VBoxManage startvm WinXP -type vrdp,默认是-type gui即以图形界面启动虚拟机。

控制VM比如保存状态关闭的命令:/usr/bin/VBoxManage controlvm WinXP savestate

以上命令中WinXP是虚拟机的名称,也可以用uuid替代。

开启VRDP后远程控制端口默认是3389,默认认证方式是null,即无认证,任何人都可以连接上随意控制,放在网络环境下是很不安全的。还有一种认证方式是external,可以使用主机上的用户机制来认证,不过使用之前要稍微作一下设置:

cd /lib
sudo ln -s libpam.so.0 libpam.so

不然认证无法进行,连接闪一下就关闭了。远程桌面的客户端在gnome中可以用Terminal Server Client(tsclient)或者rdesktop-vrdp -u fwolf -p - localhost

要想随重启或者关机自动关闭虚拟机,要稍微麻烦一些了,首先在/etc/init.d/下创建一个文件fwolfrc

#! /bin/sh 
# Using LSB funtions:
. /lib/lsb/init-functions
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="Fwolf's Init"
NAME=fwolfrc
SCRIPTNAME=/etc/init.d/$NAME

# Function that starts the daemon/service.
d_start() {
    touch /var/lock/subsys/$NAME
    log_daemon_msg "Starting $DESC" "$NAME"
}

# Function that stops the daemon/service.
d_stop() {
    su -c "/usr/bin/VBoxManage controlvm WinXP savestate" fwolf
    rm /var/lock/subsys/$NAME
}

# Function that sends a SIGHUP to the daemon/service.
case "$1" in
  start)
        d_start
    ;;
  stop)
        d_stop
    ;;
  *)
    log_warning_msg "Usage: $SCRIPTNAME {start|stop}" >&2
    exit 3
    ;;
esac

exit 0

我也是直接从/etc/init.d/里套过来修改的,详细信息可以看参考文章或者其它关于关机自动执行脚本的资料。然后把这个文件ln为以下几个:

  • /etc/rc0.d/K01fwolfrc
  • /etc/rc6.d/K01fwolfrc
  • /etc/rc3.d/S99fwolfrc
  • /etc/rc5.d/S99fwolfrc

可以看到开机时是最后执行,而关机时是最先执行。注意我上面的脚本里,在开机是并没有自动启动虚拟机,习惯手工开。

参考

Related posts

Linux , , , ,

/bin/sh: root: not found

March 16th, 2009

root用户经常收到这样的错误邮件:

From: Cron Daemon <root>
To: root
Subject: Cron <root@fwolf> root /home/fwolf/bin/cmd_run_in_crontab
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <LOGNAME=root>

/bin/sh: root: not found

这个问题很简单,但也容易让人糊涂,先说原因吧,/etc/crontab中格式是这样的:

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly

root# crontab -e出来的应该是这样:

17 *    * * *   cd / && run-parts --report /etc/cron.hourly

注意,/etc/crontab是针对整个系统的,所以第6列是用户名,root# crontab -e是root用户的,所以第6列就直接是命令了。

这有什么好糊涂的呢,因为这两个文件很可能会一模一样,我就是这样,后来才发现他们的不同,不信用root# crontab -e修改些内容再和/etc/crontab对比就知道了。

现在,/bin/sh: root: not found这个错误不用我再解释了吧?直接拷贝crontab到root的后遗症。

Related posts

Linux, Problem , , ,

recently-used+libtrash狂吃硬盘空间

August 20th, 2008

哈,这个问题早就发现了,不过一直以为是openoffice.org的临时文件,今天忍不住搜了一下,终于找到原因和解决办法了。

问题是这样的,由于启用了libtrash,所以正常删除的文件都会在$HOME/.Trash下面存一份,我的$HOME空间本来就十分紧张,经常发现磁盘满的情况(磁盘满了以后会有很多有意思/古怪的现象,有点意思),一看是有大量的.recently-used.xbel[?]文件在$HOME/.Trash下趴着,删除他们可以节省几百M到1G多的空间,并且丝毫不影响使用。

没有仔细观察的时候,还以为是openoffice.org开着的时候产生的临时文件,今天终于知道,用户$HOME下有两个文件:.recently-used.recently-used.xbel,这两个文件都是xml,格式不同,但都是保存了最近打开/访问的文件。可能是我没有直接使用Gnome桌面,从来没有清除过最近文件的缘故,这两个文件的尺寸已经分别达到了200k和2.5M,尤其是那个.xbel文件,2M多,每次更新都会由于libtrash的缘故在$HOME/.Trash下存一个备份,随着时间的推移,可不就很快把硬盘吃完了么。

参考的文章中,是通过修改文件权限的方式,让系统不再往这两个文件写入内容,应该也是可行的,但和libtrash结合恐怕还是会有空文件生成,好在libtrash有黑名单功能,在/etc/libtrash.conf或者$HOME/.libtrash中:

IGNORE_RE = \.recently-used\.xbel

就行了。

关于这两个recently文件,还有两点,一是注意文件权限,可能存在泄漏用户隐私、操作习惯的问题;二是如果以前用过的文档找不到了,在这两个文件的内容中搜搜没准儿能找到。

参考

Related posts

Linux , , ,

用ssh打通反向隧道,内网也可对外提供服务

July 10th, 2008

一般正规一点的网络环境,大多是这样的:防火墙后分为内网和中立区(DMZ),并且内网和DMZ虽然都能访问外网,互相却是无法直接访问的。内网和DMZ的区别就是,来自外网的访问,都通过防火墙上的规则映射到DMZ里的服务器上,而内网一般是不允许这样的。

现在需要解决的问题就是,在防火墙只能给DMZ开端口,内网和外网不可直接互访的情况下,如果让内网的机器对外提供服务。

ssh是很神奇的,使用它创建的隧道,可以起到代理的作用,数据流的方向是:

本机 -> 隧道 -> 外网

应用到我们的问题中,如果把隧道反过来,就是:

外网 -> DMZ -> 隧道 -> 内网

这就需要用到ssh的反向隧道,它在服务器上打开一个监听端口,这个端口的访问会被隧道传输到本地,结果再通过隧道传到服务器上,从监听端口返回给客户。这样,在我们的应用中,内网机器通过外网访问DMZ服务器,创建ssh反向隧道,就能够对外提供服务了。当然,防火墙上要将相应端口映射到DMZ的服务器上。

比如,在内网登录DMZ服务器:

ssh -R 8082:localhost:82 fwolf@svr5.tld -o ControlPath=/tmp/ssh_svr5_reverse_tunnel

这样,访问DMZ服务器svr5的8082端口,就是在访问本机的82端口。之所以带上-o ControlPath,是为了和其它访问svr5的进程使用不同的master模式(如果不是第一次创建这个master,而是使用了原来的连接的sockts,肯定就不会创建隧道了)。

有几个问题还需要注意一下:

  • 如果DMZ上监听端口小于1000的话,就必须用root用户登录DMZ服务器,比如root@svr5.tld
  • DMZ服务器上的sshd必须开启GatewayPorts选项,在文件/etc/ssh/sshd_config中加入GatewayPorts yes
  • 记得不要idle,参考中有在服务端设置的方法。
  • 如果放在其它脚本,比如/etc/rc.local中执行的话,除了配置自动登录,还可以带上-fN参数,放到后台去。

参考

Update @ 2008-07-25

注意,由于使用了反向隧道,所以ssh隧道实际作用相当于一个代理,访问的来源也自然就都成了127.0.0.1,如果同时还启用了denyhosts,千万记得要把本机地址127.0.0.1放入白名单/etc/hosts.allow,不然就会成为其他登录失败的牺牲品(失败的登录,其来源也成了loopback的地址):

ssh_exchange_identification: Connection closed by remote host
Fatal error: Lost connection with the server

没办法,为了网络通道的畅通,只能牺牲一部分安全性了。

Related posts

Internet, Linux, Tools , , , , , , , ,