Openbox 体验记

话外一下,建议用Cairo-dock替代Docky,我觉得Cairo-dock更好。

一些有用的链接见文末。

本文为了使行文生动加了好多废话,如果你是实务派,可以忽略所有有括号的文字。

零。由来

我觉得GNOME 2默认的metacity实在不怎么样,又慢又占资源,偶然在LinuxTOY上看到了Openbox的介绍PDF),感觉非常适合我等不喜欢配置的懒人(所以fvwm直接被排除),于是在安装了openbox。

作为使用X的用户,怎么能天天在dock上点终端用yum安装呢,岂不把自带的“添加/删除软件”给冷落了……

该玩意经本人测试在Fedora官方源里有。

据说在Debian/Ubuntu里面也有。

一。初识

好了,安装完成了,我们临时启动看看效果吧。

Alt+F2打开“运行”窗口,输入 openbox --replace ,回车,看看效果吧!

(最棒的是,还有一些动态效果!更多内容见链接[4])

嗯,速度貌似快了不少呢……

关于透明窗口请看《三》。

二。启动?自动的!!

嗯,安装完了,好吧,我们注销看看效果。

注:据我所知,在Fedora中的注销也会杀掉X,所以会重启X。

呃,不对,这个界面怎么看着这么面熟?好像和openbox不一样?我想想……哦!这是Gnome默认的metacity!怎么办?凉拌!只好去再次运行 openbox --replace 了……

但是每次启动运行openbox --replace 很麻烦,在.bash_profile里面写上exec openbox也不行,突然想起来改GConf就行了。

具体方法:

  1. 应用程序 > 系统工具 > 配置编辑器 (这是官方文档的习惯)
  2. 依次进入 </desktop/gnome/session/required_components/>
  3. 找到windowmanager,双击之
  4. 在“值”里输入“openbox”(不含引号)
  5. 点击确定,关闭配置编辑器

三。Dock等透明窗口怎么办?

好吧,恕我现在才讨论这个问题。

你可能早在《二》就已经发现Dock等透明窗口的背景是黑色的,而compiz漂亮的阴影效果也消失不见,这让我们既爱美又爱快的纠结用户们纠结不已——怎么办呢?(孟子曾经曰过:“鱼与熊掌不可兼得也”……啊,谁扔的西红柿!我不喜欢吃啊!)

透明问题在官方常见问答文件中简单地作了回答,大概意思是尚不支持(以后也许会是),需要借助别的东西。(“到底是个啥你快说啊!”“呃,别急,下面就说到。”)

所以我们需要借助X的东西了——xcompmgr!这个东东是X自己的,所以……它是用命令行控制的……

该包一般在源里都有。

要体验它,和openbox一样用“运行”就成。

在openbox的常见问答中,推荐命令行是这个:

xcompmgr -c -t-5 -l-5 -r4.2 -o.55

好吧,你可能会有与刚刚用openbox相同的疑惑——怎么一重启X这玩意就挂了呢?你也许会去GConf中找,很不幸,GConf中还真没有这玩意……但是作为伟大的Linux用户,怎么可能找不到这个东东呢?“启动应用程序”就是配置自启动程序的集中地。

具体方法:

  1. 系统 > 首选项 > 启动应用程序
  2. 点击 “添加 (A)”
  3. 名称可以填“让Openbox支持透明窗口”,命令就写上面的,点保存。
  4. 关闭。
  5. 之后就能看到效果了。

嗯,如果你有其他要自动启动的程序也可以用这种办法。

在我这里的问题:有时阴影重绘不到位,但我知道这只是xcompmgr的问题。

四。难道要我手动写配置不成?

“我用暗色调的GNOME主题,openbox的默认天蓝格格不入,能不能干掉它啊?”

当然啰!去改配置吧!

配置在哪里?嗯,这是个很严重的问题,我才想到那个东西是个XML文本配置文件,难道要让我们可怜的大脑记忆这么多无关紧要的东西,抑或是改一个主题都要查一个小时的手册?不行!绝对不行!

怎么办?当然咯,已经有人做了这个东西了——obconf!

安装它,就能在“系统 > 首选项 > Openbox Configuration Manager(Openbox 配置管理器)”找到了,唯一的缺点就是它还没有中文翻译,所以,凑合着用Google 翻译吧。

我用的GNOME主题是Shiki-Colors-Brave,配合Openbox主题Onyx还挺搭调的~

五。进阶内容

本部分内容不适用于初学者。

要将你的桌面彻底替换为Openbox风格,可以将GConf键值</desktop/gnome/session/default-session>改为[openbox-session]或[openbox-gnome-session]。

六。结束词

怎么样,又快又灵便的openbox就这样正式上任了,开始享受它的疾速吧!

而且,再它的配置中,我没有使用任何与终端有关的内容,不必害怕!

如果对你有任何帮助,请留言支持一下!

七。其它

一些有用的链接

[1] Openbox 官网

[2] Openbox 常见问答

[3] Openbox 指南

[4] 更多截图

声明

本文除了参考第二个链接和LinuxTOY中有关ObConf的内容以外,其他均为个人摸索。

本文不是简单地抄袭LinuxTOY,只是想给不想看长篇大论的用户一个简单的文档(我就没那个耐心)。

添加软件仓库到系统的小程序:addrepo(Fedora-Only)

代码已经推送到我的github,这里不再更新了

https://github.com/ekd123/ekode/tree/master/RepoUtilities (还有delrepo)

看ubuntu的一句话添加仓库的命令很眼红,为什么fedora没有?

为了让仓库添加更方便,我花了一个小时写了一个100行的python程序(看来我python才入门,Orz,其实都用在查找怎么下载文件上了)。

刚开始准备用shell写,刚写10行就又用Python写了(想了一会,shell基本上无力高级情况)

