'Unix/Linux' Category

  • Linux下Synaptics笔记本触摸板的配置

    April 29, 2010

    笔记本上Synaptics的触摸板比较常见,但关于其配置的资料目前来看比较混乱,主要原因是这两年来桌面环境的变化比较大,搜索出来的结果是不同时期的人的解决办法,往往五花八门让人无所适从,如果想完全控制触摸板,可能需要了解以下的事情: 触摸板是输入设备,首先需要Xorg的支持,所以/etc/X11/xorg.conf里面会有synaptics的配置; 大约08年开始,X11依赖hal来挂载硬件驱动,hal读取/etc/hal/fdi/policy里面的配置,所以会有写hal的配置文件的配置方法; 10年3月,Xorg发布了1.8.0版,不再依赖hal而实现动态加载驱动,依然使用xorg.conf配置驱动参数,还新引入/etc/X11/xorg.conf.d目录里面的配置文件; Xorg的synaptics驱动带有一个配置程序,synclient可对驱动参数动态设置; 各个桌面环境,如Gnome、KDE默认自带了不同程度对触摸板设置的支持; gsynaptics设置程序提供比桌面环境自带的多一些的设置选项,但是这个项目即将面临被荒废;Gnome有个子项目GPointingDeviceSettings,跟gsynaptics功能基本一致但还未被收录到Gnome桌面的默认组件。 在网上搜到的资料,包括各大发行版的Wiki,一般都只会覆盖以上其中一两点的配置描述,而且很多都过时。 从上面这些很“历史性”的事情可以概括出的事实: 使用xorg.conf、synclient来配置触摸板最具体的参数,这点是不会变的; HAL作为一个过渡性组件,对其配置的意义不太大; Gnome等桌面环境启动后会重新设定一些参数,可能会重载xorg.conf的设置参数; gsynaptics提供了一个常驻进程,在进入桌面时候启动,它的配置参数记录在gconf,只要其进程在运行,就会重载所有触摸板的配置参数; 没有一个图形界面的设置工具能提供所有的触摸板高级特性特性设置支持。 下面列举一些触摸板的高级特性: 四边角按钮 触摸板被分布成类似九宫格的区域,除了中间的矩形区域面积较大,四个边角可以设置为一个按钮,比如最常用就是点击右下角就相当于右键,左上角为中键(个人 喜好)。 涉及参数:(2为右键,3为中键) RTCornerButton=2 RBCornerButton=0 LTCornerButton=3 LBCornerButton=0 多点触摸 如果是硬件原生支持多点触摸的,在Gnome的触摸板设置内能够直接打开双指滚动的选项; 模拟多点触摸 非多点触摸的触摸板也可以实现双指滚动,它通过触摸板的感应宽度来判断,即两指的在触摸板的跨度比单指大;但是这需要设置驱动参数: EmulateTwoFingerMinZ=50 #模拟双指感应压力 EmulateTwoFingerMinW=6 #模拟双指感应跨度 VertTwoFingerScroll=1 #使用双指垂直滚动 HorizTwoFingerScroll=1 #使用双指水平滚动 VertScrollDelta=75 #垂直滚动速度 HorizScrollDelta=100 #水平滚动速度 这些参数很可能需要用户自己调试出最适合的组合(如何设置调试请看本文后介绍),以上数值仅供参考。 多指按键 即在触摸板任意地方多指同敲就是相当于某击键,涉及参数: TapButton1=1 #一指,左键,默认 TapButton2=3 #两指,右键; TapButton3=0 #三指,仅适合硬件支持多触点的触摸板,否则没法感应三指同 圆周滚动 即可在某个边沿(通常右)开始手指在触摸板按顺时/逆时针圆周划动,即产生鼠标滚轮滚动作用,通常效率比仅仅使用右侧划动区上下滚动高,特别浏览长网页时(本设置在gsynaptics/GPointingDeviceSettings里面可以直观地设置)。涉及参数: CircularScrolling=1 #打开圆周滚动 CircScrollTrigger=3 #右边沿,除了0代表任意边沿,1~8分别代表从顶开始顺时针的九宫格外围8个位置。 想使用这些高级特征,一个方法是就像多数搜索出来的资料,修改xorg.conf,但如前文说会有弊端,被桌面环境重载,所以我们最好还是使用synaptics驱动自带的小工具synclient。synclient接受k=v的参数,而实时修改X11对触摸板的驱动,也很方便调试,就是运行synclient [...]

  • 配置Linux下的虚拟摄像头

    April 24, 2010

    最近随着chatroulette、tinychat等的Flash P2P视频应用的普及,突然想念起以前Win下softcam之类的软件,Google了一圈找到个AVLD,Another Video Loopback Device。[请翻墙] AVLD是作为内核模块起作用的,挂载avld,就会生成/dev/videoX,于是Flash、Pidgin、Skype(貌似不行)就能打开这个设备作为摄像头;而AVLD的输入则是对/dev/videoX文件的写入,可以用mencoder、ffmpeg之类的工具把其他视频流转换特定格式后写到/dev/videoX,这就完成整个“虚拟”的过程了。 我在Archlinux下用yaourt从AUR里面安装avld,很快很方便,下面一些例子命令: #把自己加入video组,方便以后写video设备 sudo gpasswd -a boypt video   #挂载avld模块 sudo modprobe avld   #查看video设备,我的本本自带的摄像头是video0,虚拟的为video1 ls -l /dev/video*   #设置虚拟摄像头的分辨率等参数,后面输入的视频必须跟这参数一致,否则会报错,报错信息运行dmesg|tail查看 echo "width=320 height=240 fps=25" > /dev/video0   #用mencoder给虚拟摄像头写入数据 #其中-vf的scale参数设置输出的分辨率,format设置视频颜色参数; #读取端的颜色参数需要跟这里一致画面才正常 #-ss参数可以设置视频从某时间开始播放 mencoder "myvideofile.avi" -cache 8192 -nosound -ovc raw -vf scale=320:240,format=rgb24 -of rawvideo -o /dev/video1 -ss 0:5:0   #从另外的终端运行mplayer查看输出 mplayer tv:// [...]

  • 轻量级本地/局域网DNS缓冲:DNSMASQ

    March 30, 2010

    这次折腾Arch,因为觉得2009.8的包都太旧了,就完全使用了网络安装。网络环境是静态IP,安装前用ifconfig、route、resolve.conf这些配置好,再运行安装程序。网络速度并不慢,使用163的源,下载都有几百K,但是看着pacman,每个包开始前都在那里挂上10来秒,觉得很不妥,有些包很小,下载过程才1秒,但要等这么久才下载,为何呢? 趁着装包,我换到另外的tty测试,比如wget g.cn,因为最近这个域名会被先转到google.cn,再转到google.com.hk,所以看着wget,每次解释域名就得等待10来秒。用w3m打开网站,也一样,在Open socket那里挂着好几秒才开。我用的是google提供的DNS 8.8.8.8,速度不至于这么慢吧,nslookup g.cn,速度很快,一秒钟内就返回了,换了几个DNS,包括本地电信的,OpenDNS的,效果都一样;又怀疑跟IPv6模块有关,跑了v6发现不通才走v4,往modprobe.conf里面禁用了ipv6模块,故障依然。 最后试着做本地的DNS Cache,安装了dnsmasq,没做什么配置,直接启动/etc/rc.d/dnsmasq start,然后resolve.conf里面写nameserver 127.0.0.1,wget马上变得迅速起来了,再看pacman,全都正常。 清空dnsmasq的缓存可给它发送个SIGHUP,如sudo killall -s SIGHUP dnsmasq。(国内的DNS常常收到GFW污染,缓冲了受污染的DNS记录,出现用vpn连出去后上不了某些网站的情况) 以前没留意过本地DNS缓冲有这么大影响,不知道会不会跟最近国内的网络环境有关。

  • aircrack-ng 系列工具使用笔记

    March 7, 2010

    初始化工作 airmon-ng start wlan0 9 打开一个网卡监听设备,并设置到channel 9; channel可用iwconfig修改 airodump-ng mon0 无参数启动airodump-ng可查看所有接收范围内的AP、Client信息 aireplay-ng -9 -e (bssid) -a (AP Mac) ath0 测试注入攻击链路质量 airodump-ng -c (channel) --bssid (AP Mac) -w output ath0 监听AP在频道的所有数据包并保存到output文件,此步应在以下步骤提到airodump的时候执行 WEP: aireplay-ng -1 0 -e (bssid) -a (AP Mac) -h (Host Mac) ath0 伪认证联机请求 aireplay-ng -1 6000 -o 1 -q 10 -e (bssid) -a (AP [...]

  • 最简单方法远程调试Python多进程子程序

    March 5, 2010

    Python 2.6新增的multiprocessing,即多进程,给子进程代码调试有点困难,比如python自带的pdb如果直接在子进程代码里面启动会抛出一堆异常,原因是子进程的stdin/out/err等文件都已关闭,pdb无法调用。据闻winpdb、Wing IDE的调试器能够支持这样的远程调试,但似乎过于重量级(好吧前者比后者要轻多了,但一样要wxPython的环境,再说pdb的灵活可靠它们难以比拟)。 其实只需稍作改动即可用pdb继续调试子进程的代码,思路来自这个博客:子进程的stdin/out/err关闭了,那可以自己重新按/dev/stdout的名称打开来用。当然这指*nix下,win下要麻烦一些,后面再说。 pdb支持自定义输出输入的文件,我再稍作改动,使用fifo管道(Named Pipe)来完成pdb的输出输入的重定向,这样的好处是,可以同时对父子进程调试! multiproces_debug.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #!/usr/bin/python   import multiprocessing import pdb   def child_process(): print "Child-Process" pdb.Pdb(stdin=open('p_in', 'r+'), stdout=open('p_out', 'w+')).set_trace() var = "debug me!"   def main_process(): print "Parent-Process" p = multiprocessing.Process(target = [...]

  • Python, C-Python, Cython代码与GIL的交互

    January 7, 2010

    这篇笔记相对Python来说,有点底层,先来解释几个名词: C-Python: 或者CPython,指C实现的Python虚拟机的基础API。最通用的Python就是是基于C实现的,它的底层API称为C-Python API,所有Python代码的最终变成这些API以及数据结构的调用,才有了Python世界的精彩; Cython:准确说Cython是单独的一门语言,专门用来写在Python里面import用的扩展库。实际上Cython的语法基本上跟Python一致,而Cython有专门的“编译器”先将Cython代码转变成C(自动加入了一大堆的C-Python API),然后使用C编译器编译出最终的Python可调用的模块。 GIL:Global Interpreter Lock,是Python虚拟机的多线程机制的核心机制,翻译为:全局解释器锁。其实Python线程是操作系统级别的线程,在不同平台有不同的底层实现(如win下就用win32_thread, posix下就用pthread等),Python解释器为了使所有对象的操作是线程安全的,使用了一个全局锁(GIL)来同步所有的线程,所以造成“一个时刻只有一个Python线程运行”的伪线程假象。GIL是个颗粒度很大的锁,它的实现跟性能问题多年来也引起过争议,但到今天它还是经受起了考验,即使它让Python在多核平台下CPU得不到最大发挥。 GIL的作用很简单,任何一个线程除非获得锁,否则都在睡眠,而如果获得锁的线程一刻不释放锁,别的线程就永远睡眠下去。对于纯Python线程,这个问题不大,Python代码会通过解释器实时转换成微指令,而解释器给他们算着,每个线程执行了一定的指令数后就要把机会让给别的线程。这个过程中操作系统的调度作用比较微妙,不管操作系统怎么调度,即使把有锁线程挂起到后台,尝试唤醒没锁的,解释器也不给他任何执行机会,所以Python对象很安全。 所以一般来说,做纯Python的编程不需要考虑到GIL,它们是不同层面的东西,但是模块级别的C-Python、Cython等C层面的代码,跟Python虚拟机是平起平坐的,所以GIL很可能需要考虑,特别那些代码涉及IO阻塞、长时间运算、休眠等情况的时候(否则整个Python都在等这个耗时操作的返回,因为他们没获得锁,急也没办法)。 想体现这个过程,很简单,考虑下面的代码,一段纯Python和一段纯C的循环,每次print一段文字就睡眠一秒。 1 2 3 4 5 6 7 void _c_loop ( void ) { while(1) { printf("Print from C loop\n"); sleep(1); } } 1 2 3 4 def _py_loop(): while True: print "Print from Python loop" time.sleep(1) 先不管他们是如何揉合到同一Python进程里面,两个进程分别执行了这两个函数后,他们应该以大概相互间隔着输出文字;但实际情况是,Print from Python loop这句出现了一次之后(先启动了纯Python线程,否则它连启动的机会都没),剩下的输出全都是Print from C [...]

  • Ubuntu 下使用蓝牙/USB连接黑莓8700上网

    December 18, 2009

    黑莓8700支持EDGE网络,用来做GPRS Modem是相当理想的,标准的mini usb接口,蓝牙2.0,完全足够EDGE的网络速度; 本来以为用蓝牙连接会很简单,在blueman里面连接即可,可是实际上,不行: Failed: Modem Manager did not support the connection 之前用blueman连接Nokia的机,是没问题的,看来黑莓的Modem协议有点不同……Google了一下,找到了不少BB在Linux下的资料:How use BlackBerry device with Linux【介绍了Linux对黑莓的配置、同步、安装软件、Modem、Java开发】how to teather blackberry and linux via bluetooth【连BB蓝牙的完整过程,试验不成功】Berry4all 通过USB连接BB Modem的专用程序 测试Berry4all终于能够连接上BB的GPRS,观察Berry4all其实也是建立了串口通信后,使用pppd的协议来建立数据链接的,要连接cmnet,还得修改其conf下的att-chat,即其中的“拨号”协议; blueman虽然不能建立Modem链接,但是还是能够建立起/dev/rfcomm0,即通过蓝牙的串口链接;使用蓝牙教程,基本上都是使用hcitool等工具来配置的,使用起来真的好不方便,而blueman不是刚好帮忙搞定了蓝牙的配对连接等麻烦事情么…… 于是把Berry4all的conf目录的att跟att-chat文件复制到/etc/ppp/peers,参照别的教程的配置,修改att,在开始115200那行前,加入nodetach跟/dev/rfcomm0两行,最后的connect调用chat文件的路径改成connect "/usr/sbin/chat -f /etc/ppp/peers/att-chat",att-chat里面修改一行:OK 'AT+CGDCONT=1,"IP","cmnet"' ,最后运行sudo pppd call att,终于用蓝牙连上了GPRS; 其实使用ppp连接modem的方法是最传统的,也是高度可定制(如连接后配置路由表、IP、DNS),不管是用Cable、USB、蓝牙还是红外,都可以这样完成,Of Linux, GPRS Phones, Serial Cable, Irda, Bluetooth and USB文章里面列举了好多这些例子;我修改了其中的三个脚本:gprs, gprs-connect-chat, gprs-disconnect-chat替代了上面Berry4all的att脚本,因为这脚本里面的注释非常详细,以防以后需要的调整; 这是我打包了修改好后(适用于移动CMNET上网的)gprs脚本,使用blueman连接了rfcomm0后,运行sudo pppd call gprs,就能连接上GPRS,ifconfig查看出现一个ppp0,可以直接上网了; 如果不使用blueman,完全使用bluez的工具的话,可以参照Blackberry [...]

  • 锐捷/联想/神州数码 802.1x客户端支持MacOS、BSD

    October 9, 2009

    Insion同学之前发来一段可以在MacOS/BSD编译运行获取网卡MAC地址的代码,于是整理了一下,让几个802.1x Client都能支持MacOS/BSD了。 下载了个FreeBSD 7.2在vbox虚拟机里面装了下,发现FreeBSD比Linux好像原始多了[呃,我说安装程序],分区的时候他不叫Create Partition,叫Create Slice,我对着界面看了半天才猜到,囧;退出那里写着:Q = Finish,Quit就Quit嘛,什么Finish,纠结……但还好,其他的配置跟Linux还是很相像的,调试了一下就有了全可编译的代码了。 代码部分修改倒没多少,就添加了一个专门给BSD系系统获取MAC的函数,再用maroc判断一下,以及几个头文件,就完事了,有点麻烦的是makefile,发现freebsd默认那个make好像是很古老很古老的版本,我程序里面那个Makefile是用了vim里面c-support插件里面带的Makefile模板,有点复杂,但是freebsd居然不支持!所以整理了个简单的版本,专门给MacOS/BSD编译,也方便别人的修改;另外一个原因是,程序里面转换服务器消息时候用了iconv库,linux里面iconv是系统内嵌库来的,用不着链接的时候给出参数,但MacOS/BSD偏偏就要-liconv…… 需要编译MacOS/BSD版本的同学,可以check出项目里面trunk的代码,运行make -f Makefile.bsd来编译。Insion同学已经编译成功,而且在他的主页上有二进制版下载了。 相对的说,可能在MacOS里面编译是最麻烦的,我大概说说流程(实际上我没试过,我可没Mac机器[T.T]) 1.安装gcc,参考这里从http://connect.apple.com/的Dev Tools里面下载Xcode Tools,安装。2.编译安装libpcap,从http://www.tcpdump.org/release/libpcap-1.0.0.tar.gz下载源码,tar xvfz libpcap-1.0.0.tar.gz解压,进去该目录,./configure、make、make install安装完成;3.编译802.1x客户端,从所用项目内签出源码,在目录内make,没出什么差错的话,已经完成了。然后按Readme.txt的方法安装运行,即可! 项目主页 锐捷:http://code.google.com/p/zruijie4gzhu/联想:http://code.google.com/p/zlevoclient/神州数码:http://code.google.com/p/zdcclient/

Page optimized by WP Minify WordPress Plugin

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org