<?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>笔记本 &#187; Ubuntu</title>
	<atom:link href="http://mengzhuo.org/blog/tag/ubuntu/feed" rel="self" type="application/rss+xml" />
	<link>http://mengzhuo.org/blog</link>
	<description>Just The Way It Was</description>
	<lastBuildDate>Sun, 29 Apr 2012 13:35:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Ibus-GJS主题制作</title>
		<link>http://mengzhuo.org/blog/ibus-gjs%e4%b8%bb%e9%a2%98%e5%88%b6%e4%bd%9c.html</link>
		<comments>http://mengzhuo.org/blog/ibus-gjs%e4%b8%bb%e9%a2%98%e5%88%b6%e4%bd%9c.html#comments</comments>
		<pubDate>Sun, 29 Apr 2012 13:31:12 +0000</pubDate>
		<dc:creator>mz</dc:creator>
				<category><![CDATA[晴]]></category>
		<category><![CDATA[Linux软件]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[折腾]]></category>

		<guid isPermaLink="false">http://mengzhuo.org/blog/?p=1631</guid>
		<description><![CDATA[因为我的个人的电脑是12&#8242;小屏又高分辨率（1280&#215;800），所以不改就看起来字就很小。而Ibus-GJS(Gnome JavaScript)版本用的前端是JS+CSS，这就给Ibus输入法主题定制提供了可能性（以前是代码里面写死的样式） 修改前 可以明显看出，连火狐的字体都比输入法的待选词框里的要大。不进行修改的话，打起字来很难受…… 待修改文件 只有两个，ibus-gjs的版本是3 /usr/share/gnome-shell/extensions/ibus-indicator@example.com/stylesheet.css /usr/share/gnome-shell/js/ui/status/ibus/candidatePanel.js 分析代码 不喜欢看的同学可以直接跳到：修改主题 文件1里面的内容是标准的CSS框架，文件2里面的是JS代码，写过网页前端的同学一定不会陌生这两个东西。 从文件2源代码看，选词框的结构是 candidate-panel > candidate-area > candidate-vertical > candidate-vcontent > *candidateTextStyle 当然，水平的选词框就把vertical换成horizontal就可以了。而candidateTextStyle之所以打星号，是因为在Ibus的源代码里并没有给这个应该有的属性添加上类别……因为标签本身就属于popup-menu，本身这样的标签是不必要的，但作者认为这样是很有效的，没办法，我们只能自己来改了。 style_class: 'popup-menu-item', style: candidateTextStyle, 了解以后我们就可以通过修改CSS来更改Ibus的主题样式了。 修改主题 理论上应该用stylesheet.css来控制这些参数的，但就像我之前说的，作者觉得这样更方便……我会尽力做出更好的patch，让作者改变心意。 const里的candidateTextStyle值 添加 font-size:11pt;text-shadow:0 0 5px #69d6ff; 就可以改变候选词的样式成酷酷的发蓝光的样子，而且变大了~ 同理，如果想改变候选编号的话就要改变candidateLabelStyle就可以了。 在stylesheet.css里面的参数基本是控制了整个候选区域的边框等，当然要是你有CSS经验，还可以加上背景图什么的都可以，这样一来相当于皮肤的功能就实现了 Ibus-GJS主题制作 &#124; 订阅博客署名-非商业性使用-相同方式共享]]></description>
			<content:encoded><![CDATA[<p>因为我的个人的电脑是12&#8242;小屏又高分辨率（1280&#215;800），所以不改就看起来字就很小。而Ibus-GJS(Gnome JavaScript)版本用的前端是JS+CSS，这就给Ibus输入法主题定制提供了可能性（以前是代码里面写死的样式）</p>
<h4>修改前</h4>
<p><a href="http://mengzhuo.org/blog/wp-content/uploads/2012/04/2012-04-09-223738_1280x800_scrot.png"><img class="alignnone  wp-image-1632" title="2012-04-09-223738_1280x800_scrot" src="http://mengzhuo.org/blog/wp-content/uploads/2012/04/2012-04-09-223738_1280x800_scrot.png" alt="" width="327" height="233" /></a><br />
可以明显看出，连火狐的字体都比输入法的待选词框里的要大。不进行修改的话，打起字来很难受……</p>
<h4>待修改文件</h4>
<p>只有两个，ibus-gjs的版本是3</p>
<ol>
<li><code>/usr/share/gnome-shell/extensions/ibus-indicator@example.com/stylesheet.css</code></li>
<li><code>/usr/share/gnome-shell/js/ui/status/ibus/candidatePanel.js</code></li>
</ol>
<h4>分析代码</h4>
<p>不喜欢看的同学可以直接跳到：<a href="#theme">修改主题</a><br />
文件1里面的内容是标准的CSS框架，文件2里面的是JS代码，写过网页前端的同学一定不会陌生这两个东西。<br />
从文件2源代码看，选词框的结构是</p>
<blockquote><p>candidate-panel > candidate-area > candidate-vertical > candidate-vcontent > *candidateTextStyle </p></blockquote>
<p>当然，水平的选词框就把vertical换成horizontal就可以了。而candidateTextStyle之所以打星号，是因为在Ibus的源代码里并没有给这个应该有的属性添加上类别……因为标签本身就属于popup-menu，本身这样的标签是不必要的，但作者认为这样是<a href="https://github.com/fujiwarat/ibus-gjs/pull/10#issuecomment-5110947">很有效的</a>，没办法，我们只能自己来改了。</p>
<blockquote><p><code>                                        style_class: 'popup-menu-item',<br />
                                        style: candidateTextStyle,</code></p></blockquote>
<p>了解以后我们就可以通过修改CSS来更改Ibus的主题样式了。</p>
<h4 id='theme'>修改主题</h4>
<p>理论上应该用stylesheet.css来控制这些参数的，但就像我之前说的，作者觉得这样更方便……我会尽力做出更好的patch，让作者改变心意。<br />
const里的candidateTextStyle值<br />
添加<br />
<blockquote><code>font-size:11pt;text-shadow:0 0 5px #69d6ff;</code></p></blockquote>
<p>就可以改变候选词的样式成酷酷的发蓝光的样子，而且变大了~<br />
<a href="http://mengzhuo.org/blog/wp-content/uploads/2012/04/2012-04-25-121028_1280x800_scrot.png"><img src="http://mengzhuo.org/blog/wp-content/uploads/2012/04/2012-04-25-121028_1280x800_scrot.png" alt="" title="2012-04-25-121028_1280x800_scrot" width="220" height="158" class="alignnone size-full wp-image-1646" /></a><br />
同理，如果想改变候选编号的话就要改变candidateLabelStyle就可以了。<br />
在stylesheet.css里面的参数基本是控制了整个候选区域的边框等，当然要是你有CSS经验，还可以加上背景图什么的都可以，这样一来相当于皮肤的功能就实现了</p>
<blockquote><a title="Ibus-GJS主题制作" href="http://mengzhuo.org/blog/ibus-gjs%e4%b8%bb%e9%a2%98%e5%88%b6%e4%bd%9c.html">Ibus-GJS主题制作</a> | <a title="蒙卓的博客，东西很杂" href="http://mengzhuo.org/blog/feed">订阅博客</a></blockquote><blockquote><small><a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" title="保留权利声明">署名-非商业性使用-相同方式共享</a></small><blockquote>]]></content:encoded>
			<wfw:commentRss>http://mengzhuo.org/blog/ibus-gjs%e4%b8%bb%e9%a2%98%e5%88%b6%e4%bd%9c.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>如何从源代码自动制作Deb规则&amp;推送至Launchpad</title>
		<link>http://mengzhuo.org/blog/%e5%a6%82%e4%bd%95%e4%bb%8e%e6%ba%90%e4%bb%a3%e7%a0%81%e8%87%aa%e5%8a%a8%e5%8c%96%e6%89%93deb%e5%8c%85%e6%8e%a8%e9%80%81%e8%87%b3launchpad.html</link>
		<comments>http://mengzhuo.org/blog/%e5%a6%82%e4%bd%95%e4%bb%8e%e6%ba%90%e4%bb%a3%e7%a0%81%e8%87%aa%e5%8a%a8%e5%8c%96%e6%89%93deb%e5%8c%85%e6%8e%a8%e9%80%81%e8%87%b3launchpad.html#comments</comments>
		<pubDate>Wed, 29 Feb 2012 15:10:40 +0000</pubDate>
		<dc:creator>mz</dc:creator>
				<category><![CDATA[阴]]></category>
		<category><![CDATA[Linux软件]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://mengzhuo.org/blog/?p=1532</guid>
		<description><![CDATA[本文环境 OS：Ubuntu 11.10 已安装：build-essential、dh-make、dput等必要的库和软件 对象：不会却又想打Debian包的小白 本文目标 没有debian规则情况下，大部分自动化地创建debian规则 文件符合LaunchPad.net标准，上传至PPA 准备工作 去申请launchpad.net帐号 创建个人Open PGP密钥 launchpad帐号加入Open PGP密钥 在LaunchPad.net上建立个人PPA 创建Debian规则 Linux的世界是源代码构成的，时时刻刻会多出很多新的，好玩的软件，但这些软件的作者并没有时间去写debian规则，而各位又想用deb包来安装的话就没办法了。跳过“又臭又长”的Debian打包指南，其实我们只需要一个软件就够了——dh_make。 这个软件会自动地根据makefile写出Debian规则来，执行一下就好了，够简单吧。 下面就用没有debian化的ibus-gjs来做例子： git clone git@github.com:mengzhuo/ibus-gjs.git ibus-gjs-1 &#038;&#038; cd ibus-gjs-1 &#038;&#038; mv debian debian.backup 你会发现这时，ibus-gjs-1里面没有debian规则（只剩个备份文件夹啦），还有就是在路径底下直接用dh_make是不行的，因为我们的作者用的是autogen.sh，所以需要用以下命令来做出makefile ./autogen.sh --prefix=/usr &#038;&#038; ./configure 成功后（没有任何依赖不足或错误）执行 dh_make -e "mengzhuo1203@gmail.com" -n -s 当然，你可以把email换成你自己的，具体参数是什么意思请问man哦，这时屏幕上应该出现： 图片里大意是叫你去修改一下debian规则，毕竟很多地方还是要人来做的嘛~一般改debian/control和删除一些不需要的*.ex脚本文件，具体怎么改就要看Debian的文档啦，不过本例的最后成品可以参考debian.backup文件夹里的文件。 创建、测试Deb包 上面改好之后，在ibus-gjs-1底下执行dh_make --createorig -s，来创建debuild所需的orig文件，放心按回车吧，那个提示是吓唬你的，因为你已经创建了debian规则，所以它会略过的。 现在，你已经可以自己创建一个deb包了，下面的命令会创建一个deb包，并清除编译产生的缓存。 debuild -b &#038;&#038; debuild clean 然后你会发现下面的错误： 这是因为你还没指定你的密钥，如果你不需要上传到LaunchPad的话就可以忽视它啦。现在，返回上层，你就会发现你打好的DEB包啦。 [...]]]></description>
			<content:encoded><![CDATA[<h4>本文环境</h4>
<p>OS：Ubuntu 11.10<br />
已安装：build-essential、dh-make、dput等必要的库和软件<br />
对象：不会却又想打Debian包的小白</p>
<h4>本文目标</h4>
<ol>
<li>没有debian规则情况下，大部分<strong>自动化</strong>地创建debian规则</li>
<li>文件符合LaunchPad.net标准，上传至PPA</li>
</ol>
<h4>准备工作</h4>
<ol>
<li>去申请launchpad.net帐号</li>
<li>创建个人<a href="http://www.ibm.com/developerworks/aix/library/au-gnupg/index.html">Open PGP密钥</a></li>
<li>launchpad帐号加入Open PGP密钥</li>
<li>在LaunchPad.net上建立个人PPA</li>
</ol>
<h4>创建Debian规则</h4>
<p>Linux的世界是源代码构成的，时时刻刻会多出很多新的，好玩的软件，但这些软件的作者并没有时间去写debian规则，而各位又想用deb包来安装的话就没办法了。跳过“又臭又长”的Debian打包指南，其实我们只需要一个软件就够了——dh_make。<br />
这个软件会自动地根据makefile写出Debian规则来，执行一下就好了，够简单吧。</p>
<p>下面就用没有debian化的ibus-gjs来做例子：<br />
<code class="tty">git clone git@github.com:mengzhuo/ibus-gjs.git ibus-gjs-1 &#038;&#038; cd ibus-gjs-1 &#038;&#038; mv debian debian.backup</code><br />
你会发现这时，ibus-gjs-1里面没有debian规则（只剩个备份文件夹啦），还有就是在路径底下直接用dh_make是不行的，因为我们的作者用的是autogen.sh，所以需要用以下命令来做出makefile<br />
<code class="tty" >./autogen.sh --prefix=/usr &#038;&#038; ./configure</code><br />
成功后（没有任何依赖不足或错误）执行<br />
<code class="tty" >dh_make -e "mengzhuo1203@gmail.com" -n -s</code><br />
当然，你可以把email换成你自己的，具体参数是什么意思请问man哦，这时屏幕上应该出现：<br />
<a href="http://mengzhuo.org/blog/wp-content/uploads/2012/02/screenshot1.png"><img src="http://mengzhuo.org/blog/wp-content/uploads/2012/02/screenshot1.png" alt="" title="screenshot1" width="520" height="136" class="alignnone size-full wp-image-1538" /></a><br />
图片里大意是叫你去修改一下debian规则，毕竟很多地方还是要人来做的嘛~一般改debian/control和删除一些不需要的*.ex脚本文件，具体怎么改就要看Debian的文档啦，不过本例的最后成品可以参考debian.backup文件夹里的文件。</p>
<h4>创建、测试Deb包</h4>
<p>上面改好之后，在ibus-gjs-1底下执行<code class="tty" >dh_make --createorig -s</code>，来创建debuild所需的orig文件，放心按回车吧，那个提示是吓唬你的，因为你已经创建了debian规则，所以它会略过的。<br />
现在，你已经可以自己创建一个deb包了，下面的命令会创建一个deb包，并清除编译产生的缓存。<br />
<code class="tty" >debuild -b &#038;&#038; debuild clean</code><br />
然后你会发现下面的错误：<a href="http://mengzhuo.org/blog/wp-content/uploads/2012/02/2012-02-29-223451_1280x800_scrot.png"><img src="http://mengzhuo.org/blog/wp-content/uploads/2012/02/2012-02-29-223451_1280x800_scrot.png" alt="" title="2012-02-29-223451_1280x800_scrot" width="548" height="85" class="alignnone size-full wp-image-1542" /></a><br />
这是因为你还没指定你的密钥，如果你不需要上传到LaunchPad的话就可以忽视它啦。现在，返回上层，你就会发现你打好的DEB包啦。</p>
<h4>源码上传</h4>
<p>就3步：</p>
<ol>
<li>获得Open PGP ID，例如我的ID是A0771E56，可以用下面的代码参看<br />
<code class="tty" >gpg --list-keys</code><br />
我的PGP</p>
<blockquote><p>
pub   2048R/A0771E56 2011-11-21<br />
uid                  Meng Zhuo (For Email and EncryptedFile) <mengzhuo1203 @gmail.com><br />
sub   2048R/DF9E11A0 2011-11-21<br />
</mengzhuo1203></p></blockquote>
</li>
<li>在源代码目录执行<br />
<code class="tty" >debuild -S -sa -k[你的ID]</code><br />
例如：<br />
<code class="tty" >debuild -S -sa -kA0771E56</code><br />
来构建launchpad承认的源代码格式</li>
<li>返回上层目录，执行<br />
<code class="tty" >dput ppa:[你的PPA地址] source.changes结尾的文件</code></li>
<p>例如：<br />
<code class="tty" >dput ppa:mengzhuo1203/ibus-gjs ibus-gjs_1_source.changes</code><br />
好啦，现在就坐等LaunchPad给你排队编译这个东西了，大概1-2小时不等
</ol>
<h4>总结</h4>
<p>我们学了简单地从源代码制作debian规则和上传代码到LaunchPad，很简单吧，我可是摸索了……3天（业余时间），遥想当年手动写规则，简直是弱爆了。<br />
当然，非常欢迎指正错误，或者是说出更好的方法哈~</p>
<blockquote><a title="如何从源代码自动制作Deb规则&#038;推送至Launchpad" href="http://mengzhuo.org/blog/%e5%a6%82%e4%bd%95%e4%bb%8e%e6%ba%90%e4%bb%a3%e7%a0%81%e8%87%aa%e5%8a%a8%e5%8c%96%e6%89%93deb%e5%8c%85%e6%8e%a8%e9%80%81%e8%87%b3launchpad.html">如何从源代码自动制作Deb规则&#038;推送至Launchpad</a> | <a title="蒙卓的博客，东西很杂" href="http://mengzhuo.org/blog/feed">订阅博客</a></blockquote><blockquote><small><a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" title="保留权利声明">署名-非商业性使用-相同方式共享</a></small><blockquote>]]></content:encoded>
			<wfw:commentRss>http://mengzhuo.org/blog/%e5%a6%82%e4%bd%95%e4%bb%8e%e6%ba%90%e4%bb%a3%e7%a0%81%e8%87%aa%e5%8a%a8%e5%8c%96%e6%89%93deb%e5%8c%85%e6%8e%a8%e9%80%81%e8%87%b3launchpad.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>如何让Ubuntu启动提速50%与Upstart使用</title>
		<link>http://mengzhuo.org/blog/%e5%a6%82%e4%bd%95%e8%ae%a9ubuntu%e5%90%af%e5%8a%a8%e6%8f%90%e9%80%9f50%e4%b8%8eupstart%e4%bd%bf%e7%94%a8.html</link>
		<comments>http://mengzhuo.org/blog/%e5%a6%82%e4%bd%95%e8%ae%a9ubuntu%e5%90%af%e5%8a%a8%e6%8f%90%e9%80%9f50%e4%b8%8eupstart%e4%bd%bf%e7%94%a8.html#comments</comments>
		<pubDate>Thu, 18 Aug 2011 13:59:35 +0000</pubDate>
		<dc:creator>mz</dc:creator>
				<category><![CDATA[雨]]></category>
		<category><![CDATA[Linux软件]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[折腾]]></category>

		<guid isPermaLink="false">http://mengzhuo.org/blog/?p=1171</guid>
		<description><![CDATA[不得不说10.04以后的Canonical为了让Ubuntu启动速度加快下了相当大的功夫：不惜去掉传统的rc.X，init.d等，换成能并行启动处理的Upstart，还单独开发了ureadahead这个软件来预加载所有可能读到的文件。我觉得还是应该还真面目以正视听。我的机子按2011年的配置来说是相当老爷机和落伍了，可是启动经过调整后可以达到32秒 而且蓝牙、HAL、WIFI必须的程序没有移出启动队列。 首先得说说我的基本配置： ThinkPad X200s CPU：Intel Core2 SU3500-1.40GHz[单核] 内存：DDR3 1333 4GB 硬盘：HDD WDC WD2500BEVS 250GB 5400RPM 软件与平台： Ubuntu 10.04.3 LTS ureadahead 0.100.0 那么怎么做到的呢？ 了解Upstart 也许你也发现在10.04以后版本的Ubuntu中每次通过init.d启动程序，例如 /etc/init.d/mysql start Rather than invoking init scripts through /etc/init.d, use the service(8) utility, e.g. service mysql start Since the script you are attempting to invoke has been converted to an [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://mengzhuo.org/blog/wp-content/uploads/2011/08/x200s-lucid-20110818-6.png" alt="" title="x200s-lucid-20110818-6" width="473" height="99" class="size-full wp-image-1192" /><br />
不得不说10.04以后的Canonical为了让Ubuntu启动速度加快下了相当大的功夫：不惜去掉传统的rc.X，init.d等，换成能并行启动处理的Upstart，还单独开发了ureadahead这个软件来预加载所有可能读到的文件。我觉得还是应该还真面目以正视听。我的机子按2011年的配置来说是相当老爷机和落伍了，可是启动经过调整后可以<strong>达到32秒</strong><br />
而且<strong>蓝牙、HAL、WIFI必须的程序没有移出启动队列</strong>。<br />
首先得说说我的基本配置：</p>
<blockquote><p>ThinkPad X200s<br />
CPU：Intel Core2 SU3500-1.40GHz[单核]<br />
内存：DDR3 1333 4GB<br />
硬盘：HDD WDC WD2500BEVS 250GB 5400RPM
</p></blockquote>
<p>软件与平台：</p>
<blockquote><p>Ubuntu 10.04.3 LTS<br />
ureadahead 0.100.0
</p></blockquote>
<p>那么怎么做到的呢？<br />
<span id="more-1171"></span></p>
<h4>了解Upstart</h4>
<p>也许你也发现在10.04以后版本的Ubuntu中每次通过init.d启动程序，例如</p>
<blockquote><p>/etc/init.d/mysql start<br />
Rather than invoking init scripts through /etc/init.d, use the service(8)<br />
utility, e.g. service mysql start</p>
<p>Since the script you are attempting to invoke has been converted to an<br />
Upstart job, you may also use the start(8) utility, e.g. start mysql</p></blockquote>
<p>这是因为Ubuntu使用Upstart作为「启动控制器」，这样的好处就是可以「<strong>并行</strong>」启动，而以往的启动是是单一「线性」的，就好比老的启动方法是单行线，而Upstart是六车道。但是，太多程序在打包进源的时候，并没有将配置文件改写成Upstart使用的样式——继续用老式的启动方法，Upstart因为兼容老式方法，被拖累后并背黑锅。那么怎么分析启动项呢？那么就得搬出神器bootchart</p>
<h4>使用bootchart分析启动项</h4>
<p><a href="http://mengzhuo.org/blog/wp-content/uploads/2011/08/x200s-lucid-20110818-1.png"><img src="http://mengzhuo.org/blog/wp-content/uploads/2011/08/x200s-lucid-20110818-1.png" alt="" title="x200s-lucid-20110818-1" width="491" height="217" class="alignnone size-full wp-image-1177" /></a><br />
（注：中间绿色部分是为了排版方便而缩小的，两端为正常分辨率）<br />
可以看出我原来的启动时间是65秒左右，自从内核加载以来的粉红色的Disk Thoughout(磁盘读写总量)一直是满的，即磁盘在启动后一直没停过小文件的读写，上面还有磁盘的峰值读写速度为44MB/s。而后下面长长的列表中发现一些网站调试使用的apache、mysql之类平时不需要的项，但是<strong>使用老的管理器已经无法停止其启动的程序</strong>。那么要停止它启动载入才行，由于网上以讹传讹地是要注释掉/etc/init/*.conf中启动的那几行就可以了，但是我觉得这真TM是胡说！应该查明当前的启动等级，例如</p>
<blockquote><p>$ runlevel<br />
N 2
</p></blockquote>
<p>说明我目前以启动等级2启动，N(Normal)属于正常启动。<br />
再进行修改Upstart配置文件才行。</p>
<h4>Upstart配置文件部分分析</h4>
<p>启动部分是本文重点，因此举个常见的，「很难」去除的Mysql作为例子：</p>
<blockquote><p>start on (net-device-up<br />
          and local-filesystems<br />
	  and runlevel [345])<br />
stop on runlevel [016]</p></blockquote>
<p>和你的<code>/etc/init/mysql.conf</code>比较一下，我只是去掉了2这个runlevel中的数字，多简单啊！mysql就不会在正常启动的时候运行了。</p>
<p>而且这个配置文件还可以安排启动顺序，例如我的hald <code>/etc/init/hald.conf</code>启动项：</p>
<blockquote><p>start on (local-filesystems<br />
	  and started dbus<br />
	  and runlevel [2345])<br />
stop on runlevel [016]</p>
<p>exec /usr/sbin/hald &#8211;daemon=yes</p>
</blockquote>
<p>这样在dbus启动后并行启动hald，启动等级是[2345]，这样就不必在rc.local中拖Upstart的后腿了。<br />
注：
<ul>
<li>可以删除一些/etc/init/tty*.conf来减少tty的量，也加快一些加载速度。</li>
<li>调整一些程序的启动顺序，比如让mysql、gdm也在dbus之后启动的话，对于多线程的CPU应该会更快点</li>
<li>删除plymouth(加载的画面主题)也是个好办法</li>
</ul>
<h4>为ureadahead正名</h4>
<p>很多人认为ureadahead只是为SSD准备的，但是事实如图（为方便排版已缩小）：<a href="http://mengzhuo.org/blog/wp-content/uploads/2011/08/x200s-lucid-20110818-3.png"><img src="http://mengzhuo.org/blog/wp-content/uploads/2011/08/x200s-lucid-20110818-3.png" alt="" title="x200s-lucid-20110818-3" width="576" height="189" class="alignnone size-full wp-image-1185" /></a><br />
<a href="http://mengzhuo.org/blog/wp-content/uploads/2011/08/5.png"><img src="http://mengzhuo.org/blog/wp-content/uploads/2011/08/5.png" alt="" title="5" width="160" height="60" class="alignright size-full wp-image-1189" /></a><br />
可以看出ureadahead启动之完成后，磁盘的读写顿时下降，而且峰值已经从之前的44MB/s增至77MB/s，速度瞬间少了20秒，当然……取而代之的是CPU的用量猛增。要注意修改内核或启动项之后，下一次的启动会相当慢，但是想想这种机会应该比较少吧。</p>
<h4>小总结</h4>
<p>可见技术在发展，速度自然是越来越快的，欢迎大家提出优化得更好的启动方案。</p>
<blockquote><a title="如何让Ubuntu启动提速50%与Upstart使用" href="http://mengzhuo.org/blog/%e5%a6%82%e4%bd%95%e8%ae%a9ubuntu%e5%90%af%e5%8a%a8%e6%8f%90%e9%80%9f50%e4%b8%8eupstart%e4%bd%bf%e7%94%a8.html">如何让Ubuntu启动提速50%与Upstart使用</a> | <a title="蒙卓的博客，东西很杂" href="http://mengzhuo.org/blog/feed">订阅博客</a></blockquote><blockquote><small><a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" title="保留权利声明">署名-非商业性使用-相同方式共享</a></small><blockquote>]]></content:encoded>
			<wfw:commentRss>http://mengzhuo.org/blog/%e5%a6%82%e4%bd%95%e8%ae%a9ubuntu%e5%90%af%e5%8a%a8%e6%8f%90%e9%80%9f50%e4%b8%8eupstart%e4%bd%bf%e7%94%a8.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Rhythmbox插件编写教程指北</title>
		<link>http://mengzhuo.org/blog/rhythmbox%e6%8f%92%e4%bb%b6%e7%bc%96%e5%86%99%e6%95%99%e7%a8%8b%e6%8c%87%e5%8c%97.html</link>
		<comments>http://mengzhuo.org/blog/rhythmbox%e6%8f%92%e4%bb%b6%e7%bc%96%e5%86%99%e6%95%99%e7%a8%8b%e6%8c%87%e5%8c%97.html#comments</comments>
		<pubDate>Fri, 12 Aug 2011 07:58:39 +0000</pubDate>
		<dc:creator>mz</dc:creator>
				<category><![CDATA[阴]]></category>
		<category><![CDATA[gettext]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[Linux软件]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Rhythmbox]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[折腾]]></category>

		<guid isPermaLink="false">http://mengzhuo.org/blog/?p=1093</guid>
		<description><![CDATA[写了个Rhythmbox的插件以后才发现这方面的中文教程简直是0的状态（百度连鸟语的都不知道），介于我是python新手，C语言全部还给老师了，所以不敢说这篇文章是指南，权当这是中文关于Rhythmbox插件编写的0.5篇文章吧。具体的最好还要参考Rhythmbox官方的指南 ++++++++++++++ 示例的源代码 ++++++++++++++ 首先，想好一个插件名字吧 教程里，我就用「RB_notify」。 要清楚用python写Rhythmbox的插件机制其实很简单——写好两个文件就可以成个插件 RB_notify.rb-plugin和__init__.py 前者负责解释你这插件叫啥、作者是谁等，后者是程序的入口，把他们放到$HOME/.gnome2/rhythmbox/plugins/notify里面就可以运行了，很简单是吧。 翻翻notify.rb-plugin [RB Plugin] Loader=python Module=RB_notify IAge=1 Name=RB Plugin Example Name[zh_CN]=RB插件例子 Description=This is an example of RB Plugin Description[zh_CN]=这是个RB插件例子 Authors=Meng Zhuo Copyright=2011 © Meng Zhuo Website=http://mengzhuo.org/blog/ 这个是插件描述文件，由于我们插件是python写的，所以前面的4个参数都不能修改，而Module后面的跟的是需要加载模块，这里和项目同名就好了。后面几个都不言自明了，所以很简单吧。光说你的插件是干啥的自然是不行，得用程序让Rhythmbox听话。 __init.py__程序登场 写过python程序的同学都清楚，大部分程序第一步是导入一定量的库，这样才能正常运行，我们的Rhythmbox程序也一样： import rb 这个语句是必须的，因为这个库是Rhythmbox的缩写。其他的库像 gconf（需要配置的话）【教程】 gtk（需要图形的话）教程 gettext（推荐import，国际化用）教程同上 这里我们就只使用rb吧，这时候程序应该是这个样子的： __init__函数是入口函数，每次插件运行的时候都先运行一遍里面的程序，里面一般第一句是添加self为RB插件的类。rb.Plugin.__init__(self) activate函数是插件启动的时候执行的程序，这里就用简单的print吧 deactivate函数是插件关闭或者Rhythmbox退出的时候执行的程序，理论上之前创建了什么东西，就得销毁掉（用del命令)，不赘述了。 检验成果的时候到了！ 运行Rhythmbox -D RB_notify 打开插件栏，这时候就可以看见你的插件了。 启动插件后就会在刚才运行命令的终端里出现 (15:36:44) [0x6ea040] [...]]]></description>
			<content:encoded><![CDATA[<p>写了个Rhythmbox的插件以后才发现这方面的中文教程简直是0的状态（百度连鸟语的都不知道），介于我是python新手，C语言全部还给老师了，所以不敢说这篇文章是指南，权当这是中文关于Rhythmbox插件编写的0.5篇文章吧。<a href="http://live.gnome.org/RhythmboxPlugins/WritingGuide">具体的最好还要参考Rhythmbox官方的指南</a><br />
++++++++++++++<br />
<a href='http://mengzhuo.org/lab/file/RB_notify.tar.gz' >示例的源代码</a><br />
++++++++++++++</p>
<h4>首先，想好一个插件名字吧</h4>
<p>教程里，我就用「RB_notify」。<br />
要清楚用python写Rhythmbox的插件机制其实很简单——写好两个文件就可以成个插件<br />
<code>RB_notify.rb-plugin</code>和<code>__init__.py</code><br />
前者负责解释你这插件叫啥、作者是谁等，后者是程序的入口，把他们放到$HOME/.gnome2/rhythmbox/plugins/notify里面就可以运行了，很简单是吧。</p>
<h4>翻翻notify.rb-plugin</h4>
<blockquote><p>[RB Plugin]<br />
Loader=python<br />
Module=RB_notify<br />
IAge=1<br />
Name=RB Plugin Example<br />
Name[zh_CN]=RB插件例子<br />
Description=This is an example of RB Plugin<br />
Description[zh_CN]=这是个RB插件例子<br />
Authors=Meng Zhuo <mengzhuo1203 @gmail.com><br />
Copyright=2011 © Meng Zhuo<br />
Website=http://mengzhuo.org/blog/</mengzhuo1203></p></blockquote>
<p>这个是插件描述文件，由于我们插件是python写的，所以前面的4个参数都不能修改，而Module后面的跟的是需要加载模块，这里和项目同名就好了。后面几个都不言自明了，所以很简单吧。光说你的插件是干啥的自然是不行，得用程序让Rhythmbox听话。</p>
<h4>__init.py__程序登场</h4>
<p>写过python程序的同学都清楚，大部分程序第一步是导入一定量的库，这样才能正常运行，我们的Rhythmbox程序也一样：</p>
<blockquote><p>import rb</p></blockquote>
<p>这个语句是必须的，因为这个库是Rhythmbox的缩写。其他的库像
<ul>
<li>gconf（需要配置的话）<del datetime="2011-08-12T02:28:03+00:00">【教程】</del></li>
<li>gtk（需要图形的话）<a href="http://qixinglu.com/archives/python_and_glade_file_i18n_guide" target="_blank">教程</a></li>
<li>gettext（推荐import，国际化用）教程同上</li>
</ul>
<p>这里我们就只使用rb吧，这时候程序应该是这个样子的：<a href="http://mengzhuo.org/blog/wp-content/uploads/2011/08/Screenshot-__init__.py-.gnome2-rhythmbox-plugins-RB_notify-gedit.png"><img src="http://mengzhuo.org/blog/wp-content/uploads/2011/08/Screenshot-__init__.py-.gnome2-rhythmbox-plugins-RB_notify-gedit-300x164.png" alt="" title="Screenshot-*__init__.py (~-.gnome2-rhythmbox-plugins-RB_notify) - gedit" width="300" height="164" class="alignnone size-medium wp-image-1121" /></a></p>
<ul>
<li>__init__函数是入口函数，每次插件运行的时候都先运行一遍里面的程序，里面一般第一句是添加self为RB插件的类。<code>rb.Plugin.__init__(self)</code></li>
<li>activate函数是插件启动的时候执行的程序，这里就用简单的print吧</li>
<li>deactivate函数是插件关闭或者Rhythmbox退出的时候执行的程序，理论上之前创建了什么东西，就得销毁掉（用del命令)，不赘述了。</li>
</ul>
<h4>检验成果的时候到了！</h4>
<p>运行<code>Rhythmbox -D RB_notify</code><br />
打开插件栏，这时候就可以看见你的插件了。<a href="http://mengzhuo.org/blog/wp-content/uploads/2011/08/Screenshot-配置插件.png"><img src="http://mengzhuo.org/blog/wp-content/uploads/2011/08/Screenshot-配置插件-300x183.png" alt="" title="Screenshot-配置插件" width="300" height="183" class="alignnone size-medium wp-image-1122" /></a><br />
启动插件后就会在刚才运行命令的终端里出现<br />
<code>(15:36:44) [0x6ea040] [RB_notify.activate] .gnome2/rhythmbox/plugins/RB_notify/__init__.py:15: Hello, This is a Example<br />
</code></p>
<h4>做些有用的事</h4>
<p>光是在终端里输出一些字符可不是什么有趣的事，所以要介绍RB牛X的地方，在于它的shell。在刚才的print后面添加<br />
<code>shell.props.shell_player.playpause(0)</code><br />
这样，每次启动插件，这个RB就会暂停或者是播放。<br />
当然这个shell没有这么简单，不只能控制播放、音量等，还能UI什么的，大家可以去<a href="http://developer.gnome.org/rhythmbox/unstable/RBShellPlayer.html">他们的官网</a>围观哈</p>
<blockquote><a title="Rhythmbox插件编写教程指北" href="http://mengzhuo.org/blog/rhythmbox%e6%8f%92%e4%bb%b6%e7%bc%96%e5%86%99%e6%95%99%e7%a8%8b%e6%8c%87%e5%8c%97.html">Rhythmbox插件编写教程指北</a> | <a title="蒙卓的博客，东西很杂" href="http://mengzhuo.org/blog/feed">订阅博客</a></blockquote><blockquote><small><a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" title="保留权利声明">署名-非商业性使用-相同方式共享</a></small><blockquote>]]></content:encoded>
			<wfw:commentRss>http://mengzhuo.org/blog/rhythmbox%e6%8f%92%e4%bb%b6%e7%bc%96%e5%86%99%e6%95%99%e7%a8%8b%e6%8c%87%e5%8c%97.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rhythmbox小插件-耳机意外防止器</title>
		<link>http://mengzhuo.org/blog/rhythmbox%e5%b0%8f%e6%8f%92%e4%bb%b6-%e8%80%b3%e6%9c%ba%e6%84%8f%e5%a4%96%e9%98%b2%e6%ad%a2%e5%99%a8.html</link>
		<comments>http://mengzhuo.org/blog/rhythmbox%e5%b0%8f%e6%8f%92%e4%bb%b6-%e8%80%b3%e6%9c%ba%e6%84%8f%e5%a4%96%e9%98%b2%e6%ad%a2%e5%99%a8.html#comments</comments>
		<pubDate>Wed, 29 Jun 2011 07:39:33 +0000</pubDate>
		<dc:creator>mz</dc:creator>
				<category><![CDATA[雨]]></category>
		<category><![CDATA[Linux软件]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://mengzhuo.org/blog/?p=1069</guid>
		<description><![CDATA[不知道Rhythmbox是什么的童鞋，请无视这篇发布文章 用途请看图（画了1个小时……木有美术细胞没办法），其实这个问题我一直想找个插件，可是就是没有，只好自己做了。DEB下载地址 重新插上耳机的时候会自动地恢复播放 惯例一些废话： 这个插件用的是Python+dbus，所以，如果你的耳机插孔没有被系统识别那我也没办法，目前我的X200上一切正常，理论上应该是支持所有耳机插孔的。 插件有时会导致Rhythmbox卡死（原因未知……但不是BUG……），请清除插件目录下的.pyc文件，重启Rhythmbox。 至于名字嘛……我真的想不出更好的了，有好的名字可以请发到我邮箱 Rhythmbox小插件-耳机意外防止器 &#124; 订阅博客署名-非商业性使用-相同方式共享]]></description>
			<content:encoded><![CDATA[<p>不知道Rhythmbox是什么的童鞋，请无视这篇发布文章<br />
用途请看图（画了1个小时……木有美术细胞没办法），其实这个问题我一直想找个插件，可是就是没有，只好自己做了。<a href="http://mengzhuo.org/lab/EP4Rhythmbox/rhythmbox-plugin-earphone_last_version_all.deb">DEB下载地址</a><br />
<img class="alignnone" title="EP4Rhythmbox" src="http://mengzhuo.org/lab/EP4Rhythmbox/top.png" alt="" width="550" height="311" /></p>
<p><strong>重新插上耳机的时候会自动地恢复播放</strong></p>
<p>惯例一些废话：
<ul>
<li>这个插件用的是Python+dbus，所以，如果你的耳机插孔没有被系统识别那我也没办法，目前我的X200上一切正常，理论上应该是支持所有耳机插孔的。</li>
<li>插件有时会导致Rhythmbox卡死（原因未知……但不是BUG……），请清除插件目录下的.pyc文件，重启Rhythmbox。</li>
<li>至于名字嘛……我真的想不出更好的了，有好的名字可以请发到我邮箱</li>
</ul>
<blockquote><a title="Rhythmbox小插件-耳机意外防止器" href="http://mengzhuo.org/blog/rhythmbox%e5%b0%8f%e6%8f%92%e4%bb%b6-%e8%80%b3%e6%9c%ba%e6%84%8f%e5%a4%96%e9%98%b2%e6%ad%a2%e5%99%a8.html">Rhythmbox小插件-耳机意外防止器</a> | <a title="蒙卓的博客，东西很杂" href="http://mengzhuo.org/blog/feed">订阅博客</a></blockquote><blockquote><small><a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" title="保留权利声明">署名-非商业性使用-相同方式共享</a></small><blockquote>]]></content:encoded>
			<wfw:commentRss>http://mengzhuo.org/blog/rhythmbox%e5%b0%8f%e6%8f%92%e4%bb%b6-%e8%80%b3%e6%9c%ba%e6%84%8f%e5%a4%96%e9%98%b2%e6%ad%a2%e5%99%a8.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