(比较丰富的例子,入门python可以看看~)

(本来里面用到了try..catch..,用来处理网址无效的,但是他居然说has no,一怒之下删掉了)

#!/usr/bin/python

## addrepo (GNU LGPLv3+)
## Written by Mike Ma
##
## This file can help you add a repo
## to your system

import os
import getpass
import sys
import urllib

#def var
repo_dir="/etc/yum.repos.d"
type=""
info1=""
info2=""
sfp_header="http://repos.fedorapeople.org/repos"

#def func
def show_usage():
    print ("""Usage: addrepo TYPE INFO [INFO]
TYPE:
     www       download repo from Internet.
                   info1: URL.
     sfp       standard fedora people repo. need two information
                   info1: group name.
                   info2: software name.
     fp        fedora people repo. need two information
                   info1: The username in FedoraPeople.
                   info2: repo file name. (no .repo)""")

def download_by_url(url,filename):
    print ("downloading " + url + " to " + filename)
    data = urllib.urlopen(url).read()
    f = file(filename,"w")
    f.write(data)
    f.close()
    print (data)
    print ("Done. Please check the file (if it's wrong, please delete that file and try the correct URL again)")

def check_http_and_add(url):
    if url.find("http://") == -1:
        return "http://" + url
    return url

def get_filename_from_url(url):
    arr=url.split("/")
    return arr[len(arr)-1]

def check_string(sstr):
    if sstr==None: return False
    if sstr==""  : return False
    return True

def show_error_and_exit_info():
    print ("information is invalid!")
    exit(-1)

# is it fedora?
if os.path.exists("/etc/fedora-release") == False:
    print ("You must run addrepo in Fedora");
    exit(-1)

# arg...
if len(sys.argv) < 3:
    show_usage()
    exit(-1)
if len(sys.argv) > 4:
    print ("Too many arguments")
    show_usage()
    exit (-1)
# is it root?
if getpass.getuser() != "root":
    print ("You must run addrepo as root")
    exit(-1)
# check dir
if os.path.exists(repo_dir) == False:
    print ("Can't find "+repo_dir)
    exit(-1)

############################################
type = sys.argv[1]  # doesn't need to check
info1 = sys.argv[2]
if check_string(info1) == False: show_error_and_exit_info()
if len(sys.argv) == 4: info2 = sys.argv[3]
if check_string(info2) == False: show_error_and_exit_info()

if type == "www":
    print ("Type: Repo from Internet")
    info1 = check_http_and_add(info1)
    download_by_url(info1, repo_dir + "/" + get_filename_from_url(info1))
    exit (0)
elif type == "sfp":
    print ("Type: Standard Fedorapeople.org Repo")
    url = sfp_header+"/"+info1+"/" + info2 + "/fedora-"+info2+".repo"
    download_by_url(url, repo_dir + "/" + get_filename_from_url(url))
    exit (0)
elif type == "fp":
    print ("Type: Non-standard Fedorapeople.org Repo")
    url = "http://"+info1+".fedorapeople.org/"+info2+".repo"
    download_by_url(url, repo_dir + "/" + get_filename_from_url(url))
    exit (0)
else:
    print ("Invalid type")
    show_usage()
    exit (0)

把它丢在/usr/bin下面,命名为addrepo,然后chmod +x addrepo就能用了。

有了这个东东,你就可以这样添加iceplayer的RPM源:

addrepo sfp zhtx iceplayer

(已死,别用)

这样添加chromium源:

addrepo sfp spot chromium

这样安装163源:

addrepo www mirrors.163.com/.help/fedora-163.repo
addrepo www mirrors.163.com/.help/fedora-updates-163.repo

(这里有自动判断有无http://功能)

哇咔咔,很方便吧?

其实我最大的希望是让这个东东成为Fedora的预装组件

如果有py大牛,修改了一定要给我说说啊,我当然也想用更好的~

PS:如果你在非Fedora的Linux上使用,结果会是……嘿嘿

Emacs中的K&R C风格设置

最近开始用emacs了,可是被这个问题困扰,就是我一般这样输入C代码

int foo(int x)
{
    int y, z;
    if( x < y )
        return y-x;
    else if ( x == y )
        return 0;
    else
        return x-y;
}

可是emacs就非得给我格式化成

int foo(int x)
    {
      int y, z;
      if( x < y )
        {
          return y-x;
        }
      else if ( x == y )
        {
          return 0;
        }
      else
        return x-y;
    }

后来一查,原来我一般用的就是K&R风格,而Emacs默认是GNU风格,在emacs的手册上找到了解决方法,自我发挥一下,就彻底解决这个问题了:

$ emacs ~/.emacs

追加如下代码:

;; c code indentation
(setq c-default-style
    '((c-mode . "k&r") (other . "gnu")))
(setq c-basic-offset 4)

现在就找回熟悉的自我了smiley

 

图说《中标普华Linux 5 桌面版》

安装环境技术参数:

虚拟机:Oracle VirtualBox 3.2.8 r64453

OS类型:Linux 2.6

虚拟盘:8Gb

虚拟内存:512Mb

颜色位:16位

中标普华Linux桌面 5 技术参数:

内核版本:Linux 2.6 (子版本不详)

桌面环境:GNOME (版本不详,应为2.x)

安装包数:1354个 (含编程工具)

安装时间:超漫长(于虚拟机,技术参数见上)

含软件数:普通(可满足一般使用)

软件最新:否(如Firefox仅仅3.0.15版)

是否可用:初步,完全需个人配置

是否支持KDE:否

中文支持:完整,但Flash中文不显示bug未处理

包管理器:yum

(* 因官方未提供技术参数,以上纯属个人测试得到,如不对请告知 *)

详图(点击图片放大):