PCManFM右键解压rar

Posted by Linuxtty on 二月 24, 2010

才解决了侧栏显示可挂载分区的问题,又碰到了新的问题。PCMan不能右键解压rar文件。zip,tar,bz2,gz之类的都好好的。唯独rar不行。唉,又要折腾一下了。

最早看到的解决方法在一阁狐狸那,谁知一时半会没看明白。后来明白要修改源码,汗!

另外今天也Google到一篇鸟文解决方案,很详细。

pcmanfm已经emerge过一遍了,直接去/usr/portage/distfiles/里面找源码包拷贝一份,解压,修改。结果make的时候各种错误,就去掉一段注释代码,不至于弄出这么多搞头吧。最后是卸了装,装了卸,拼RP似的给make install上去了,囧rz…

让pcmanfm支持右键解压rar文件,要做的就是修改源码包里面src/ptk/ptk-file-archiver.c文件,vim搜一下rar就可以找到注释代码了,在64行左右。除了像yegle说的去掉注释符号外,还要修改unrar的解压参数,把’unrar -o- e’改成’unrar -o- x’。unrar的e参数很囧,把压缩包里面的所有文件全部展开解压到当前目录下面。当时不知道,拿一个rar文件来测试的时候就悲剧了>.<

需要支持7zip的文件解压的话,再在后面加一段代码吧。

      {
           “application/x-7z-compressed”,
           “7zr a -bd -y”,
           “7zr x -bd -y”,
           “.7z”, TRUE
       }

要实现这两个功能的前提是安装了unrar和p7zip。

另外,归档管理器即file-roller,平时用Ubuntu的时候都没留意软件叫啥名字=。=!

End:其实现在的FM有两个,一个是Nautilus,一个是PCManFM。Nautilus还是很稳健的,PCManFM不熟,问题不断,果断卸之又不爽。非得折腾出个结果才罢休啊。玩的就是一个折腾……还有还有,为毛作者注释掉那段代码啊?

让文件管理器侧栏显示可挂载分区 1

Posted by Linuxtty on 二月 23, 2010

寒假一直在用Gentoo,桌面环境没太多设置,草草的解决了下Gentoo的字体设置问题,顺便装了awesome就完了。本想体验现awesome这个平铺式的窗口管理器,结果用到现在,貌似也没怎么体会到精髓处。sigh~

鉴于此,打算在开学回校之前把桌面环境弄好。就把WM切换成Openbox了,这openbox相比awesome还是很好配置的。然后装了tint2做panel,Conky沿用Ubuntu时期的配置,虽然配色和现在的壁纸看起来有点不和谐。接着问题出在了文件管理器上,pcmanfm和nautilus都试了,两者的侧栏让我感觉很不适,跟Ubuntu的效果不一样,硬盘上其他可挂载分区都没有显示出来。不能即点即挂了。这很不方便啊,不可能每次都去用命令行挂载啊>.<,改fstab开机一次全挂载上来也不爽啊,一是没必要,二还要自己建文件夹去。昨天google了半天都没结果,也没心情折腾了。

问题在绞尽脑子想的之后偏不能解决,不去想的时候解决办法就来了。无意Google了下“Gentoo 自动挂载”就出来了,先在这帖子最后一层看到引用,想着无聊,就顺路爬过去看看原始问题是怎么描述的,没想到和我碰到的问题是一样的,修改文件后重启,然后打开FM一看,哇塞,分区显示出来了XD。高兴之余再回去爬一下那帖子,发现,楼主是TX Orz…

解决方法:打开/usr/share/hal/fdi/policy/10osvendor/99-storage-policy-fixed-drives.fdi
修改:

<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->

<deviceinfo version="0.2">
<device>
  <match key="@block.storage_device:storage.hotpluggable" bool="false">
    <match key="@block.storage_device:storage.removable" bool="false">
      <merge key="storage.automount_enabled_hint" type="bool">false</merge>
      <merge key="volume.ignore" type="bool">false</merge>
    </match>
  </match>
</device>
</deviceinfo>

重启完事。:)

GReader分享到人人脚本 2

Posted by Linuxtty on 二月 17, 2010

有时候在GReader阅读的时候想分享点文章到人人,使用GReader的Send-to功能感觉颇麻烦(要不就是俺弄的Send-to设置不好),要登录到分享页,再点击次确定才完成分享。

