Monthly Archives: December 2014

Linux下通过mame玩模拟器游戏

其实之前也在Linux下玩过模拟器游戏的,不过用的是xmame,mame的X前端吧。不过随着Debian的升级,不知道什么时候xmame这个包没了,只有mame,其实都差不多了。

首先要有ROM文件,也就是游戏。比如把所有ROM都放在了$HOME/games/roms目录下,那么就配置$HOME/.xmame/xmamerc这个文件(虽然用的是mame,但xmame的配置依然有效……),把rompath变量换成$HOME/games/roms或其他任意你放ROM的目录。然后直接运行mame应该就没什么问题了,能看到游戏列表,进入游戏后按TAB键能够配置键盘的输入。

我还尝试使用手柄,但是一直没配置成功,这里就不细说了。

我以前有一些rom的,比如kof97,1945,合金弹头等等,但是基本上在运行的时候都提示说缺少一些相关的bin文件。网上搜了一下,跟rom的版本也有关系。然后发现了rom hustler,重新下载了kof97,合金弹头5,s1945/s1945ii/s1945iii/gunbird/gunbird2,还有双节龙……其实有很多下载ROM的网站,但至少这几个从rom hustler上下载的游戏在我机器上都能顺利玩起来了。

玩了一晚上拳皇97,找找本科在宿舍和同学一起砸键盘的感觉,只是手指已经生疏,好多招也忘了怎么发了。

Linux下通过键盘快捷键在双屏幕之间切换焦点

在办公室一直在用synergy,在两台电脑之间共享鼠标键盘,而且配置了快捷键能方便的在两台电脑之间切换(文章一文章二文章三)。但是一直没有找到一个好方法能方便快捷的在双屏幕之间切换焦点,必须手离开键盘移动一下鼠标,很不爽……

针对这个问题以前也搜索过,但是没找到什么好方法。这两天不死心继续搜索,发现一个叫做dualscreen-mouse-utils的工具,但是在我的Fedora21系统上却工作不正常。那个mouse-switchscreen一直报错,我不懂X编程,无能为力了……

Opening display :0.0
Window ID is 360002e, focus is 1
Saving /home/eguan/.pointer-0
Moving to screen 1, x = 0, y = 0
X Error of failed request:  BadWindow (invalid Window parameter)
  Major opcode of failed request:  41 (X_WarpPointer)
  Resource id in failed request:  0x18
  Serial number of failed request:  9
  Current serial number in output stream:  12

继续不死心,man -k mouse了一下,看看能否发现模拟鼠标操作的工具,结果还真发现了一个,xdotool。看了一下manpage,很强大,能够通过命令行输入组合键,移动鼠标,点击鼠标,获取活动窗口,获取鼠标位置等等。于是想了一个不完美,但是能用的方法。

先把鼠标移动到主屏幕某个最大化的窗口的标题栏上,获取鼠标坐标,比如X=760 Y=32,同样把鼠标移动到次屏幕某个最大化的窗口的标题栏上,获取坐标,比如X=2450 Y=15,然后写这样一个脚本

$ cat ~/bin/switch-screen.sh 
#!/usr/bin/bash
if [ "$1" == "-l" ]; then
        xdotool mousemove 760 32
        xdotool click 1
elif [ "$1" == "-r" ]; then
        xdotool mousemove 2450 15
        xdotool click 1
else
        echo "Usage: $0 "
fi

于是用-l参数运行脚本的时候,xdotool把鼠标移动到主屏幕预设的位置,然后点一下鼠标左键,相当于移动鼠标过去并获取了焦点。用-r参数运行的时候同样,只不过移动到次屏幕上获取焦点。

这样做的缺点是,换了屏幕大小和位置这些坐标都得重新获取一个合适的值。不过对我现在来说够用了。接下来就是用xbindkeys配置键盘快捷键。

$ cat ~/.xbindkeysrc 
"$HOME/bin/switch-screen.sh -l"
  Control + 3

"$HOME/bin/switch-screen.sh -r"
  Control + 4
$ xbindkeys # run xbindkeys as daemon

这个配置就是说把ctrl+3绑定到把焦点移动到左边屏幕,ctrl+4绑定到把焦点移动到右边屏幕。到此,在两个电脑之间移动焦点和在两个屏幕之间移动焦点都能通过键盘来完成了,也早就把mutt/irssi扔到screen里,并通过guake呼来唤去,firefox有vimperator插件,这样使用鼠标的机会越来越少了。

RHEL6上用virt-install在终端下安装kvm guest

首先配置host上的网桥,这样guest通过网桥链接网络,能够从dhcp得到一个从外部访问的IP。这部分我是参考这个.

配置网桥之前先确保bridge-utils已经装好了。

cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.bak}
echo "BRIDGE=br0" >> /etc/sysconfig/network-scripts/ifcfg-eth0
cat > /etc/sysconfig/network-scripts/ifcfg-br0 <<EOF
DEVICE="br0"
BOOTPROTO="dhcp"
ONBOOT="yes"
TYPE="Bridge"
EOF
service network restart

这样之后应该能看到一个br0设备,host现在也是通过这个设备在链接网络。

然后安装系统

virt-install -r 8192 --vcpus=4 --location=http://example.com/rhel7/os \
--disk path=/path/to/imagedir/rhel7.img,size=300,format=qcow2 \
--network bridge=br0 --virt-type=kvm --extra-args="console=ttyS0,115200" \
--name name

最后的–extra-args是给内核启动的额外参数,能够让guest的终端输出到当前终端上,方便安装。从这里搜索到的结果.

如果用RHEL7做host,命令行是

virt-install -r 2048 --vcpus=4 --location=http://example.com/rhel7/os/ \
--disk path=/path/to/fs.img,size=150,format=qcow2 --network bridge=br0 \
--virt-type=kvm --extra-args="console=ttyS0,115200n8 serial" --name name \
--console pty,target_type=serial --graphics none

然后进入rhel7的安装过程,这个时候系统已经能够自动获取ip,然后选择通过vnc安装,用vncviewer连接anaconda给出的地址和端口就可以开始安装过程了。

系统装好之后,可以用virsh来启动,也可以通过virsh里的console命令来看guest的console输出,看dmesg输出和debug就比较方便了。