在自己的 GTK+ 程序中加入 RGBA 透明支持
上次介绍了怎么在 Arch Linux 下启用 RGBA 透明窗口 ,然而,目前支持 RGBA 的程序还很少,看起来有的透明,有的不透明,很不爽吧?
另外,GTK+ 默认是不启用 RGBA 支持的,我们自己编写程序的时候,怎么加入 RGBA,达到这种酷炫的效果呢?
细心的同学可能已经发现,上次我发的图中最顶端那个程序就是我自己写的,而且已经实现了半透明效果。
加入 RGBA 效果的方法并不难,仅仅是几条语句而已,看看下面的 patch:
From fb88cb790a08e928c5e6656f8334264c5ae9f93a Mon Sep 17 00:00:00 2001
From: Kevin Lange
Date: Wed, 5 Mar 2008 09:26:53 -0500
Subject: [PATCH] Added RGBA colormap support to the GUI
---
ccm/Window.py | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/ccm/Window.py b/ccm/Window.py
index 09306da..84f1d76 100644
--- a/ccm/Window.py
+++ b/ccm/Window.py
@@ -42,6 +42,10 @@ class MainWin(gtk.Window):
def __init__(self, Context, pluginPage=None, categoryName=None):
gtk.Window.__init__(self)
+ self.gtk_screen = self.get_screen()
+ colormap = self.gtk_screen.get_rgba_colormap()
+ if colormap:
+ gtk.widget_set_default_colormap(colormap)
self.ShowingPlugin = None
self.Context = Context
self.connect("destroy", self.Quit)
@@ -99,6 +103,7 @@ class MainWin(gtk.Window):
self.ToggleCategory(None, categoryName)
def Quit(self, *args):
+ gtk.widget_pop_colormap()
gtk.main_quit()
def ResetMainWidgets(self):
--
1.5.2.5
呵呵,这是 CCSM 的 RGBA 补丁,看到了吧,其实关键的也就那么几行而已,在初始化的时候试着载入 RGBA 颜色表,在退出的时候对颜色表进行出栈,其他语言也是这个道理。
有了这几行代码,是不是想把桌面上的所有 GTK+ 程序 hack 掉?
呵呵,赶快在自己的程序里加入 RGBA 支持吧!
在 Arch Linux 下启用 RGBA 透明窗口
看了 Ubuntu 9.04 那么炫,突然感觉自己的 Arch 好像缺了什么,哎?窗口怎么不是透明的啊……
这个东西是由 RGBA 控制的,大家知道 RGB 是通常所说的三原色:红绿蓝,那么 A 是什么呢?不错,就是 Alpha,透明。
Arch 里面默认没有启用透明的引擎,所以窗口都是 RGB 的,看起来当然不如 Ubuntu 那么炫啦~
那么怎么在 Arch 里面启用透明呢?
先来看一下效果图:
其实启用方法很简单,只要从 AUR 里安装 librgba-gtk-module 这个包就可以了:
yaourt -S librgba-gtk-module
然后按照提示,运行:
gnome-color-chooser
在弹出的窗口里选择“引擎”-“全局”-“Murrine”-“首选项”,勾上 Enable/Disable RGBA support 的两个勾就行了。
应用的时候,可能会等待一会儿,之后就可以看到透明窗口和控件啦!
值得一提的是,并非所有窗口都支持透明效果,这要看软件的源代码启没启用支持哦~
以上方法在 Arch Linux、Gnome 2.26.2 下验证通过。
今天给大家讲了讲 Linux
呵呵,这是第二次讲课哦,上次讲 GTK+ 感觉太深了,于是这次讲些体系的东西。
不过这次还是有很多人没有基础啊,好象又讲深了……唉……
希望能起到引路的作用吧……附上简报:
Windows,就不能改善一下易用性么?
我是一个纯正的 Linux 用户,只在很久以前在别人电脑上用过一次 Windows,觉得太难用,之后就再也没用过。
最近看见好多同学安装 Windows,说很漂亮,又是特效又是什么的,忍不住也想试一下。
在源里找了半天,也没找到可以找到可以安装 Windows 的包,也没找到第三方源,干脆从网上下载吧,真麻烦。
Google 了一下,才知道 Windows 是收费软件,不过居然可以通过一种叫做“破解”的方式免费安装,真是人性化啊,不过干嘛不用捐助的形式呢?让人困惑啊……
赶紧下载“Windows 98 原版.iso”,我上次用的就是 Windows 98,不知道这个发行版现在发展到什么样子了。为什么叫做“原版”呢?难道是“‘源’版”的笔误?大概吧……这名称上也看不出是 32 位,还是 64 位的……
唉,安装还是命令行的……真是的,谁说 Windows 已经不需要文本界面来着?
安装到一半,傻眼了,居然跟我要“序列号”,这是什么东西?好在我心细,发现光盘里有个叫“sn.txt”的文件,里面就有“序列号”,呵呵,大概是彩蛋之类的东西吧……微软的程序员真幽默……
折腾了半天,总算安好了,期间卡了好几次,好在结束了一个叫做“rundll32.exe”的进程就好了,难道这个就是传说中的病毒?看来要装个“杀毒软件”才行……唉,要学的东西还很多啊。
安装好了,发现 Windows 98 这些年看起来一点也没有变化啊,连个 U 盘都不能自动挂载,更可气的是命令行都没有 mount 命令!唉,看来 Windows 还是不够人性化啊。
算了,既然要尝试,当然要克服困难,要不然那些 Windowser 又要说我不懂 Windows 的哲学了。
赶紧请来隔壁的 Windows 大牛,问:“怎么在 Windows 下挂载 U 盘啊?”
大牛:“什么是挂载?”
我解释了半天,大牛才说:“哦,Windows 都是自动挂载的!”
我指着我的 98 跟他说,你看我这就没有!
大牛惊异:“你怎么安了这么老的版本?”
我无辜:“不是市面上好多教科书都讲的这个发行版么?”
大牛说:“那些编书的 NC!”
我大彻大悟:“哦!大概跟 Redhat 的情况差不多……”
于是只见大牛三下五除二,给我安好了最新的 Windows 7 RC……
这个发行版果然漂亮,尤其下面那个面板,就跟 KDE 4 似的,我就想,或许之前那个 98 是专攻服务器的发行版,唉,刚才还为 Windows 怎么推进桌面市场担心呢,看 Windows 7 这桌面,倒是还能吸引一些 MM 的眼球。
不过这特效怎么看都像是 Compiz 呢?但是这里都是些没用的特效,好像 Compiz 中用于加快工作效率的半透明、缩放桌面、突出显示之类的都没有?找了半天没找到在哪设置,算了吧,鸡肋总比没有强。
想起杀毒软件的问题,我连忙问大牛:“源在哪里设置?”
大牛一脸茫然。
我不由惊异:“Windows 下都是怎么安装软件的?”
大牛说:“一个个下载呗。”
我简直以为大牛在开玩笑,问:“那升级怎么办?”
大牛:“一个个重安呗。”
我木然。
大牛突然一拍脑袋:“有个软件跟你说的挺像的。”
然后就见他找了半天,下载个 360 软件管理,一路又是双击又是下一步安上了,看得我眼花缭乱的……在 Linux 下,我都是打开软件管理器,输入个软件名称了事。
听我说要装杀毒软件,他又去百度搜了好长时间,下载,下一步下一步,还不断给我解释什么是免费版、试用版、共享版、绿色版、破解版、注册版、木 JJ 版,听得我风中凌乱。还好,不一会儿,一个金黄色的小狮子就跃然桌面之上,帮我解了围。
我问他:“这是病毒么?”
他说:“不是,这个是小狮子头杀毒软件,什么病毒都能杀。”
我看它拿个放大镜,一会儿云彩,一会儿电击的,还不时乱叫,跟个叫兽似的,挺吓人,问:“怎么是这种颜色的啊,跟代谢产物似的。”
大牛挺尴尬:“就是这么设计的。”
我心说 Ubuntu 还能换主题呢,小狮子咋就不能是蓝色的呢?
想到这里,连忙问:“Windows 不会也不能换主题吧?”
大牛说,当然能!
然后对着三个滑动条滑来滑去,窗口的颜色果然不断变化,桌面背景也是。
我说:“是换主题,不是换颜色!”
大牛:“这就是主题啊!哦,你说那个啊,主题还没破解呢,你等正式版出来,雨林花园的人就会破解了!”
我问:“这就完事了?”
大牛:“还要更新一下。”
于是打开 IE 浏览器,进入 Windows Update 的网站去更新,结果就见刚按回车,页面就不动了。
我疑惑:“这是?”
大牛一脸镇定:“IE 死了?”
我问:“怎么会死的?”
大牛:“每次开 Windows Update 都会死,正常现象。”
我无法想像,自家浏览器打开自家网站会挂掉……
我发现很多软件都没有提供 For Windows 的软件包,有些软件只提供了源码包,在 Windows 下编译极为不便,尤其是一些专业软件,根本没有考虑移植到 Windows 上,这让我很是困扰。
好在大牛热心地提醒我:“好多软件都可以找到优秀的替代软件的!你看视频播放你可以用 BoyFriend 影音,聊天你可以用秋秋,有问题上百度搜搜,对了,要不然一会儿咱们玩茎舞吧~”
我不知为啥寒了一下,心想还是回去 Linux 吧,结果一重启,傻了,我的 Linux 呢?我的 Grub 呢?难道说 Windows 把我的 MBR 覆盖了?
这下玩大了……
唉,看来 Windows 还是太不人性化了,是高手和装 B 者用的东西,我还是用我的 Linux 吧……Windows 如果不在易用性和可定制性上面下功夫,而是站在庞大的用户和软件基数上,搞些花哨的、华而不实的,或者尽给用户添麻烦的功能,恐怕桌面霸主的地位难保哦。
写这篇文章不是为了口水战,而是觉得有些 Windows 用户实在对 Linux 偏见太大,而一些 Linux 用户的反应也因此过激,这对哪边来说都是不好的。两边都是功能强大的操作系统,开发者都在为更好地为用户服务而努力,用户也必然是体会到各自操作系统的好处,才会长期使用。
我只是一个普通的大学生,不敢自称高手,但是我用 Linux 感觉很好,我希望每个人都能体验一下,说不定你也会爱上她。
Linux 也尚未毕业,请以宽容的眼光看她,给她一次实习的机会!
PS:最近没啥文章可写,干脆水一下!
Catalyst 9.5 For Linux 发布
虽然不算是新闻了,毕竟 twitter 上已经看到很多人把下载地址猜解出来了,不过毕竟是正式发布,让我们来看看 Release Notes 吧。
值得一提的是,这个版本的 Catalyst 仍然没有加入对 2.6.29 版内核的支持,需要打补丁才能正常运行。就如网友说的那样,大概大家都用上 2.6.30 的时候,2.6.29 的支持才会姗姗来迟吧?我觉得下次装电脑应该买 N 卡了……
还是来看看更新吧。
已解决的问题:
* Catalyst 控制中心,使用显示识别按钮无法识别主显示器。
* 设置 TV geometry 时可能产生错误
* 当连接双显示器并开启 RandR 1.2 的时候,全屏游戏可能出现画面问题
* 在一些 ASIC 设备上开启 X-server 时可能出现 TV 画面问题
* 使用 amdccle 的“识别显示器”按钮检测第二个显示器的时候可能出现错误,并需要重新加载来正确检测双显示器
* [SUSE 11.X x86] 运行多个服务端版本时系统可能失去响应
已知的问题:
* 在多显示器配置并且有程序运行时切换虚拟终端,系统可能失去响应
* 用第二个热插拔的显示器启动 X 的时候可能导致段错误
* 当桌面特效开启,复合特效没有明确禁止的时候,视频回放可能出现画面问题
* [SUSE11] 禁用输出的时候显示器可能无法关闭
* [Ubuntu 8.10] 在 surround view 系统启动 X 时,系统可能失去响应
* 引擎时钟和内存时钟可能被 ATI CAL 误报为 0MHz
目前还不知道能不能开启 KMS,不过可能性趋近于零,还是不要期待了……
最近 Blogger 被 Wall,只能翻 Wall 上,可是 tor 的速度实在是不尽人意,而且还断断续续,郁闷啊……
最郁闷的是大家不能评论,我看不到评论是件很痛苦的事情啊……于是结合第一条,写博客的动力超差,再加上期末考试将至……
大家都知道我说的是什么了……
[视频]Linux 疯狂,Compiz 也疯狂~
没什么好说的,看视频吧~ Compiz is crazy! from Iven Day on Vimeo.
看起来像不像中病毒了?这可不是什么特殊插件造成的效果……实打实的大混乱,呵呵~
话说,大家有什么录像软件推荐的么?recordMyDesktop 在我这里性能实在太低了……
Python 版 Linux 下的迅雷
Linux 下该不该有迅雷,这个问题一直存在分歧,在此也不予讨论。不过,迅雷抗死链的作用是巨大的,这点是不容置疑的,很多人确实用得着。
有需求就有市场,于是乎,Ubuntu 中文论坛的一位放出了 furl 这个小程序,不但可以解析迅雷的 thunder:// 协议,还可以返回迅雷候选地址, xiooli 大侠更是做出了 Shell 脚本,自动调用 aria2 进行下载。
可惜的是,furl 是 32 位闭源程序,所依赖的 lib32-libopenssl2 在 Arch Linux 下面安装不了……
突然想起,前些日子,可可熊大侠不是写过一个 pythunder 么?干嘛不用这个下载呢?于是就有了下面的程序……
#!/usr/bin/env python#pyaria2.py
import os, sys, urllib
def usage(): print """Usage: python tharia2.py [OPTIONS] URL
OPTIONS: As same as options of aria2c"""
def get_url_list(url, listpath): if not os.path.exists(listpath): print "Getting URL list, please wait..." f = urllib.urlopen("http://cocobear.info/demo/pythunder/?url=%s" % url) lst = open(listpath, "w+") lst.writelines(f.readlines()) f.close lst.seek(0) else: print "Found existing url list: ", listpath lst = open(listpath)
url_list = [line[:-1] for line in lst] lst.close() print "Recieved %d url(s)." % len(url_list) return " ".join(url_list)
def download(url): for prefix in (r"http://", r"https://", r"ftp://"): if url.startswith(prefix): break else: print "Invalid URL: %s" % url exit()
listdir = os.path.expanduser("~/.tharia2/list/") listfile = os.path.split(url)[-1] + ".list" if not os.path.exists(listdir): os.makedirs(listdir) listpath = os.path.join(listdir, listfile)
url_list = get_url_list(url, listpath) cmd = " ".join(("aria2c -c", " ".join(sys.argv[1:-1]), url_list)) print "Executing command: %s" % cmd if not os.system(cmd): os.remove(listpath)
if __name__ == "__main__": if len(sys.argv) > 1: download(sys.argv[-1]) else: usage()
很简单的一个脚本,呵呵,参数和 aria2 是一样的,区别只在于对于 url 的处理(暂时 url 只能放在命令行的最后)。
比如下载 http://www.dmato.com/DownloadFile/FishDesk2009Beta4.exe,就运行:
python tharia2.py http://www.dmato.com/DownloadFile/FishDesk2009Beta4.exe
默认 aria2 可以支持 5 线程,如果你想改为 10 线程,那么:
python tharia2.py -s 10 http://www.dmato.com/DownloadFile/FishDesk2009Beta4.exe
指定下载目录,用 -d:
python tharia2.py -d "/home/iven" -s 10 http://www.dmato.com/DownloadFile/FishDesk2009Beta4.exe
更多用法详见:
aria2c --help
目前的主要问题是,可可熊大侠的网站相应速度太慢了,过半分钟才会返回候选列表,汗……不知道是不是我的网速问题,大家可以试一下。另外,就是没有解迅雷的 thunder:// 协议了,还有快车什么的,这个貌似不难,有时间研究一下。
现在还没有开源版本的迅雷候选地址搜索工具,主要大家怕流传太广,遭到迅雷封锁。但是还是好想看看代码是怎么写的啊……
最后,项目的地址:http://github.com/iven/tharia2/
今天邂逅了我的处女 Wall——附解决方法
今天天气很好很水产!本域名申请以来第一次被 Wall 掉!大家鼓掌~
呵呵准确来说是 ghs.google.com 被 Wall 了~以前 liangsuilong 兄跟我说的时候,我还怀着侥幸心理,以为伟大的 Wall 会稍稍漏点风,没想到,这么快就报应到我身上了……
今天大约下午 4 点左右,收到 ABitNo 兄的邮件,说我的网站上不去。我还以为是教育网的平行空间问题,没想到自己一访问,无论教育网还是网通都上不去了……
[iven@~]$ ping www.kissuki.comPING ghs.l.google.com (209.85.171.121) 56(84) bytes of data.^C--- ghs.l.google.com ping statistics ---219 packets transmitted, 0 received, 100% packet loss, time 218016ms
简单来说,ghs.google.com 被 Wall 了,连忙打开“免费门”,还可以正常上~
好吧,上网找了半天,才找到解决方法:
把原来的 CNAME 由 ghs.google.com 改成 ghs.behind***.com(把 *** 换成“寡妇湾”的首字母缩写,地球人都知道这个域名什么意思),然后就可以了。
这个域名自动指向 ghs.google.com 的可用 IP,还会不时更新,真的很不错~国内像这样的服务还有很多,看来 Wall 真的弄得天怒人怨了!
Python – 你可能不知道的
最近决定系统学习 Python,于是把去年 ChinaUnix 的赠书《Python 核心编程》掏出来,使劲啃…… * 跟 C 不同,连续的判断:
* 跨平台,平台自适应的换行符(\n、\r\n……):
* `foo`的作用和 repr(foo) 的作用是一样的(虽然``已经不推荐使用) * Python 中存在复数这个类型 * 幂运算符 ** Python 还有很多不知道的啊,继续学习……
通过这几天的学习,总算是看完了前六章,发现许多以前在《Dive Into Python》里面没有提到,或者很少提到,或者很容易忘掉的特性,在此记录一下~呵呵,感谢 CU 的赞助,感谢 CCAV,感谢 GFW,感谢 宋吉广 的人品~
* 首先,交换 x, y 的值:
x, y = y, x
if x > y > z:
os.linesep
* str()、tuple()、list()等是工厂函数,用来生产对象,而不是简单的强制转换
* id() 函数用来查看对象的唯一标识符
* int 型会在必要时自动转换成 long 型
* 字符串和 tuple 一样,是不能改变的,例如下面的代码执行会出错:
str[0] = 'a'
* // 可以用来做整除(地板除):
>>>1.0 // 2.0
0.0
* 对于 list,extend() 比 + 快
* 可以用 string.Template() 实现 Shell 的 ${变量} 的功能
* enumerate() 函数可以用来产生序列的序号
* tuple 可以用来作 dict 的 key
* copy.deepcopy() 可以用来做深拷贝
Finit-ARC 多项更新:我的快速启动终于完美了~
上次说的 Finit-ARC 快速启动方案,就像文中所说,其实在我这里根本用不了。
这是当时论坛上已经确认的 Finit-ARC 的 BUG,好在作者 adriano 更新很是勤奋,一天内在 github 上提交了十多次更新,不但解决了 hald 段错误的问题,还有很多的改进。
主要的改进有:
- 增加新的静态设备
- 支持 LVM
- 启动顺序调整(udev 和 hal 可以用了)
- 修复时钟 BUG
- 增加 swap 挂载功能
- 为 Xorg 热插拔支持自动开启 HAL 和 DBUS
现在作者似乎想放弃 Finit-ARC,开始一个新的、与 Arch Linux 完美兼容的 init 项目,拭目以待吧。
另外,如果你关注 Finit-ARC,或者想要帮忙,可以去这里看看。
下面是我现在的启动图,虽然比不好使的时候长了一秒钟。



