<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>龍昌博客</title>
	<atom:link href="http://www.xefan.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.xefan.com</link>
	<description>关注Linux及开源信息</description>
	<lastBuildDate>Wed, 18 Jan 2012 02:09:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Windows下静态编译Qt4</title>
		<link>http://www.xefan.com/archives/83668.html</link>
		<comments>http://www.xefan.com/archives/83668.html#comments</comments>
		<pubDate>Thu, 29 Dec 2011 14:55:04 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[编程开发]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.xefan.com/?p=83668</guid>
		<description><![CDATA[既然是静态编译，那就要编译出来的程序不信赖于任何dll文件。 首先下载qt-win-opensource-4.7.4-mingw.exe： http://get.qt.nokia.com/qt/source/qt-win-opensource-4.7.4-mingw.exe 和MinGW-gcc440_1.zip： http://get.qt.nokia.com/misc/MinGW-gcc440_1.zip 然后依次解压MinGW-gcc440_1.zip、安装qt-win-opensource-4.7.4-mingw.exe。记得要将gcc的目录和qt的目录添加到环境变量中。 然后打开DOS窗口并切换到Qt的目录（比如我的是D:\Qt\4.7.4），再设置两个变量 set QTDIR=D:\Qt\4.7.4 set QMAKESPEC=win32-g++ 再编辑D:\Qt\4.7.4\mkspecs\win32-g++\qmake.conf文件（最好先备份），改两处： QMAKE_LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc 修改为 QMAKE_LFLAGS = -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc 再将 QMAKE_LFLAGS_DLL = -shared 修改为 QMAKE_LFLAGS_DLL = -static 再执行命令： configure -platform win32-g++ -release -opensource -static -fast &#8230; <a href="http://www.xefan.com/archives/83668.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>既然是静态编译，那就要编译出来的程序不信赖于任何dll文件。<br />
首先下载qt-win-opensource-4.7.4-mingw.exe： http://get.qt.nokia.com/qt/source/qt-win-opensource-4.7.4-mingw.exe<br />
和MinGW-gcc440_1.zip： http://get.qt.nokia.com/misc/MinGW-gcc440_1.zip</p>
<p>然后依次解压MinGW-gcc440_1.zip、安装qt-win-opensource-4.7.4-mingw.exe。记得要将gcc的目录和qt的目录添加到环境变量中。</p>
<p>然后打开DOS窗口并切换到Qt的目录（比如我的是D:\Qt\4.7.4），再设置两个变量<br />
<em>set QTDIR=D:\Qt\4.7.4</em><br />
<em> set QMAKESPEC=win32-g++</em></p>
<p>再编辑D:\Qt\4.7.4\mkspecs\win32-g++\qmake.conf文件（最好先备份），改两处：<br />
<em>QMAKE_LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc</em><br />
修改为<br />
<em>QMAKE_LFLAGS = <span style="color: #ff0000;">-static</span> -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc</em><br />
再将<br />
<em>QMAKE_LFLAGS_DLL = -shared</em><br />
修改为<br />
<em>QMAKE_LFLAGS_DLL = -static</em></p>
<p>再执行命令：<br />
configure -platform win32-g++ <span style="color: #ff0000;">-release</span> -opensource <span style="color: #ff0000;">-static</span> -fast -qt-sql-sqlite -plugin-sql-sqlite -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-webkit -nomake examples -nomake docs -nomake demos</p>
<p>如果有提问是否遵守LGPL协议，选y。配置完成后，最后两句是这样的：<br />
Qt is now configured for building. Just run mingw32-make.<br />
To reconfigure, run mingw32-make confclean and configure.</p>
<p>cd src<br />
mingw32-make -i -k</p>
<p>注意：我们只在在Qt子目录src里运行make。不要在整个qt库的大目录下运行make。只在src目录make，这样只编译核心的Qt库和一些插件，节省时间，而且有核心Qt库就够用了。<br />
如果在D:\Qt\4.7.4\ 整个大目录下运行make，那么make还会去重新编译生成tools目录下的代码，重新做工具程序，像assistant.exe、designer.exe、linguist.exe、qmlviewer.exe等等（生成后全在bin目录）。这些工具使用静态库生成后巨大无比。这些工具程序不管是静态链接还是动态链接生成的，对我们编程压根没影响，都一样用。</p>
<p>好了，接下来就是漫长的等待。2个多小时左右就应该可以编译完成了。<br />
此时再用Qt编译生成的可执行文件不用再信赖Qt的动态库了,但是文件比较大随便一个都是10M以上，而且如果使用的是从qt官网下载的MinGW-gcc编译生成的可执行文件还是会信赖mingwm10.dll动态库。这个只需换一个版本的编译器即可，我用的是这个： http://115.com/file/dn3fkn1g</p>
<p>如果嫌这个过程太麻烦可以直接下载我编译好的静态库来使用：<br />
Qt4.7.4_Win32静态库.part1.rar： http://115.com/file/dn3zwayy<br />
Qt4.7.4_Win32静态库.part2.rar： http://115.com/file/dn3zwa9g<br />
这个是完整版的，解压下来有2G多。如果觉得太大了可以下载精简版：<br />
Qt4.7.4_Win32静态库精简版.rar： http://115.com/file/bhy7bat6<br />
精简版只保留了编译时需要的库文件和qmake等必要的工具，解压下来有500M左右。<br />
注意：只有解压到D盘根目录下才能使用<br />
编译器用的是mingw-7.2.exe： http://115.com/file/dn3fkn1g</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83668.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux下静态编译win32的GTK程序</title>
		<link>http://www.xefan.com/archives/83665.html</link>
		<comments>http://www.xefan.com/archives/83665.html#comments</comments>
		<pubDate>Sun, 27 Nov 2011 03:36:20 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[编程开发]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.xefan.com/?p=83665</guid>
		<description><![CDATA[首先感谢hangyu网友分享的GTK静态库。 原帖地址：http://forum.ubuntu.org.cn/viewtopic.php?f=162&#38;t=354286 下载地址：http://code.google.com/p/static-gtk2-mingw32/ 先说一下在Windows下编译的方法。 解压文件，然后进入解压后的bin目录执行命令： pkg-config.exe &#8211;libs &#8211;cflags “gtk+-2.0&#8243; 如果出现以下错误 Package gtk+-2.0 was not found in the pkg-config search path. Perhaps you should add the directory containing `gtk+-2.0.pc&#8217; to the PKG_CONFIG_PATH environment variable No package &#8216;gtk+-2.0&#8242; found 则先执行命令：set PKG_CONFIG_PATH=你的解压路径\lib\pkgconfig 设置PKG_CONFIG_PATH环境变量 我得到的结果是： &#8230; <a href="http://www.xefan.com/archives/83665.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>首先感谢hangyu网友分享的GTK静态库。<br />
原帖地址：http://forum.ubuntu.org.cn/viewtopic.php?f=162&amp;t=354286<br />
下载地址：http://code.google.com/p/static-gtk2-mingw32/</p>
<p>先说一下在Windows下编译的方法。</p>
<p>解压文件，然后进入解压后的bin目录执行命令：<br />
<em>pkg-config.exe &#8211;libs &#8211;cflags “gtk+-2.0&#8243;</em><br />
如果出现以下错误<br />
Package gtk+-2.0 was not found in the pkg-config search path.<br />
Perhaps you should add the directory containing `gtk+-2.0.pc&#8217;<br />
to the PKG_CONFIG_PATH environment variable<br />
No package &#8216;gtk+-2.0&#8242; found<br />
则先执行命令：<em>set PKG_CONFIG_PATH=你的解压路径\lib\pkgconfig</em> 设置PKG_CONFIG_PATH环境变量</p>
<p>我得到的结果是：<br />
-mms-bitfields -IE:/Dev-Cpp/gtk+-2.0/include/gtk-2.0 -IE:/Dev-Cpp/gtk+-2.0/lib/gtk-2.0/include -IE:/Dev-Cpp/gtk+-2.0/include/atk-1.0 -IE:/Dev-Cpp/gtk+-2.0/include/cairo -IE:/Dev-Cpp/gtk+-2.0/include/gdk-pixbuf-2.0 -IE:/Dev-Cpp/gtk+-2.0/include/pango-1.0 -IE:/Dev-Cpp/gtk+-2.0/include/glib-2.0 -IE:/Dev-Cpp/gtk+-2.0/lib/glib-2.0/include -IE:/Dev-Cpp/gtk+-2.0/include/pixman-1 -IE:/Dev-Cpp/gtk+-2.0/include -IE:/Dev-Cpp/gtk+-2.0/include/freetype2 -I/gtk-dev/include/libpng14 -LE:/Dev-Cpp/gtk+-2.0/lib -L/gtk-dev/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -limm32 -lshell32 -luuid -latk-1.0 -lpangocairo-1.0 -lgio-2.0 -lshlwapi -ldnsapi -lgdk_pixbuf-2.0 -ltiff -ljpeg -ljasper -lpangoft2-1.0 -lpangowin32-1.0 -lusp10 -lfontconfig -lexpat -lpango-1.0 -lcairo -lpixman-1 -lfreetype -lmsimg32 -lgdi32 -lpng -lz -lm -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl -liconv -lws2_32 -lole32</p>
<p>记得保存这个结果，作为编译时的参数在后面要用到。<br />
然后编译一个程序试试，将以下代码保存为test.c文件。</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;gtk/gtk.h&gt;
int main(int argc,char *argv[]){
    GtkWidget *window, *label;
    gtk_init(&amp;argc,&amp;argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),&quot;Hellow World&quot;);
    g_signal_connect(G_OBJECT(window), &quot;destroy&quot;, G_CALLBACK(gtk_main_quit), NULL);
    label = gtk_label_new(&quot;龙昌博客:http://www.xefan.com&quot;);
    gtk_container_add (GTK_CONTAINER (window), label);
    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}
</pre>
<p>执行命令进行编译：<br />
gcc -o test.exe test.c -mms-bitfields -IE:/Dev-Cpp/gtk+-2.0/include/gtk-2.0 -IE:/Dev-Cpp/gtk+-2.0/lib/gtk-2.0/include -IE:/Dev-Cpp/gtk+-2.0/include/atk-1.0 -IE:/Dev-Cpp/gtk+-2.0/include/cairo -IE:/Dev-Cpp/gtk+-2.0/include/gdk-pixbuf-2.0 -IE:/Dev-Cpp/gtk+-2.0/include/pango-1.0 -IE:/Dev-Cpp/gtk+-2.0/include/glib-2.0 -IE:/Dev-Cpp/gtk+-2.0/lib/glib-2.0/include -IE:/Dev-Cpp/gtk+-2.0/include/pixman-1 -IE:/Dev-Cpp/gtk+-2.0/include -IE:/Dev-Cpp/gtk+-2.0/include/freetype2 -I/gtk-dev/include/libpng14 -LE:/Dev-Cpp/gtk+-2.0/lib -L/gtk-dev/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -limm32 -lshell32 -luuid -latk-1.0 -lpangocairo-1.0 -lgio-2.0 -lshlwapi -ldnsapi -lgdk_pixbuf-2.0 -ltiff -ljpeg -ljasper -lpangoft2-1.0 -lpangowin32-1.0 -lusp10 -lfontconfig -lexpat -lpango-1.0 -lcairo -lpixman-1 -lfreetype -lmsimg32 -lgdi32 -lpng -lz -lm -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl -liconv -lws2_32 -lole32<br />
如果不出错的话则生成一个test.exe的可执行文件。<br />
如果没有gcc的话，可以下载安装一个MinGW程序，我之前用MinGW的gcc 4.4.0版本来编译结果出错了，然后换了个4.6版本的才能顺利编译，下载地址：http://nuwen.net/mingw.html</p>
<p>然后再介绍下在Linux下交叉编译的方法。</p>
<p>前一篇文章介绍了在Linux下交叉编译Windows程序的方法。现在只需把上面的参数的路径改下即可。<br />
我的Windows的E盘在Linux下挂载到/mnt/Win_E ，再用上面的程序测试，执行命令：<br />
i486-mingw32-gcc -o test.exe test.c -mms-bitfields -I/mnt/Win_E/Dev-Cpp/gtk+-2.0/include/gtk-2.0 -I/mnt/Win_E/Dev-Cpp/gtk+-2.0/lib/gtk-2.0/include -I/mnt/Win_E/Dev-Cpp/gtk+-2.0/include/atk-1.0 -I/mnt/Win_E/Dev-Cpp/gtk+-2.0/include/cairo -I/mnt/Win_E/Dev-Cpp/gtk+-2.0/include/gdk-pixbuf-2.0 -I/mnt/Win_E/Dev-Cpp/gtk+-2.0/include/pango-1.0 -I/mnt/Win_E/Dev-Cpp/gtk+-2.0/include/glib-2.0 -I/mnt/Win_E/Dev-Cpp/gtk+-2.0/lib/glib-2.0/include -I/mnt/Win_E/Dev-Cpp/gtk+-2.0/include/pixman-1 -I/mnt/Win_E/Dev-Cpp/gtk+-2.0/include -I/mnt/Win_E/Dev-Cpp/gtk+-2.0/include/freetype2 -I/gtk-dev/include/libpng14  -L/mnt/Win_E/Dev-Cpp/gtk+-2.0/lib -L/gtk-dev/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -limm32 -lshell32 -luuid -latk-1.0 -lpangocairo-1.0 -lgio-2.0 -lshlwapi -ldnsapi -lgdk_pixbuf-2.0 -ltiff -ljpeg -ljasper -lpangoft2-1.0 -lpangowin32-1.0 -lusp10 -lfontconfig -lexpat -lpango-1.0 -lcairo -lpixman-1 -lfreetype -lmsimg32 -lgdi32 -lpng -lz -lm -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl -liconv -lws2_32 -lole32<br />
然后生成 test.exe文件，可以用wine来测试下是否可用。</p>
<p>这个生成的文件好像有点大了，随便一个都是25M以上。使用命令：<br />
i486-mingw32-strip hellow.exe<br />
一下子可以减到7M左右。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83665.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux下交叉编译windows程序</title>
		<link>http://www.xefan.com/archives/83663.html</link>
		<comments>http://www.xefan.com/archives/83663.html#comments</comments>
		<pubDate>Fri, 25 Nov 2011 13:35:27 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[编程开发]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.xefan.com/?p=83663</guid>
		<description><![CDATA[有时候需要编写在Windows下运行的程序，但是又不想切换到Windows下来编译，于是就想在Linux下来编译Windows下运行的exe文件。 这个需要先安装mingw32交叉编译工具。 ubuntu下使用命令：sudo apt-get install mingw32进行安装， Arch Linux下使用命令：sudo pacman -S mingw32-binutils mingw32-gcc mingw32-pthreads mingw32-runtime mingw32-w32api 安装完后测试一下效果。 将以下代码保存为mingw32_test.c文件。 然后执行命令： [lcj@lcj C]$ i486-mingw32-gcc -o mingw32_test.exe mingw32_test.c mingw32_test.c: In function &#8216;main&#8217;: mingw32_test.c:3:5: warning: incompatible implicit declaration of built-in function &#8216;printf&#8217; [enabled by default] &#8230; <a href="http://www.xefan.com/archives/83663.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>有时候需要编写在Windows下运行的程序，但是又不想切换到Windows下来编译，于是就想在Linux下来编译Windows下运行的exe文件。</p>
<p>这个需要先安装mingw32交叉编译工具。<br />
ubuntu下使用命令：sudo apt-get install mingw32进行安装，<br />
Arch Linux下使用命令：sudo pacman -S mingw32-binutils mingw32-gcc mingw32-pthreads mingw32-runtime mingw32-w32api</p>
<p>安装完后测试一下效果。<br />
将以下代码保存为mingw32_test.c文件。</p>
<pre class="brush: cpp; title: ; notranslate">
int main(int argc, char *argv)
{
    printf(&quot;Windows Compiler Test\nhttp://www.xefan.com\n&quot;);
    return 0;
}
</pre>
<p>然后执行命令：<br />
[lcj@lcj C]$ i486-mingw32-gcc -o mingw32_test.exe mingw32_test.c<br />
mingw32_test.c: In function &#8216;main&#8217;:<br />
mingw32_test.c:3:5: warning: incompatible implicit declaration of built-in function &#8216;printf&#8217; [enabled by default]<br />
[lcj@lcj C]$ wine mingw32_test.exe<br />
Windows Compiler Test</p>
<p>http://www.xefan.com</p>
<p>[lcj@lcj C]$<br />
经测试在wine下能正常运行，在虚拟机里的WinXP下测试也可正常运行。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83663.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux NFS服务器设置</title>
		<link>http://www.xefan.com/archives/83661.html</link>
		<comments>http://www.xefan.com/archives/83661.html#comments</comments>
		<pubDate>Wed, 23 Nov 2011 11:56:27 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[Linux栏目]]></category>
		<category><![CDATA[Arch]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.xefan.com/?p=83661</guid>
		<description><![CDATA[我用的是Arch Linux，不过不同的版本应该都差不多吧。 1、首先安装nfs-utils软件包。 2、修改/ect/exports文件，添加分享，格式为： 路径 允许的主机(属性) 如：/opt/arm 192.168.1.*(ro,sync,no_root_squash) 3、启动nfs服务。 执行命令：/etc/rc.d/nfs-server start 现在可以在其他主机上使用mount命令来挂载该主机的分享目录，命令格式：mount -t nfs -o nolock 主机:/路径 挂载点  如：mount -t nfs -o nolock 192.168.1.100:/opt/arm /mnt/nfs  如果挂载时出现提示：mount.nfs: access denied by server while mounting，说明请求被拒绝了。 修改/ect/hosts.allow文件（没有请自行创建），添加允许，格式 portmap: 主机/网段 :allow 如： portmap: 192.168.1.100 :allow &#8230; <a href="http://www.xefan.com/archives/83661.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>我用的是Arch Linux，不过不同的版本应该都差不多吧。</p>
<p>1、首先安装nfs-utils软件包。</p>
<p>2、修改/ect/exports文件，添加分享，格式为：<br />
<em>路径 允许的主机(属性)</em><br />
如：<em>/opt/arm 192.168.1.*(ro,sync,no_root_squash)</em></p>
<p>3、启动nfs服务。<br />
执行命令：/etc/rc.d/nfs-server start</p>
<p>现在可以在其他主机上使用mount命令来挂载该主机的分享目录，命令格式：<em>mount -t nfs -o nolock 主机:/路径 挂载点 </em><br />
如：<em>mount -t nfs -o nolock 192.168.1.100:/opt/arm /mnt/nfs </em></p>
<p>如果挂载时出现提示：mount.nfs: access denied by server while mounting，说明请求被拒绝了。<br />
修改/ect/hosts.allow文件（没有请自行创建），添加允许，格式<br />
portmap: 主机/网段 :allow<br />
如：<br />
portmap: 192.168.1.100 :allow<br />
portmap: 192.168.1.0/255.255.255.0 :allow</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83661.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux samba服务器设置</title>
		<link>http://www.xefan.com/archives/83658.html</link>
		<comments>http://www.xefan.com/archives/83658.html#comments</comments>
		<pubDate>Tue, 22 Nov 2011 15:26:39 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[Linux栏目]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.xefan.com/?p=83658</guid>
		<description><![CDATA[我用的是Arch Linux，不过各个版本的Linux的设置应该都差不多吧。 1、首先安装samba。 2、/etc/samba/smb.conf为samba的配置文件，所有的修改操作都在此文件中进行。/etc/samba/smb.conf.default为配置模板，可以参照其进行配置。 例如要添加一项分享，可以修改/ect/samba/smb.conf文件，添加如下内容： [printers]                                 #显示分享名 comment = All Printers path = /var/spool/samba     #分享的路径 browseable = yes         &#8230; <a href="http://www.xefan.com/archives/83658.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>我用的是Arch Linux，不过各个版本的Linux的设置应该都差不多吧。</p>
<p>1、首先安装samba。</p>
<p>2、/etc/samba/smb.conf为samba的配置文件，所有的修改操作都在此文件中进行。/etc/samba/smb.conf.default为配置模板，可以参照其进行配置。</p>
<p>例如要添加一项分享，可以修改/ect/samba/smb.conf文件，添加如下内容：<br />
[printers]                                 #显示分享名<br />
comment = All Printers<br />
path = /var/spool/samba     #分享的路径<br />
browseable = yes                    #允许浏览<br />
# Set public = yes to allow user &#8216;guest account&#8217; to print<br />
guest ok = yes                         #允许匿名访问<br />
writable = yes                          #可写<br />
printable = yes</p>
<p>3、启动samba服务。<br />
执行命令：/etc/rc.d/samba start</p>
<p>现在在Windows下可以直接在地址栏输入“\\主机ip ”进行访问；在Linux下可以使用smbclient命令进行连接。</p>
<p>smbclient命令使用方法：<br />
列出服务器上共享<br />
#smbclient -L 机器IP -U 用户名%密码<br />
例：#smbclient -L //192.168.1.100/ -U benson%1</p>
<p>登入samba<br />
#smbclient //机器IP/共享目录 -U 用户名称%密码<br />
例：#smbclient //192.168.1.100/printers -U benson%1<br />
登入成功后出现提示符 smb:/&gt; ，接下来的操作和ftp时命令一样，用get下载文件而用put上传文件，命令可以用help查看。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83658.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arch+xfce自动挂载</title>
		<link>http://www.xefan.com/archives/83656.html</link>
		<comments>http://www.xefan.com/archives/83656.html#comments</comments>
		<pubDate>Mon, 07 Nov 2011 14:18:17 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[Linux栏目]]></category>
		<category><![CDATA[Arch]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.xefan.com/?p=83656</guid>
		<description><![CDATA[我的是Arch Linux的系统，用的xfce4的桌面。 网上的方法是通过编写rules文件用udev来自动挂载，不过rules太复杂了，看了半天没看懂。 我用的方法是安装gvfs，命令： #pacman -S gvfs 然后重启一下系统，现在就可以自动挂载移动硬盘、U盘、光盘了，并且之前一直隐藏的“回收站”也显示了。 https://wiki.archlinux.org/index.php/Xfce#Removable_Devices &#160;]]></description>
			<content:encoded><![CDATA[<p>我的是Arch Linux的系统，用的xfce4的桌面。</p>
<p>网上的方法是通过编写rules文件用udev来自动挂载，不过rules太复杂了，看了半天没看懂。</p>
<p>我用的方法是安装gvfs，命令：<br />
#pacman -S gvfs</p>
<p>然后重启一下系统，现在就可以自动挂载移动硬盘、U盘、光盘了，并且之前一直隐藏的“回收站”也显示了。</p>
<p>https://wiki.archlinux.org/index.php/Xfce#Removable_Devices</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83656.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用Glade进行GTK开发</title>
		<link>http://www.xefan.com/archives/83650.html</link>
		<comments>http://www.xefan.com/archives/83650.html#comments</comments>
		<pubDate>Fri, 04 Nov 2011 15:07:00 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[编程开发]]></category>
		<category><![CDATA[gtk]]></category>

		<guid isPermaLink="false">http://www.xefan.com/?p=83650</guid>
		<description><![CDATA[在前面的文章介绍了使用Glade进行PyGTK开发，现在再来说一说使用Glade来进行GTK的开发。 首先需要的开发环境： Glade3、GTK+2.0、GCC 先用Glade设计一个用户界面，保存为test.glade，内容如下： 再创建一个C源文件，保存为test.c，内容如下： 然后再编译运行查看效果。 如果出现类似“Gtk-WARNING **: Could not find signal handler &#8216;on_MainWindow_destroy&#8217;”的错误请尝试以下方法： 方法一：将编译命令改为：gcc -o test test.c `pkg-config &#8211;libs &#8211;cflags gtk+-2.0` -export-dynamic 方法二：将编译命令改为：gcc -o test test.c `pkg-config &#8211;libs &#8211;cflags libglade-2.0 gmodule-export-2.0`]]></description>
			<content:encoded><![CDATA[<p>在前面的文章介绍了<a title="使用Glade进行PyGTK开发" href="http://www.xefan.com/?p=83642" target="_blank">使用Glade进行PyGTK开发</a>，现在再来说一说使用Glade来进行GTK的开发。</p>
<p>首先需要的开发环境：<br />
Glade3、GTK+2.0、GCC</p>
<p>先用Glade设计一个用户界面，保存为test.glade，内容如下：</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;interface&gt;
  &lt;requires lib=&quot;gtk+&quot; version=&quot;2.24&quot;/&gt;
  &lt;!-- interface-naming-policy project-wide --&gt;
  &lt;object class=&quot;GtkWindow&quot; id=&quot;window1&quot;&gt;
    &lt;property name=&quot;can_focus&quot;&gt;False&lt;/property&gt;
    &lt;property name=&quot;resizable&quot;&gt;False&lt;/property&gt;
    &lt;property name=&quot;default_width&quot;&gt;440&lt;/property&gt;
    &lt;property name=&quot;default_height&quot;&gt;450&lt;/property&gt;
    &lt;signal name=&quot;destroy&quot; handler=&quot;on_MainWindow_destroy&quot; swapped=&quot;no&quot;/&gt;
    &lt;child&gt;
      &lt;object class=&quot;GtkAlignment&quot; id=&quot;alignment1&quot;&gt;
        &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
        &lt;property name=&quot;can_focus&quot;&gt;False&lt;/property&gt;
        &lt;property name=&quot;top_padding&quot;&gt;10&lt;/property&gt;
        &lt;property name=&quot;bottom_padding&quot;&gt;10&lt;/property&gt;
        &lt;property name=&quot;left_padding&quot;&gt;10&lt;/property&gt;
        &lt;property name=&quot;right_padding&quot;&gt;10&lt;/property&gt;
        &lt;child&gt;
          &lt;object class=&quot;GtkVBox&quot; id=&quot;vbox1&quot;&gt;
            &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
            &lt;property name=&quot;can_focus&quot;&gt;False&lt;/property&gt;
            &lt;child&gt;
              &lt;object class=&quot;GtkLabel&quot; id=&quot;label1&quot;&gt;
                &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
                &lt;property name=&quot;can_focus&quot;&gt;False&lt;/property&gt;
                &lt;property name=&quot;label&quot; translatable=&quot;yes&quot;&gt;龙昌博客： http://www.xefan.com&lt;/property&gt;
              &lt;/object&gt;
              &lt;packing&gt;
                &lt;property name=&quot;expand&quot;&gt;True&lt;/property&gt;
                &lt;property name=&quot;fill&quot;&gt;True&lt;/property&gt;
                &lt;property name=&quot;position&quot;&gt;0&lt;/property&gt;
              &lt;/packing&gt;
            &lt;/child&gt;
            &lt;child&gt;
              &lt;object class=&quot;GtkButton&quot; id=&quot;button1&quot;&gt;
                &lt;property name=&quot;label&quot; translatable=&quot;yes&quot;&gt;关闭&lt;/property&gt;
                &lt;property name=&quot;use_action_appearance&quot;&gt;False&lt;/property&gt;
                &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
                &lt;property name=&quot;can_focus&quot;&gt;True&lt;/property&gt;
                &lt;property name=&quot;receives_default&quot;&gt;True&lt;/property&gt;
                &lt;signal name=&quot;clicked&quot; handler=&quot;on_MainWindow_destroy&quot; swapped=&quot;no&quot;/&gt;
              &lt;/object&gt;
              &lt;packing&gt;
                &lt;property name=&quot;expand&quot;&gt;False&lt;/property&gt;
                &lt;property name=&quot;fill&quot;&gt;False&lt;/property&gt;
                &lt;property name=&quot;position&quot;&gt;1&lt;/property&gt;
              &lt;/packing&gt;
            &lt;/child&gt;
          &lt;/object&gt;
        &lt;/child&gt;
      &lt;/object&gt;
    &lt;/child&gt;
  &lt;/object&gt;
&lt;/interface&gt;
</pre>
<p>再创建一个C源文件，保存为test.c，内容如下：</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;gtk/gtk.h&gt;

void on_MainWindow_destroy(GtkObject *widget, gpointer data)
{
    gtk_main_quit();
}

int main(int argc, char *argv[])
{
    GtkBuilder *builder;
    gtk_init(&amp;argc, &amp;argv);
    GtkWidget *window;
    builder = gtk_builder_new();
    gtk_builder_add_from_file(builder, &quot;test.glade&quot;, NULL);

    window = GTK_WIDGET(gtk_builder_get_object(builder, &quot;window1&quot;));
    gtk_builder_connect_signals(builder, NULL);
    // 释放builder的空间
    g_object_unref(G_OBJECT(builder));

    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}
</pre>
<p>然后再编译运行查看效果。<br />
如果出现类似“Gtk-WARNING **: Could not find signal handler &#8216;on_MainWindow_destroy&#8217;”的错误请尝试以下方法：<br />
方法一：将编译命令改为：gcc -o test test.c `pkg-config &#8211;libs &#8211;cflags gtk+-2.0` <span style="color: #ff0000;">-export-dynamic</span><br />
方法二：将编译命令改为：gcc -o test test.c `pkg-config &#8211;libs &#8211;cflags <span style="color: #ff0000;">libglade-2.0 gmodule-export-2.0</span>`</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83650.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>永中Office的ibus输入法问题</title>
		<link>http://www.xefan.com/archives/83648.html</link>
		<comments>http://www.xefan.com/archives/83648.html#comments</comments>
		<pubDate>Fri, 28 Oct 2011 11:35:49 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[Linux栏目]]></category>
		<category><![CDATA[ibus]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.xefan.com/?p=83648</guid>
		<description><![CDATA[我在永中Office下无法调用ibus输入法，但是在其他窗口中都没有问题，如：gVIM，LeafPad，OpenOffice等等。我按照网上的方法在.bashrc文件中也添加了以下内容，可是还是不行。 export GTK_IM_MODULE=ibus export XMODIFIERS=@im=ibus export QT_IM_MODULE=ibus 正打算更换输入法时无意中发现了问题的所在。 首先用ps -e&#124;grep ibus命令发现只有 ibus-daemon、ibus-gconf两个进程。 然后执行命令/usr/lib/ibus/ibus-x11 &#38;，运行ibux-x11。 这时就有了 ibus-daemon、ibus-gconf、ibus-x11三个进程。此时在永中Office中可以正常使用ibus输入法了。 原来是ibus-x11没有运行的原因，如果不想每次都手动运行的话，可以将它设置为开机自动启动。]]></description>
			<content:encoded><![CDATA[<p>我在永中Office下无法调用ibus输入法，但是在其他窗口中都没有问题，如：gVIM，LeafPad，OpenOffice等等。我按照网上的方法在.bashrc文件中也添加了以下内容，可是还是不行。<br />
<em>export GTK_IM_MODULE=ibus</em><br />
<em> export XMODIFIERS=@im=ibus</em><br />
<em> export QT_IM_MODULE=ibus</em></p>
<p>正打算更换输入法时无意中发现了问题的所在。<br />
首先用ps -e|grep ibus命令发现只有 ibus-daemon、ibus-gconf两个进程。<br />
然后执行命令/usr/lib/ibus/ibus-x11 &amp;，运行ibux-x11。 这时就有了 ibus-daemon、ibus-gconf、ibus-x11三个进程。此时在永中Office中可以正常使用ibus输入法了。</p>
<p>原来是ibus-x11没有运行的原因，如果不想每次都手动运行的话，可以将它设置为开机自动启动。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83648.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用Glade进行PyGTK开发</title>
		<link>http://www.xefan.com/archives/83642.html</link>
		<comments>http://www.xefan.com/archives/83642.html#comments</comments>
		<pubDate>Tue, 25 Oct 2011 15:29:50 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[Python栏目]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.xefan.com/?p=83642</guid>
		<description><![CDATA[使用Glade来进行GTK开发效率比较高，下面是一个例子。 将以下代码保存为test.glade文件。 将以下代码保存为test.py文件。 然后运行查看效果。]]></description>
			<content:encoded><![CDATA[<p>使用Glade来进行GTK开发效率比较高，下面是一个例子。</p>
<p>将以下代码保存为test.glade文件。</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!--   文件名：test.glade  --&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;interface&gt;
  &lt;requires lib=&quot;gtk+&quot; version=&quot;2.24&quot;/&gt;
  &lt;!-- interface-naming-policy project-wide --&gt;
  &lt;object class=&quot;GtkWindow&quot; id=&quot;window1&quot;&gt;
    &lt;property name=&quot;can_focus&quot;&gt;False&lt;/property&gt;
    &lt;property name=&quot;resizable&quot;&gt;False&lt;/property&gt;
    &lt;property name=&quot;default_width&quot;&gt;440&lt;/property&gt;
    &lt;property name=&quot;default_height&quot;&gt;450&lt;/property&gt;
    &lt;signal name=&quot;destroy&quot; handler=&quot;on_MainWindow_destroy&quot; swapped=&quot;no&quot;/&gt;
    &lt;child&gt;
      &lt;object class=&quot;GtkAlignment&quot; id=&quot;alignment1&quot;&gt;
        &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
        &lt;property name=&quot;can_focus&quot;&gt;False&lt;/property&gt;
        &lt;property name=&quot;top_padding&quot;&gt;10&lt;/property&gt;
        &lt;property name=&quot;bottom_padding&quot;&gt;10&lt;/property&gt;
        &lt;property name=&quot;left_padding&quot;&gt;10&lt;/property&gt;
        &lt;property name=&quot;right_padding&quot;&gt;10&lt;/property&gt;
        &lt;child&gt;
          &lt;object class=&quot;GtkVBox&quot; id=&quot;vbox1&quot;&gt;
            &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
            &lt;property name=&quot;can_focus&quot;&gt;False&lt;/property&gt;
            &lt;child&gt;
              &lt;object class=&quot;GtkLabel&quot; id=&quot;label1&quot;&gt;
                &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
                &lt;property name=&quot;can_focus&quot;&gt;False&lt;/property&gt;
                &lt;property name=&quot;label&quot; translatable=&quot;yes&quot;&gt;龙昌博客： http://www.xefan.com&lt;/property&gt;
              &lt;/object&gt;
              &lt;packing&gt;
                &lt;property name=&quot;expand&quot;&gt;True&lt;/property&gt;
                &lt;property name=&quot;fill&quot;&gt;True&lt;/property&gt;
                &lt;property name=&quot;position&quot;&gt;0&lt;/property&gt;
              &lt;/packing&gt;
            &lt;/child&gt;
            &lt;child&gt;
              &lt;object class=&quot;GtkButton&quot; id=&quot;button1&quot;&gt;
                &lt;property name=&quot;label&quot; translatable=&quot;yes&quot;&gt;关闭&lt;/property&gt;
                &lt;property name=&quot;use_action_appearance&quot;&gt;False&lt;/property&gt;
                &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
                &lt;property name=&quot;can_focus&quot;&gt;True&lt;/property&gt;
                &lt;property name=&quot;receives_default&quot;&gt;True&lt;/property&gt;
                &lt;signal name=&quot;clicked&quot; handler=&quot;on_MainWindow_destroy&quot; swapped=&quot;no&quot;/&gt;
              &lt;/object&gt;
              &lt;packing&gt;
                &lt;property name=&quot;expand&quot;&gt;False&lt;/property&gt;
                &lt;property name=&quot;fill&quot;&gt;False&lt;/property&gt;
                &lt;property name=&quot;position&quot;&gt;1&lt;/property&gt;
              &lt;/packing&gt;
            &lt;/child&gt;
          &lt;/object&gt;
        &lt;/child&gt;
      &lt;/object&gt;
    &lt;/child&gt;
  &lt;/object&gt;
&lt;/interface&gt;
</pre>
<p>将以下代码保存为test.py文件。</p>
<pre class="brush: python; title: ; notranslate">
#!/usr/bin/env python
# -*- encoding: UTF-8 -*-
##
# @文件名(file): test.py
# @作者(author): 龙昌锦(LongChangjin)
# @博客(blog): http://www.xefan.com
# @邮箱(mail): admin@xefan.com
# @QQ: 346202141
# @ICQ: wosuopu@gmail.com
# @时间(date): 2011-10-25
#
try:
    import pygtk
    pygtk.require(&quot;2.0&quot;)
except:
    pass
try:
    import gtk
    import gtk.glade
except:
    exit(1)

class GBuilder:
    def delete_event(self,widget,event,data=None):
        return gtk.FALSE
    def on_MainWindow_destroy(self,widget,data=None):
        gtk.main_quit()
    def __init__(self):
        #初始化 gtkbuilder
        builder = gtk.Builder()
        #设置 glade文件
        builder.add_from_file(&quot;test.glade&quot;)
        #连接 glade文件中的signals
        builder.connect_signals(self)

        #小部件
        self.button1 = builder.get_object(&quot;button1&quot;)
        #获取主窗口
        self.window = builder.get_object(&quot;window1&quot;)
        self.window.show()

if __name__ == &quot;__main__&quot;:
    window=GBuilder()
    gtk.main()
</pre>
<p>然后运行查看效果。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83642.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用PyGTK创建Dialog对话框</title>
		<link>http://www.xefan.com/archives/83639.html</link>
		<comments>http://www.xefan.com/archives/83639.html#comments</comments>
		<pubDate>Thu, 20 Oct 2011 12:37:00 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[Python栏目]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.xefan.com/?p=83639</guid>
		<description><![CDATA[PyGTK创建Dialog的函数如下： gtk.Dialog(title=None, parent=None, flags=0, buttons=None) 原文地址：http://www.pygtk.org/docs/pygtk/class-gtkdialog.html#constructor-gtkdialog 下面是一个例子：]]></description>
			<content:encoded><![CDATA[<p>PyGTK创建Dialog的函数如下：<br />
gtk.Dialog(title=None, parent=None, flags=0, buttons=None)<br />
原文地址：http://www.pygtk.org/docs/pygtk/class-gtkdialog.html#constructor-gtkdialog</p>
<p>下面是一个例子：</p>
<pre class="brush: python; title: ; notranslate">
#!/usr/bin/env python
# -*- coding:UTF-8 -*-
import gtk

label = gtk.Label(u&quot;龙昌博客  http://www.xefan.com&quot;)
dialog = gtk.Dialog(u&quot;测试对话框&quot;,
                   None,
                   gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
                   (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
                    gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
dialog.vbox.pack_start(label)
label.show()
checkbox = gtk.CheckButton(&quot;Useless checkbox&quot;)
dialog.action_area.pack_end(checkbox)
checkbox.show()
response = dialog.run()
dialog.destroy()
if response == gtk.RESPONSE_ACCEPT.real:
    print u&quot;确定&quot;
if response == gtk.RESPONSE_REJECT.real:
    print u&quot;取消&quot;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83639.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arch Linux安装xfce和slim</title>
		<link>http://www.xefan.com/archives/83637.html</link>
		<comments>http://www.xefan.com/archives/83637.html#comments</comments>
		<pubDate>Sun, 16 Oct 2011 12:24:20 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[Linux栏目]]></category>
		<category><![CDATA[Arch]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.xefan.com/?p=83637</guid>
		<description><![CDATA[这几天终于把Arch Linux + Xfce + slim配置好了，做个笔记备忘。 安装Xfce https://wiki.archlinux.org/index.php/Xfce_(简体中文) 安装准备 请在安装与使用xfce前确认已经安装有xorg以及hal。 # pacman -S xorg hal 默认安装的archlinux是不包含xorg以及hal的。如果不安装两者，将造成xfce无法启动。HAL 已经被诸如udev,udisks,upower这些程序替代 。 安装XFCE系统(Xfce 4.8) # pacman -S xfce4 xfce4-goodies # pacman -S $(pacman -Sgq xfce4-goodies &#124; grep -v xfce4-xfapplet-plugin) 默认安装的xfce4，首次启动出现的小提示窗口里面是没有任何东西的。如果你想看到刚启动时候的技巧和小提示，那么就需要安装fortune-mod # pacman -S fortune-mod &#8230; <a href="http://www.xefan.com/archives/83637.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>这几天终于把Arch Linux + Xfce + slim配置好了，做个笔记备忘。</p>
<h1>安装Xfce</h1>
<p>https://wiki.archlinux.org/index.php/Xfce_(简体中文)</p>
<p><strong>安装准备</strong><br />
请在安装与使用xfce前确认已经安装有xorg以及hal。<br />
# pacman -S xorg hal<br />
默认安装的archlinux是不包含xorg以及hal的。如果不安装两者，将造成xfce无法启动。HAL 已经被诸如udev,udisks,upower这些程序替代 。</p>
<p><strong>安装XFCE系统(Xfce 4.8)</strong><br />
# pacman -S xfce4 xfce4-goodies<br />
# pacman -S $(pacman -Sgq xfce4-goodies | grep -v xfce4-xfapplet-plugin)</p>
<p>默认安装的xfce4，首次启动出现的小提示窗口里面是没有任何东西的。如果你想看到刚启动时候的技巧和小提示，那么就需要安装fortune-mod<br />
# pacman -S fortune-mod</p>
<p>安装好xfce4之后可能会发现xfce4-mixer通过ALSA并不能控制音量，需要安装gstreamer0.10-base-plugins：<br />
# pacman -S gstreamer0.10-base-plugins</p>
<p>对于笔记本用户，Xfce4-mixer如果不能同时控制外放与耳机，请尝试安装全部Plugins：<br />
# pacman -S gstreamer0.10-plugins</p>
<p><strong>安装和配置Daemons</strong><br />
<strong>安装dbus：</strong><br />
# pacman -S dbus<br />
需要在开机的时候自动运行，应该将dbus添加到/etc/rc.conf文件中的DAEMONS：<br />
DAEMONS=(syslog-ng dbus network crond)<br />
如果不想重启开始dbus服务：<br />
# /etc/rc.d/dbus start<br />
安装gamin (fam已经是过时的东西)，它会在后台自动运行检查文件改动反应给桌面，并且不需要添加到Daemons。<br />
# pacman -S gamin</p>
<h1>运行XFCE</h1>
<p><strong>手动启动</strong><br />
你只需要运行：<br />
$ startxfce4<br />
从终端启动，例如使用xinit/startx 需要配置Xinitrc (简体中文)。<br />
如果还没有~/.xinitrc 文件，系统里有一份实例文件供参考：<br />
$ cp /etc/skel/.xinitrc ~/.xinitrc<br />
在最后添加（因为权限的问题推荐在启动xfce之前添加ck-launch-session dbus-launch启）：<br />
<em>exec ck-launch-session dbus-launch &#8211;exit-with-session startxfce4</em></p>
<p><strong>在XFCE中关机和重启</strong><br />
在/etc/sudoers文件末尾添加如下一行：<br />
<em>%users ALL=(root) NOPASSWD: /usr/lib/xfce4/session/xfsm-shutdown-helper</em><br />
# gpasswd -a 你的用户名 users</p>
<p><strong>声音</strong><br />
<strong>安装ALSA</strong></p>
<p>https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture_(简体中文)</p>
<p>要求有本地化的ALSA程序和管理<br />
# pacman -S alsa-lib alsa-utils<br />
# pacman -S alsa-oss<br />
所有ALSA程序都很可能需要依赖alsa-lib。</p>
<p><strong>使用ALSA驱动如何让xfce4-mixer来控制音量</strong><br />
新版的xfce4-mixer使用了gstreamer作为后端，这样就不用直接与驱动交流，更加统一。与驱动打交道的工作交给了gstreamer。因此如果你xfce4-mixer无法正常工作，就需要配置好gstreamer。首先当然你得安装xfce4-mixer。<br />
pacman -S xfce4-mixer gstreamer0.10-base-plugins<br />
你需要至少安装gstreamer0.10-good-plugins,考虑安装gstreamer0.10-bad-plugins<br />
pacman -S gstreamer0.10-good-plugins gstreamer0.10-bad-plugins<br />
然后删除面板上的mixer插件，然后重新添加一次，或者先登出然后再登录一次，对gstreamer做更改后必须这样做才能让操作生效。</p>
<h1>安装SLiM</h1>
<p>https://wiki.archlinux.org/index.php/SLiM_(简体中文)</p>
<p><strong>介绍</strong><br />
SLiM是Simple Login Manager（简单登录管理器）的缩写。SLiM是简单、轻量级和容易配置的，相对较易在低端和高端的系统中使用。对于那些希望寻找一个不依赖于GNOME或者KDE，可以在Xfce、Openbox、Fluxbox等环境下使用的登录管理器的人来说，SLiM也是非常合适的。<br />
<strong>安装</strong><br />
可以在extra软件仓库中找到SLiM：<br />
# pacman -S slim<br />
同时还可以安装主题包：<br />
# pacman -S slim-themes archlinux-themes-slim<br />
<strong>配置</strong><br />
启用SLiM</p>
<p>单用户环境<br />
要将SLiM配置为加载某个特定的环境，只需编辑~/.xinitrc如下：<br />
将[session-command]替换为适当的会话命令。例如：<br />
要启动Xfce:<br />
<em>exec ck-launch-session dbus-launch &#8211;exit-with-session startxfce4</em></p>
<p>打开 /etc/rc.conf。<br />
# vi /etc/rc.conf<br />
添加一个服务slim<br />
<em>DAEMONS=(syslogd klogd !pcmcia network netfs crond slim)</em></p>
<p>修改默认运行等级<br />
1. 切换用户到root.<br />
$ su<br />
2. 编辑/etc/inittab：<br />
# vi /etc/inittab<br />
3. 找到如下这一行：<br />
id:3:initdefault:<br />
4. 为了启动X11需要把&#8217;3&#8242;修改成&#8217;5&#8242;：<br />
id:5:initdefault:<br />
5. 保存此文件并退出编辑器，下次启动时你选择的显示管理器就会运行了。</p>
<p>这样就差不多了，细节上的以后再慢慢琢磨。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83637.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arch Linux安装IBus</title>
		<link>http://www.xefan.com/archives/83634.html</link>
		<comments>http://www.xefan.com/archives/83634.html#comments</comments>
		<pubDate>Sun, 16 Oct 2011 02:19:59 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[Linux栏目]]></category>
		<category><![CDATA[Arch]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.xefan.com/?p=83634</guid>
		<description><![CDATA[安装ibus # pacman -S ibus # pacman -S ibus-qt 安装输入法 ibus-pinyin:拼音输入法 ibus-table:一个框架，五笔信赖于它 # pacman -S ibus-{pinyin,table} # yaourt -S ibus-table-wubi 在~/.bashrc文件中添加如下内容： export GTK_IM_MODULE=ibus export XMODIFIERS=@im=ibus export QT_IM_MODULE=ibus 然后执行命令运行ibus: # ibus-daemon]]></description>
			<content:encoded><![CDATA[<p><strong>安装ibus</strong><br />
# pacman -S ibus<br />
# pacman -S ibus-qt</p>
<p><strong>安装输入法</strong><br />
ibus-pinyin:拼音输入法<br />
ibus-table:一个框架，五笔信赖于它<br />
# pacman -S ibus-{pinyin,table}<br />
# yaourt -S ibus-table-wubi<br />
在~/.bashrc文件中添加如下内容：</p>
<blockquote><p>export GTK_IM_MODULE=ibus<br />
export XMODIFIERS=@im=ibus<br />
export QT_IM_MODULE=ibus</p></blockquote>
<p>然后执行命令运行ibus:<br />
# ibus-daemon</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83634.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arch Linux安装</title>
		<link>http://www.xefan.com/archives/83630.html</link>
		<comments>http://www.xefan.com/archives/83630.html#comments</comments>
		<pubDate>Tue, 11 Oct 2011 15:13:01 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[Linux栏目]]></category>
		<category><![CDATA[Arch]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.xefan.com/?p=83630</guid>
		<description><![CDATA[1、首先用Arch Linux的引导盘引导进入live CD。ISO文件下载地址：http://www.archlinux.org/download/ 2、以root身份执行脚本： # /arch/setup 然后你就会看到 ArchLinux 安装框架的屏幕。 3、根据自己的情况进行选择 注意在第4项进行磁盘分区时要小心选择，否则操作失误会丢失数据。 安装完后重启即可进入Arch Linux https://wiki.archlinux.org/index.php/Beginners&#8217;_Guide_(简体中文)#.E5.AE.89.E8.A3.85.E5.9F.BA.E6.9C.AC.E7.B3.BB.E7.BB.9F &#160;]]></description>
			<content:encoded><![CDATA[<p>1、首先用Arch Linux的引导盘引导进入live CD。ISO文件下载地址：http://www.archlinux.org/download/</p>
<p>2、以root身份执行脚本：<br />
# /arch/setup<br />
然后你就会看到 ArchLinux 安装框架的屏幕。</p>
<p>3、根据自己的情况进行选择<br />
注意在第4项进行磁盘分区时要小心选择，否则操作失误会丢失数据。<br />
<img class="aligncenter" title="Arch安装" src="http://img165.poco.cn/mypoco/myphoto/20111011/22/5545129120111011224500054.jpg" alt="" width="728" height="476" /><br />
<img class="aligncenter" title="Arch安装分区" src="http://img165.poco.cn/mypoco/myphoto/20111011/22/5545129120111011224544011.jpg" alt="" width="728" height="476" /></p>
<p>安装完后重启即可进入Arch Linux</p>
<p>https://wiki.archlinux.org/index.php/Beginners&#8217;_Guide_(简体中文)#.E5.AE.89.E8.A3.85.E5.9F.BA.E6.9C.AC.E7.B3.BB.E7.BB.9F</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83630.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>arm9-2440 linux下烧写</title>
		<link>http://www.xefan.com/archives/83624.html</link>
		<comments>http://www.xefan.com/archives/83624.html#comments</comments>
		<pubDate>Fri, 23 Sep 2011 14:24:54 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[嵌入式栏目]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.xefan.com/?p=83624</guid>
		<description><![CDATA[超级终端：使用minicom加ckermit组合，也可以单独使用Gtkterm来代替SecureCRT。 将Port设为设备名，如ttyUSB0。speed改为115200。如图： ckermit安装好后，进行配置 vi /etc/kermit/kermrc set line /dev/ttyUSB0 set speed 115200 set carrier-watch off set handshake none set flow-control none robust set file type bin set file name lit set rec pack 1000 set send pack 1000 set window 5 &#8230; <a href="http://www.xefan.com/archives/83624.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>超级终端：使用minicom加ckermit组合，也可以单独使用Gtkterm来代替SecureCRT。<br />
将Port设为设备名，如ttyUSB0。speed改为115200。如图：</p>
<p style="text-align: center;"><img class="aligncenter" src="http://img165.poco.cn/mypoco/myphoto/20110923/22/5545129120110923221537067.jpg" alt="" width="890" height="620" /></p>
<p>ckermit安装好后，进行配置<br />
vi /etc/kermit/kermrc<br />
set line /dev/ttyUSB0<br />
set speed 115200<br />
set carrier-watch off<br />
set handshake none<br />
set flow-control none<br />
robust<br />
set file type bin<br />
set file name lit<br />
set rec pack 1000<br />
set send pack 1000<br />
set window 5<br />
USB下载驱动<br />
dnw_for_linux.tar.gz下载地址： http://115.com/file/aqy4rodm<br />
其中secbulk.c是PC端USB驱动。dnw.c是写入工具，这个是经过我修改的，可以将程序下载到指定的地址。<br />
编译并加载secbulk.c内核模块<br />
$cd secbulk<br />
$make -C /lib/modules/`uname -r`/build M=`pwd` modules</p>
<p>编译成功后在当前目录下可以看到secbulk.ko</p>
<p>用insmod命令加载模块，这需要root权限<br />
$sudo insmod ./secbulk.ko</p>
<p>编译dnw写入工具<br />
$cd dnw<br />
$gcc -o dnw dnw.c<br />
编译成功后生成可执行档dnw</p>
<p>使用DNW下载<br />
先使用kermit选择下载模式后再用dnw下载程序。<br />
出现“USB host is connected. Waiting a download.”<br />
Usage: dwn &lt;addr&gt; &lt;filename&gt;<br />
$sudo ./dnw 30000000 led.bin</p>
<p>至此 在linux 下刷机完成<br />
另有usb2ram，使用方法类似。<br />
编译usb2ram需要先安装libusb-dev<br />
Usage: usb2ram addr filename<br />
$sudo usb2ram 30000000 led.bin</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83624.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu 10.10 crosstool ARM交叉编译</title>
		<link>http://www.xefan.com/archives/83613.html</link>
		<comments>http://www.xefan.com/archives/83613.html#comments</comments>
		<pubDate>Sat, 17 Sep 2011 12:00:23 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[嵌入式栏目]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[gcc]]></category>

		<guid isPermaLink="false">http://lcj-project.sourceforge.net/?p=83613</guid>
		<description><![CDATA[弄了两天，经过了N次失败后现在终于编译成功了，赶紧做个笔记。 1、下载crosstool(http://www.kegel.com/crosstool/crosstool-0.43.tar.gz) 2、下载编译过程中需要用到的源代码，虽然crosstool也会自动下载不过速度很慢，建议还是自己先下载好，源代码的版本根据自己的情况选择： binutils-2.15 http://ftp.gnu.org/gnu/binutils/ gcc-3.4.5 http://ftp.gnu.org/gnu/gcc/ glibc-2.3.6 ftp://ftp.gnu.org/gnu/glibc/ glibc-linuxthreads-2.3.6 ftp://ftp.gnu.org/gnu/glibc/ linux-2.6.10 http://ftp.cc.uoc.gr/mirrors/ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.10.tar.gz linux-libc-headers-2.6.12.0 http://ep09.pld-linux.org/~mmazur/linux-libc-headers/linux-libc-headers-2.6.12.0.tar.bz2 将以上七个压缩包放在同一个目录下。 3、编译过程依赖这几个软件，没有的请自行安装。Bison、flex 、build-essential、patch 、libncurses5-de 还有gcc的编译依赖于gmp、mpfr、mpc这几个软件，没有的请先安装。 mpc-0.9.tar.gz http://www.multiprecision.org/mpc/download/mpc-0.9.tar.gz mpfr-3.0.1.tar.bz2 http://www.mpfr.org/mpfr-current/mpfr-3.0.1.tar.bz2 gmp-5.0.2.tar.bz2 ftp://ftp.gmplib.org/pub/gmp-5.0.2/gmp-5.0.2.tar.bz2 这几个软件之间也存在依赖关系，请按顺序依次安装gmp、mpfr、mpc 4、修改配置 1)、ubuntu10.10自己的GCC是4.4版本，使用这个版本的进行编译会出错，建议使用gcc-4.1。 sudo apt-get install gcc-4.1 sudo rm /usr/bin/gcc sudo ln -s /usr/bin/gcc-4.1 &#8230; <a href="http://www.xefan.com/archives/83613.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>弄了两天，经过了N次失败后现在终于编译成功了，赶紧做个笔记。</p>
<p>1、下载crosstool(http://www.kegel.com/crosstool/crosstool-0.43.tar.gz)</p>
<p>2、下载编译过程中需要用到的源代码，虽然crosstool也会自动下载不过速度很慢，建议还是自己先下载好，源代码的版本根据自己的情况选择：<br />
binutils-2.15 http://ftp.gnu.org/gnu/binutils/<br />
gcc-3.4.5 http://ftp.gnu.org/gnu/gcc/<br />
glibc-2.3.6 ftp://ftp.gnu.org/gnu/glibc/<br />
glibc-linuxthreads-2.3.6 ftp://ftp.gnu.org/gnu/glibc/</p>
<p>linux-2.6.10 http://ftp.cc.uoc.gr/mirrors/ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.10.tar.gz<br />
linux-libc-headers-2.6.12.0 http://ep09.pld-linux.org/~mmazur/linux-libc-headers/linux-libc-headers-2.6.12.0.tar.bz2</p>
<p>将以上七个压缩包放在同一个目录下。</p>
<p>3、编译过程依赖这几个软件，没有的请自行安装。Bison、flex 、build-essential、patch 、libncurses5-de<br />
还有gcc的编译依赖于gmp、mpfr、mpc这几个软件，没有的请先安装。<br />
mpc-0.9.tar.gz http://www.multiprecision.org/mpc/download/mpc-0.9.tar.gz<br />
mpfr-3.0.1.tar.bz2 http://www.mpfr.org/mpfr-current/mpfr-3.0.1.tar.bz2<br />
gmp-5.0.2.tar.bz2 ftp://ftp.gmplib.org/pub/gmp-5.0.2/gmp-5.0.2.tar.bz2<br />
这几个软件之间也存在依赖关系，请按顺序依次安装gmp、mpfr、mpc</p>
<p>4、修改配置<br />
1)、ubuntu10.10自己的GCC是4.4版本，使用这个版本的进行编译会出错，建议使用gcc-4.1。<br />
sudo apt-get install gcc-4.1<br />
sudo rm /usr/bin/gcc<br />
sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc</p>
<p>2)、修改sh，ubuntu10.10默认的sh是用的dash<br />
如果运行 ls -la /bin/sh 看到链接是dash，则需要修改一下。不改的话编译会出错。<br />
我是直接运行命令 sudo ln -sf /bin/bash /bin/sh 修改。改完后重启下，或者切换工作台以使其生效。</p>
<p>3)、修改编译脚本<br />
解压crosstool然后进入解压目录，这里我选择demo-arm.sh这个脚本。<br />
cp demo-arm.sh arm.sh</p>
<p>修改arm.sh<br />
vi arm.sh</p>
<p>TARBALLS_DIR=(刚刚下载的源码存放目录)<br />
RESULT_TOP=(生成工具链要安装到的目录)<br />
eval `cat arm.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh –notest #这个根据自己的情况选择</p>
<p>然后修改gcc-3.4.5-glibc-2.3.6.dat这个文件<br />
BINUTILS_DIR=binutils-2.15<br />
GCC_DIR=gcc-3.4.5<br />
GLIBC_DIR=glibc-2.3.6<br />
LINUX_DIR=linux-2.6.10<br />
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0<br />
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.6</p>
<p>再修改arm.dat这个文件<br />
KERNELCONFIG=`pwd`/arm.config<br />
TARGET=arm-linux #生成的工具链名称<br />
TARGET_CFLAGS=”-O”</p>
<p>还有ubuntu10.10自带的ar、ld是2.20版本的，而这个编译时需要的是2.13~2.19版本的，所以会出错。<br />
解决方法：<br />
(1)、像上面的gcc一样，再安装个低版本的ls、ar。<br />
(2)、如果不想再另外安装就可以用这个方法。修改glibc-2.3.6.tar.bz2这个压缩包内的configure文件。将3920行和3981行处的”2.1[3-9])*”改为”2.[1-2][0-9]*)”。</p>
<p>5、开始编译<br />
都配置好了之后就可以开始了<br />
./arm.sh<br />
漫长的等待开始了……，我的是奔腾双核处理器，整个过程花了半个多小时</p>
<p>6、测试<br />
现在用刚刚编译安装好的arm-linux-gcc来编译一个C程序试试。<br />
先将arm-linux-gcc的安装目录添加到环境变量中。</p>
<pre class="brush: cpp; title: ; notranslate">
//文件名:hello.c
 int main()
 {
 printf(&quot;www.xefam.com&quot;);
 }
</pre>
<p>$ arm-linux-gcc -o hello hello.c<br />
$ file hello<br />
hello: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), for GNU/Linux 2.4.3, not stripped<br />
这就说明这个已经成功了！</p>
<p>7、现在可以恢复之前的系统配置了<br />
将gcc修为gcc-4.4<br />
将sh修改dash</p>
<p>如果嫌麻烦不想自己编译的可以直接下载已经编译好的来用，下面这个就是我编译好：<br />
gcc-3.4.5-glibc-2.3.6.tar.gz http://115.com/file/e65akpi1</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83613.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I2C串口总线驱动程序(汇编语言)</title>
		<link>http://www.xefan.com/archives/83610.html</link>
		<comments>http://www.xefan.com/archives/83610.html#comments</comments>
		<pubDate>Sat, 17 Sep 2011 11:57:19 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[嵌入式栏目]]></category>
		<category><![CDATA[单片机]]></category>

		<guid isPermaLink="false">http://lcj-project.sourceforge.net/?p=83610</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<pre class="brush: plain; title: ; notranslate">
;I2C串口总线驱动程序
;作者：龙昌
;博客：http://www.xefan.com
;请根据自己的实际情况定义SCL和SDA

;延时4.7us以上，我的是12MHz的晶振，请根据自己的晶振频率相应增删NOP条数
_NOP:   NOP
        NOP
        NOP
        NOP
        NOP
        RET

;发送开始信号
I2CB:   SETB SDA
        NOP
        SETB SCL
        ACALL _NOP
        CLR SDA
        ACALL _NOP
        CLR SCL
        RET

;发送结束信号
I2CE:   CLR SDA
        NOP
        SETB SCL
        ACALL _NOP
        SETB SDA
        ACALL _NOP
        CLR SCL
        RET

;发送应答(ACK)
MACK:   CLR SDA
        NOP
        SETB SCL
        ACALL _NOP
        CLR SCL
        RET

;发送非应答(/ACK)
MNACK:  SETB SDA
        NOP
        SETB SCL
        ACALL _NOP
        CLR SCL
        RET

;发送一个字节数据，要发送的数据存放在A寄存器中
SendB:  MOV R5,#8
SendB1: RLC A
        MOV SDA,C
        NOP
        SETB SCL
        ACALL _NOP
        CLR SCL
        DJNZ R5,SendB1
        ;接收ACK
        SETB SDA
        NOP
        SETB SCL
        NOP
        NOP
        MOV C,SDA
        MOV ACK,C
        CLR SCL
        RET

;接收一个字节的数据，接收完后存放在A寄存器中
RecvB:  MOV R5,#8
RecvB1: SETB SDA
        NOP
        SETB SCL
        NOP
        NOP
        MOV C,SDA
        RLC A
        CLR SCL
        DJNZ R5,RecvB1
        RET
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83610.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I2C协议说明</title>
		<link>http://www.xefan.com/archives/83607.html</link>
		<comments>http://www.xefan.com/archives/83607.html#comments</comments>
		<pubDate>Sat, 17 Sep 2011 11:54:01 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[嵌入式栏目]]></category>
		<category><![CDATA[嵌入式]]></category>

		<guid isPermaLink="false">http://lcj-project.sourceforge.net/?p=83607</guid>
		<description><![CDATA[IIC（Inter &#8211; Integrated Circuit）总线是菲利浦公司推出的芯片间串行传输总线。它用两根线实现了完善的全双工同步数据传送。 I2C串行总线一般有两根信号线，一根是双向的数据线SDA，另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上，各设备的时钟线SCL接到总线的SCL上。 I2C总线在传送数据过程中共有三种类型信号，它们分别是： 开始信号、结束信号和应答信号。 开始信号：SCL为高电平时，SDA由高电平向低电平跳变，开始传送数据。 结束信号：SCL为高电平时，SDA由低电平向高电平跳变，结束传送数据。 应答信号：数据接收完后，受控单元向主控单元发送一个应答信号。 开始信号是必需的，结束信号和应答信号可以不要。 数据传输格式如下： 主控写： 开始&#124; 寻址字节（写）&#124; 应答&#124; 数据&#124; 应答&#124; …&#124; 数据&#124; 应答&#124; 结束 主控读： 开始&#124; 寻址字节（读）&#124; 应答&#124; 数据&#124; 应答&#124; …&#124; 数据&#124; 非应答&#124; 结束 下划线部分表示主控发送，被控接收；其余为主控接收，被控发送。 时钟脉冲如图所示：]]></description>
			<content:encoded><![CDATA[<p>IIC（Inter &#8211; Integrated Circuit）总线是菲利浦公司推出的芯片间串行传输总线。它用两根线实现了完善的全双工同步数据传送。</p>
<p>I2C串行总线一般有两根信号线，一根是双向的数据线SDA，另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上，各设备的时钟线SCL接到总线的SCL上。</p>
<p>I2C总线在传送数据过程中共有三种类型信号，它们分别是：</p>
<p>开始信号、结束信号和应答信号。</p>
<p><strong>开始信号</strong>：SCL为高电平时，SDA由高电平向低电平跳变，开始传送数据。</p>
<p><strong>结束信号</strong>：SCL为高电平时，SDA由低电平向高电平跳变，结束传送数据。</p>
<p><strong>应答信号</strong>：数据接收完后，受控单元向主控单元发送一个应答信号。</p>
<p>开始信号是必需的，结束信号和应答信号可以不要。</p>
<p>数据传输格式如下：</p>
<p>主控写： <span style="text-decoration: underline;">开始</span>| <span style="text-decoration: underline;">寻址字节（写）</span>| 应答| <span style="text-decoration: underline;">数据</span>| 应答| …| <span style="text-decoration: underline;">数据</span>| 应答| <span style="text-decoration: underline;">结束</span></p>
<p>主控读： <span style="text-decoration: underline;">开始</span>| <span style="text-decoration: underline;">寻址字节（读）</span>| 应答| 数据| <span style="text-decoration: underline;">应答</span>| …| 数据| <span style="text-decoration: underline;">非应答</span>| <span style="text-decoration: underline;">结束</span></p>
<p>下划线部分表示主控发送，被控接收；其余为主控接收，被控发送。</p>
<p>时钟脉冲如图所示：</p>
<p><img class="aligncenter" title="I2C" src="http://img2081.poco.cn/mypoco/myphoto/20110829/17/5545129120110829172858024.jpg" alt="" width="700" height="360" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83607.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pygame学习笔记11：手柄</title>
		<link>http://www.xefan.com/archives/83605.html</link>
		<comments>http://www.xefan.com/archives/83605.html#comments</comments>
		<pubDate>Sat, 17 Sep 2011 11:49:56 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[Python栏目]]></category>
		<category><![CDATA[pygame]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://lcj-project.sourceforge.net/?p=83605</guid>
		<description><![CDATA[手柄 joystick模块管理计算机上的手柄设备（可能多于一个）。手柄设备包括轨迹球、类似电视游戏机的游戏手柄，允许使用多个按钮和’hats’。 pygame.joystick.get_count函数可以获得系统中手柄的个数。比如： count = pygame.joystick.get_count() 如果系统没有手柄，数量是0。 如果系统有手柄，可以通过pygame.joystick.Joystick来创建手柄对象： j = pygame.joystick.Joystick(0) 其中的整数是手柄的id，取值范围从0到count-1。 创建对象后，需要先初始化 j.init() 初始化后，事件队列中就可以收到来自手柄的事件了。事件类型分为： JOYAXISMOTION joy, axis, value JOYBALLMOTION joy, ball, rel JOYHATMOTION joy, hat, value JOYBUTTONUP joy, button JOYBUTTONDOWN joy, button 要注意pygame.JOYAXISMOTION事件的value值在-1.0和1.0之间。值0.0表示轴在正中间。游戏手柄设备一般只有-1、0、1三个值，而没有中间的值。而老的模拟手柄并不一定能完全达到-1到1的区间，中间的值也可能是0附近的一个值。模拟手柄通常会有一点噪声，从而会产生很多很小很快的运动事件。当轨迹球滚动时，pygame.JOYBALLMOTION事件会发生。它会报告轨迹球总共滚动了多少距离。当按钮被按下和释放时，会产生pygame.JOYBUTTONDOWN和pygame.JOYBUTTONUP事件。当hat的位置改变时，pygame.JOYHATMOTION事件会产生。事件的位置属性包括一对值，它们是-1或者0或者1。位置(0,0)表示hat在正中间。 要获得手柄的轴数可以使用 j.get_numaxes() 要获得手柄上轨迹球的个数，可以使用 j.get_numballs() 要获得手柄上的按键数，可以使用 j.get_numbuttons() &#8230; <a href="http://www.xefan.com/archives/83605.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>手柄</strong></p>
<p>joystick模块管理计算机上的手柄设备（可能多于一个）。手柄设备包括轨迹球、类似电视游戏机的游戏手柄，允许使用多个按钮和’hats’。</p>
<p>pygame.joystick.get_count函数可以获得系统中手柄的个数。比如：</p>
<p><em>count = pygame.joystick.get_count()</em></p>
<p>如果系统没有手柄，数量是0。</p>
<p>如果系统有手柄，可以通过pygame.joystick.Joystick来创建手柄对象：</p>
<p><em>j = pygame.joystick.Joystick(0)</em></p>
<p>其中的整数是手柄的id，取值范围从0到count-1。</p>
<p>创建对象后，需要先初始化</p>
<p><em>j.init()</em></p>
<p>初始化后，事件队列中就可以收到来自手柄的事件了。事件类型分为：</p>
<p>JOYAXISMOTION joy, axis, value<br />
JOYBALLMOTION joy, ball, rel<br />
JOYHATMOTION joy, hat, value<br />
JOYBUTTONUP joy, button<br />
JOYBUTTONDOWN joy, button</p>
<p>要注意pygame.JOYAXISMOTION事件的value值在-1.0和1.0之间。值0.0表示轴在正中间。游戏手柄设备一般只有-1、0、1三个值，而没有中间的值。而老的模拟手柄并不一定能完全达到-1到1的区间，中间的值也可能是0附近的一个值。模拟手柄通常会有一点噪声，从而会产生很多很小很快的运动事件。当轨迹球滚动时，pygame.JOYBALLMOTION事件会发生。它会报告轨迹球总共滚动了多少距离。当按钮被按下和释放时，会产生pygame.JOYBUTTONDOWN和pygame.JOYBUTTONUP事件。当hat的位置改变时，pygame.JOYHATMOTION事件会产生。事件的位置属性包括一对值，它们是-1或者0或者1。位置(0,0)表示hat在正中间。</p>
<p>要获得手柄的轴数可以使用</p>
<p><em>j.get_numaxes()</em></p>
<p>要获得手柄上轨迹球的个数，可以使用</p>
<p><em>j.get_numballs()</em></p>
<p>要获得手柄上的按键数，可以使用</p>
<p><em>j.get_numbuttons()</em></p>
<p>要获得手柄上hat控制器的个数，可以使用</p>
<p><em>j.get_numhats()</em></p>
<p>除了通过事件获得手柄的输入外，也可以直接查询手柄的状态。通过</p>
<p><em>j.get_axis(axis_number)</em></p>
<p>可以获得某个轴的位置。通过</p>
<p><em>j.get_ball(ball_number)</em></p>
<p>可以获得某个轨迹球的相对位置。通过</p>
<p><em>j.get_button(button)</em></p>
<p>可以获得某个按键的状态。通过</p>
<p><em>j.get_hat(hat_number)</em></p>
<p>可以获得hat控制器的当前位置。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83605.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pygame学习笔记10：鼠标</title>
		<link>http://www.xefan.com/archives/83603.html</link>
		<comments>http://www.xefan.com/archives/83603.html#comments</comments>
		<pubDate>Sat, 17 Sep 2011 11:46:05 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[Python栏目]]></category>
		<category><![CDATA[pygame]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://lcj-project.sourceforge.net/?p=83603</guid>
		<description><![CDATA[鼠标 当显示模式设置后，事件队列就会开始收到鼠标事件。当按下和释放鼠标的按键时，会产生 pygame.MOUSEBUTTONDOWN和pygame.MOUSEBUTTONUP事件。这些事件包含一个button属性表示哪些键被按下。滚动鼠标滚轮会产生pygame.MOUSEBUTTONDOWN事件。当向上滚动滚轮时button的值是4，向下滚动时button的值是5。除此外还有一个pos属性，表示按键按下或释放时鼠标指针的位置。当移动鼠标时，会产生pygame.MOUSEMOTION事件。鼠标移动事件会被分解成一组较小的精确的移动事件。当鼠标移动时，会有很多事件被放在队列中。鼠标移动事件没有被正确的清除，常常是事件队列被填满的主要原因。鼠标移动事件包括一个buttons属性，表示鼠标移动时，鼠标键的状态。还有一个pos属性，表示鼠标指针的位置。还有一个rel属性表示当前位置相对于上一次事件发生时指针位置的偏移量。 除了可以通过事件来接受鼠标输入外，还可以直接调用函数检查鼠标的状态。pygame.mouse.get_pressed可以获得当前所有鼠标按键的状态。pygame.mouse.get_pos获得当前鼠标的位置。pygame.mouse.get_rel获得当前鼠标位置相对于前一个位置的位移。 用pygame.mouse.set_visible可以隐藏鼠标的指针。如果鼠标指针被隐藏，输入被当前的display捕获，鼠标会进入虚拟输入模式，这种模式下鼠标的相对位移不会收到屏幕边界的影响。 通过pygame.mouse.set_cursor可以设置鼠标指针的形状。 pygame.mouse.set_cursor(size, hotspot, xormasks, andmasks): return None 当鼠标指针可见时，它会显示为给定的位域数组指定的黑白色的位图。size是包含指针高度和宽度的列表。hotspot是表示指针的热点位置的列表。xormasks是序列包含指针异或数据位域的序列，andmask是一组包含指针位域数据的序列。宽度必须是8的倍数，位域数组必须是size给定的正确的大小。 pygame.cursors模块包括了几个内置的指针形状。可以这样使用 pygame.mouse.set_cursor(*pygame.cursors.arrow) 可以使用的指针形状有： pygame.cursors.arrow pygame.cursors.diamond pygame.cursors.broken_x pygame.cursors.tri_left pygame.cursors.tri_right 偶自己写的一个扫雷小游戏，全鼠标操作的。下载地址：http://app.xefan.com/小游戏/扫雷/]]></description>
			<content:encoded><![CDATA[<p><strong>鼠标</strong></p>
<p>当显示模式设置后，事件队列就会开始收到鼠标事件。当按下和释放鼠标的按键时，会产生 pygame.MOUSEBUTTONDOWN和pygame.MOUSEBUTTONUP事件。这些事件包含一个button属性表示哪些键被按下。滚动鼠标滚轮会产生pygame.MOUSEBUTTONDOWN事件。当向上滚动滚轮时button的值是4，向下滚动时button的值是5。除此外还有一个pos属性，表示按键按下或释放时鼠标指针的位置。当移动鼠标时，会产生pygame.MOUSEMOTION事件。鼠标移动事件会被分解成一组较小的精确的移动事件。当鼠标移动时，会有很多事件被放在队列中。鼠标移动事件没有被正确的清除，常常是事件队列被填满的主要原因。鼠标移动事件包括一个buttons属性，表示鼠标移动时，鼠标键的状态。还有一个pos属性，表示鼠标指针的位置。还有一个rel属性表示当前位置相对于上一次事件发生时指针位置的偏移量。</p>
<p>除了可以通过事件来接受鼠标输入外，还可以直接调用函数检查鼠标的状态。pygame.mouse.get_pressed可以获得当前所有鼠标按键的状态。pygame.mouse.get_pos获得当前鼠标的位置。pygame.mouse.get_rel获得当前鼠标位置相对于前一个位置的位移。</p>
<p>用pygame.mouse.set_visible可以隐藏鼠标的指针。如果鼠标指针被隐藏，输入被当前的display捕获，鼠标会进入虚拟输入模式，这种模式下鼠标的相对位移不会收到屏幕边界的影响。</p>
<p>通过pygame.mouse.set_cursor可以设置鼠标指针的形状。</p>
<p><em>pygame.mouse.set_cursor(size, hotspot, xormasks, andmasks): return None</em></p>
<p>当鼠标指针可见时，它会显示为给定的位域数组指定的黑白色的位图。size是包含指针高度和宽度的列表。hotspot是表示指针的热点位置的列表。xormasks是序列包含指针异或数据位域的序列，andmask是一组包含指针位域数据的序列。宽度必须是8的倍数，位域数组必须是size给定的正确的大小。</p>
<p>pygame.cursors模块包括了几个内置的指针形状。可以这样使用</p>
<p><em>pygame.mouse.set_cursor(*pygame.cursors.arrow)</em></p>
<p>可以使用的指针形状有：</p>
<p>pygame.cursors.arrow<br />
pygame.cursors.diamond<br />
pygame.cursors.broken_x<br />
pygame.cursors.tri_left<br />
pygame.cursors.tri_right</p>
<p>偶自己写的一个扫雷小游戏，全鼠标操作的。下载地址：<a href="http://app.xefan.com/小游戏/扫雷/" target="_blank">http://app.xefan.com/小游戏/扫雷/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83603.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pygame学习笔记9：键盘</title>
		<link>http://www.xefan.com/archives/83601.html</link>
		<comments>http://www.xefan.com/archives/83601.html#comments</comments>
		<pubDate>Sat, 17 Sep 2011 11:42:32 +0000</pubDate>
		<dc:creator>龍昌</dc:creator>
				<category><![CDATA[Python栏目]]></category>
		<category><![CDATA[pygame]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://lcj-project.sourceforge.net/?p=83601</guid>
		<description><![CDATA[键盘 当键盘的按键被按下时，事件队列会得到pygame.KEYDOWN和pygame.KEYUP事件。这两个事件都有一个叫做key的整型属性表示键盘上的键。pygame.KEYDOWN事件还有一个额外的属性unicode，表示键盘输入的转后对应的字符。这个字符会考虑shift键和其它组合键的状态。 有很多键盘相关的常量，他们表示键盘上的键。下面是所有键盘常量的列表： KeyASCII      ASCII   Common Name K_BACKSPACE   \b      backspace K_TAB         \t      tab K_CLEAR               clear K_RETURN      \r     &#8230; <a href="http://www.xefan.com/archives/83601.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>键盘</strong></p>
<p>当键盘的按键被按下时，事件队列会得到pygame.KEYDOWN和pygame.KEYUP事件。这两个事件都有一个叫做key的整型属性表示键盘上的键。pygame.KEYDOWN事件还有一个额外的属性unicode，表示键盘输入的转后对应的字符。这个字符会考虑shift键和其它组合键的状态。</p>
<p>有很多键盘相关的常量，他们表示键盘上的键。下面是所有键盘常量的列表：</p>
<p>KeyASCII      ASCII   Common Name<br />
K_BACKSPACE   \b      backspace<br />
K_TAB         \t      tab<br />
K_CLEAR               clear<br />
K_RETURN      \r      return<br />
K_PAUSE               pause<br />
K_ESCAPE      ^[      escape<br />
K_SPACE               space<br />
K_EXCLAIM     !       exclaim<br />
K_QUOTEDBL    "       quotedbl<br />
K_HASH        #       hash<br />
K_DOLLAR      $       dollar<br />
K_AMPERSAND   &amp;       ampersand<br />
K_QUOTE               quote<br />
K_LEFTPAREN   (       left parenthesis<br />
K_RIGHTPAREN  )       right parenthesis<br />
K_ASTERISK    *       asterisk<br />
K_PLUS        +       plus sign<br />
K_COMMA       ,       comma<br />
K_MINUS       -       minus sign<br />
K_PERIOD      .       period<br />
K_SLASH       /       forward slash<br />
K_0           0       0<br />
K_1           1       1<br />
K_2           2       2<br />
K_3           3       3<br />
K_4           4       4<br />
K_5           5       5<br />
K_6           6       6<br />
K_7           7       7<br />
K_8           8       8<br />
K_9           9       9<br />
K_COLON       :       colon<br />
K_SEMICOLON   ;       semicolon<br />
K_LESS        &lt;       less-than sign<br />
K_EQUALS      =       equals sign<br />
K_GREATER     &gt;       greater-than sign<br />
K_QUESTION    ?       question mark<br />
K_AT          @       at<br />
K_LEFTBRACKET [       left bracket<br />
K_BACKSLASH   \       backslash<br />
K_RIGHTBRACKET ]      right bracket<br />
K_CARET       ^       caret<br />
K_UNDERSCORE  _       underscore<br />
K_BACKQUOTE   `       grave<br />
K_a           a       a<br />
K_b           b       b<br />
K_c           c       c<br />
K_d           d       d<br />
K_e           e       e<br />
K_f           f       f<br />
K_g           g       g<br />
K_h           h       h<br />
K_i           i       i<br />
K_j           j       j<br />
K_k           k       k<br />
K_l           l       l<br />
K_m           m       m<br />
K_n           n       n<br />
K_o           o       o<br />
K_p           p       p<br />
K_q           q       q<br />
K_r           r       r<br />
K_s           s       s<br />
K_t           t       t<br />
K_u           u       u<br />
K_v           v       v<br />
K_w           w       w<br />
K_x           x       x<br />
K_y           y       y<br />
K_z           z       z<br />
K_DELETE              delete<br />
K_KP0                 keypad 0<br />
K_KP1                 keypad 1<br />
K_KP2                 keypad 2<br />
K_KP3                 keypad 3<br />
K_KP4                 keypad 4<br />
K_KP5                 keypad 5<br />
K_KP6                 keypad 6<br />
K_KP7                 keypad 7<br />
K_KP8                 keypad 8<br />
K_KP9                 keypad 9<br />
K_KP_PERIOD   .       keypad period<br />
K_KP_DIVIDE   /       keypad divide<br />
K_KP_MULTIPLY *       keypad multiply<br />
K_KP_MINUS    -       keypad minus<br />
K_KP_PLUS     +       keypad plus<br />
K_KP_ENTER    \r      keypad enter<br />
K_KP_EQUALS   =       keypad equals<br />
K_UP                  up arrow<br />
K_DOWN                down arrow<br />
K_RIGHT               right arrow<br />
K_LEFT                left arrow<br />
K_INSERT              insert<br />
K_HOME                home<br />
K_END                 end<br />
K_PAGEUP              page up<br />
K_PAGEDOWN            page down<br />
K_F1                  F1<br />
K_F2                  F2<br />
K_F3                  F3<br />
K_F4                  F4<br />
K_F5                  F5<br />
K_F6                  F6<br />
K_F7                  F7<br />
K_F8                  F8<br />
K_F9                  F9<br />
K_F10                 F10<br />
K_F11                 F11<br />
K_F12                 F12<br />
K_F13                 F13<br />
K_F14                 F14<br />
K_F15                 F15<br />
K_NUMLOCK             numlock<br />
K_CAPSLOCK            capslock<br />
K_SCROLLOCK           scrollock<br />
K_RSHIFT              right shift<br />
K_LSHIFT              left shift<br />
K_RCTRL               right ctrl<br />
K_LCTRL               left ctrl<br />
K_RALT                right alt<br />
K_LALT                left alt<br />
K_RMETA               right meta<br />
K_LMETA               left meta<br />
K_LSUPER              left windows key<br />
K_RSUPER              right windows key<br />
K_MODE                mode shift<br />
K_HELP                help<br />
K_PRINT               print screen<br />
K_SYSREQ              sysrq<br />
K_BREAK               break<br />
K_MENU                menu<br />
K_POWER               power<br />
K_EURO                euro</p>
<p>还有一个mod属性表示一组修饰键的状态，可以通过位或把它们组合起来：</p>
<p>KMOD_NONE, KMOD_LSHIFT, KMOD_RSHIFT, KMOD_SHIFT, KMOD_CAPS,<br />
KMOD_LCTRL, KMOD_RCTRL, KMOD_CTRL, KMOD_LALT, KMOD_RALT,<br />
KMOD_ALT, KMOD_LMETA, KMOD_RMETA, KMOD_META, KMOD_NUM, KMOD_MODE</p>
<p>除了通过事件得到键盘输入以外，也可以直接访问键盘。通过pygame.key.get_pressed可以获得当前所有键的状态，pygame.key.get_mods可以获得所有修饰键的状态，比如：</p>
<p><em>keys = pygame.key.get_pressed()</em><br />
<em>mods = pygame.key.get_mods()</em><br />
<em>if keys[K_F8] and mods[KMOD_ALT]: #if Alt-F8 is pressed</em><br />
<em>    pass</em></p>
<p>key模块下还有很多函数：</p>
<p>key.get_focused —— 当前激活的pygame窗口<br />
key.get_pressed —— 获得当前所有键的状态<br />
key.get_mods —— 按下的组合键（Alt, Ctrl, Shift）<br />
key.set_mods —— 你也可以模拟按下组合键的效果（KMOD_ALT, KMOD_CTRL, KMOD_SHIFT）<br />
key.set_repeat —— 设定允许pygame接受重复按键<br />
key.name —— 接受键值返回键名</p>
<p>学完键盘模块后偶自己写了一个贪吃蛇的小游戏，下载地址：<a href="http://app.xefan.com/小游戏/贪吃蛇/" target="_blank">http://app.xefan.com/小游戏/贪吃蛇/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xefan.com/archives/83601.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