想到之前 @shellex 猫写的 用GAE同步twitter到人人网状态 的python脚本,是否可以借用来做些修改来实现GReader分享到人人的目的?

于是乎年前几天无聊,兼python都快忘完了,就动手丰衣足食写脚本。首先是RSS解析的库,Google了下,找到了 feedparser 这个RSS解析库,官网也列出了一部分使用方法,可以满足基本需要了。

解析好RSS后剩下的功能和 @shellex 的脚本就差不多了。登录+发送状态。

其实这脚本写了两个版本,先写了个本地的,后面又改成GAE的版本=,=折腾。(一开始就弄个GAE的不就好了嘛-___-#)主要之前也写过一个类似的“登录+发送状态”的机器人,只要把RSS解析弄好就可以使用了,想着偷懒呢。

代码有一块注释没删掉,是写本地版本的时候用的登录代码。貌似在GAE上用不了。不知道是不是urllib2的缘故。Cookie和cookielib还要区分下-_____-!!

脚本同时参考了梦.:如此短暂用GAE同步twitter到人人网状态

脚本后面有过修改,就是先检查最新的分享条目,再登录人人更新,要不每次都登录多少感觉不爽。

下面丢代码:

 #!/usr/bin/env python
#coding=utf8
#
import feedparser
import urllib,urllib2,cookielib
import time
import Cookie
#from setting import app
#GAE Modules
from google.appengine.ext import db
from google.appengine.api import urlfetch
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
usr = '帐号'
passwd = '密码'
source = '[GReader分享] '
greader_url = "http://www.google.com/reader/public/atom/user%2F10398641251604775002%2Fstate%2Fcom.google%2Fbroadcast"
cookie_buf = Cookie.SimpleCookie();

class LastItemRecord(db.Model):
    id = db.StringProperty(multiline=True)
def make_cookie_header(cookie):
    ret = ''
    for v in cookie.values():
        ret += '%s=%s;' % (v.key, v.value)
    return ret
def do_redirect(url, cookie):
    result = urlfetch.fetch(
    url=url,
    headers={
    'Cookie':make_cookie_header(cookie),
    'Content-Type': 'application/x-www-form-urlencoded',
    'user-agent':'Mozilla/5.0 (Linux; U; Linux i686; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.4.2.80 Safari/525.13',},
    method=urlfetch.GET,
    follow_redirects = False,
    )
    return result
#短链接,is.gd/
def shorturl(url):
    surl = "http://is.gd/api.php?longurl=%s" %(url)
    slink = urlfetch.fetch(
    url=surl,
    method=urlfetch.GET,
    )
    result = slink.content
    return result
#格式化
def format(title,link):
    if len(link) < 60:
        status = u"[GReader分享] "+title+" "+shorturl(link)
    else:
        status = u"[GReader分享] "+title+" "+link
        #statu = status.encode('utf8')
    return status

def send_status(status,cookie):
    status_url = 'http://status.renren.com/doing/update.do'
    status_data = urllib.urlencode(
    {
    'c':status,
    'raw':status,
    'isAtHome':0,
    })
    result = urlfetch.fetch(
    url=status_url,
    headers={
        'Cookie':make_cookie_header(cookie),
        'Content-Type': 'application/x-www-form-urlencoded',
        'user-agent':'Mozilla/5.0 (Linux; U; Linux i686; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.4.2.80 Safari/525.13',
        'Referer': 'http://status.renren.com/ajaxproxy.htm'
    },
    method=urlfetch.POST,
    payload=status_data,
    )
    return 0
#def login2renren(usr,passwd):
#    verify_url = 'http://passport.renren.com/PLogin.do'
#    cookie = cookielib.CookieJar()
#    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
#    urllib2.install_opener(opener)
#    verify_data = urllib.urlencode(
#        {
#            'domain':’renren.com’,
#            'email':usr,
#            'password':passwd,
#            'origURL':’http://home.renren.com/Home.do’,
#        }
#    )
#    signin = opener.open(verify_url,verify_data)
#    print 'login'
def login2renren(usr,passwd):
    verify_url = 'http://passport.renren.com/PLogin.do'
    verify_data= urllib.urlencode(
    {
        'domain':'renren.com',
        'email':  usr,
        'password': passwd,
        'origURL':'http://home.renren.com/Home.do',
    })
    result = urlfetch.fetch(
    url=verify_url,
    headers={
        'Cookie':make_cookie_header(cookie_buf),
        'Content-Type': 'application/x-www-form-urlencoded',
        'user-agent':'Mozilla/5.0 (Linux; U; Linux i686; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.4.2.80 Safari/525.13',},
    method=urlfetch.POST,
    payload=verify_data,
    follow_redirects = False,
    )
    return result

class sync(webapp.RequestHandler):
    def get(self):
        global cookie_buf
        rss = feedparser.parse(greader_url)
        entries = rss.entries[:]
        i=0
        last_item_record = None
        #print entries[0].id
        last_item_records = db.GqlQuery('SELECT * FROM LastItemRecord')
        if last_item_records.count() == 0:
            last_item_record = LastItemRecord()
            last_item_record.put()
            last_item_record = last_item_records[0]
        if entries[0].id.encode('utf8')!=last_item_record.id:
        #login to renren
            result = login2renren(usr,passwd)
            cookie_buf = Cookie.SimpleCookie(result.headers.get('set-cookie', ''))
            callback_url = result.headers.get('location','xx');
            result = do_redirect(callback_url, cookie_buf)
            cookie_buf = Cookie.SimpleCookie(result.headers.get('set-cookie', ''))
            while i!=5 and entries[i].id.encode('utf8')!=last_item_record.id:
                status = format(entries[i].title,entries[i].link)
                send_status(status.encode('utf8'),cookie_buf)
                time.sleep(3)
                i+=1
                last_item_record.id = entries[0].id
                db.put(last_item_record)
application = webapp.WSGIApplication([('/md5sum', sync)],debug=True)

if __name__ == "__main__":
    run_wsgi_app(application)

app.yaml 限制只有管理员才能访问/md5sum

application: read2rr
version: 5
runtime: python
api_version: 1

handlers:
- url: /md5sum
script: read2rr.py
login: admin

cron.yaml 每15分钟触发一次。

cron:
- description: read2rr
url: /md5sum
schedule: every 15 minutes

回来了 4

Posted by Linuxtty on 二月 12, 2010

最后一篇日志都是去年底的了,本来想在元旦前夕写个wishlist的,结果主机遭遇不测,IP被封了。赶紧的翻墙过去上FTP,上后台,把文件和数据库都备份下来。等找到主机了再恢复。

1月份碰上期末复习,也没心情折腾。放假后弄了个ramhost的vps来用,第一次搭的时候没想到内存给弄爆了,第二次竟然在编译mysql的时候内存爆了= =悲剧之下不想再折腾,就拿来开了openvpn了事。

最近某中央把自己的blog也迁到墙外了,用的000webhost。俺也就跟风,谁知那厮竟然不让中国注册,但俺的linuxtty域名绑在账户上,又不能删除,重新注册就不能用了,悲剧。

好嘛,换个之前申请的俄国佬的。net。ru域名,还翻墙重新注册了。换了DNS准备好等待生效了。结果访问的时候,reset了,翻墙又直接访问得到。这什么事啊,都让我撞上了。后头@Ratoo童鞋提醒:”。net。ru”是关键词关键词关键词关键词关键词关键词。我/(ㄒoㄒ)/~~墙角画圈诅咒该死的GFW。

受不了了,这年三十都要来了,赶紧再找个,000webhost“温馨”提醒说,有个叫0fees的合作伙伴,如果”一时半会”账户还没生效,可以去用用他的服务。好嘛,经不起折腾了,就赶紧申请了个把blog恢复了。还算顺利,碰到点小问题,
1、要ftp链接,结果填好表单说找不到目录,在wp-config.php加了两行设置

define('FTP_CONTENT_DIR', 'wp-content的绝对路径');
define('FTP_PLUGIN_DIR', 'wp-content/plugins的绝对路径');

两个绝对路径都应该在主机后台可以看到。

2、说无法定位wp-content,就Google了下,在wp-config.php结尾前加了几行代码:

/** Override default file permissions */
if(is_admin()) {
add_filter('filesystem_method', create_function('$a', 'return "direct";' ));
define( 'FS_CHMOD_DIR', 0751 );
}

300M的硬盘空间,10G带宽,访问速度一般般,不追求啥了,赤贫有个主机落脚就满足了。:)

这段时间折腾了些东西,主要是Gentoo,昨天还弄了个GReader分享到淫淫网的脚本,过阵子再放出来吧。