对UNITY不满意?那就自己开发个DE玩。完整记录我自己开发+搭配的linux环境,个人认为是一个简单的DE。

各种窗口管理器和美化相关
回复
头像
ljj_jjl2008
论坛版主
帖子: 14255
注册时间: 2007-09-16 8:29

对UNITY不满意?那就自己开发个DE玩。完整记录我自己开发+搭配的linux环境,个人认为是一个简单的DE。

#1

帖子 ljj_jjl2008 » 2012-04-10 16:23

2012.04.28,rc1发布。由于这个帖子太长了,发布到另一个帖子了。
http://forum.ubuntu.org.cn/viewtopic.php?f=1&t=372366
ubuntu公开发行的有4种DE:UNITY(默认)、KDE(KUBUNTU默认)、XFCE4(XUBUNTU默认)、LXDE(LUBUNTU默认)
除此之外,ubuntu源里面有几十种wm(窗口管理器)、panel(面板)等,可以搭建不同环境,感兴趣的可以看我签名。
我将这些全部折腾一遍以后,终于感觉这些不能满足我的胃口了,于是决定:自己搭配一个DE环境。
但是,我对C/C++几乎一窍不通(我学的是pascal/basic),虽然linux是开源的,但是我看不懂源码,也是白费。

后来,我还是终于忍不住了,开始尝试看源码,学编程,然后发现:其实不难,只要稍微会一点编程,就可以做搬运工,学习蚂蚁搬家,东被西凑的做东西。结合以前的折腾,和东拼西凑的开发,我自认为我做出来了一个新的DE。本文是为了将我折腾的结果完成记录下来,以便以后万一出现问题时,可以重新恢复成现在的样子,也可以方便别的喜欢折腾的筒子们,共同折腾。
抓图209.png
这是折腾后的最终界面。有点像unity,但绝对不是unity,风格用法上,有很大区别的。下面分头介绍各种部件:

一、核心部件之“wharf”:
icon-DE(2012.04.26).tar.gz
beta3版本,基本稳定,已经可用。
框架已定局,不会再有大框架的改动了
已经添加了“desktop”模块,脱离了“神之脚本”
(601.23 KiB) 已下载 291 次
1,软件来源:
2,界面
3,特色
4,配置方法
5,缺陷

1,软件来源:
我的这个Wharf是参照puppy iconmenu开发的,我把wmctrl(一个控制窗口的命令行)的源码又加到了里面。
引用的源代码:puppy iconmenu(显示界面)、wmctrl(控制窗口)。
wharf是afterstep应用程式的停靠站,以驻列的icon来表示即将想要执行的程式,按滑鼠的左键来启动应用程式,按滑鼠的右鍵可以将整排驻列收成一个icon。按键列上的每一个button也可以是一个folder,也就是说,当你点选这个button之後,实际上是内含了一排button可以点选,就有如抽屉一般。
Fvwm也有fvwmwharf,这个和afterstep的wharf一样的,正因为有这个,fvwm模拟afterstep就非常的容易。
可是这两个Wharf都是不能独立运行的,需要先启动起来afterstep及Fvwm,不能在其他Window manager里面运行。
另外,wmaker也有wharf,是通过dockapp实现的,常用的是wmdrawerrc,有兴趣的可以尝试一下,不过他通用行也不强,主要也是在Fvwm、Afterstep、wmaker里面用。
我曾经尝试使用这几种WM,感觉虽然不是十分喜欢他们的WM,但是较喜欢这种Wharf,希望他能够在其他Window manager里面运行。一开始的思路是找到afterstep及Fvwm的源程序,看看能不能把Wharf部分单独“抠”出来,做一个独立的包,研究以后发现凭我的能力,基本做不到。
unity的侧边栏,也是类似wharf的风格,只是它没有folder,而且还能用来切换已经打开的程序。
正在我要灰心时,我找到了下面的网址:
http://www.murga-linux.com/puppy/viewtopic.php?t=4407
据说在puppy环境下仿照afterstep的wharf开发的,不过它是2005年发布的,基于puppy的。
他需要imlib2和PuppyBasic,我下载了他的安装包,在puppy内安装使用,效果一般,而且中文乱码。
然后发现他有源程序,C语言配合Basic开发的,我把basic语言的部分用c重写,添加了若干功能,模仿unity加入了对窗口的控制,经过多次改版,把feh、wmctrl的源码也引用了进去,形成了现在的样子。
这个wharf,是综合aftersetp、wmaker、unity侧边栏3者做出来的,可以有folder按钮,也可以有unity那种直接打开程序的按钮,还可以插入wmaker和afterstep的dock,也能像unity一样来控制程序窗口。
2,界面:
界面的说明:
这个Wharf由4部分组成:主icon(图中的那一个“笑脸”图标)、2级icon(竖直排列的方形图标)、3级icon(水平排列,图中未展示),和dock(小鸭子那个)。
(1) 主icon上的操作(由配置文件设置,会有所变化):
a、软件启动起来以后显示的只有主icon,
b、鼠标(点击/划过)他可以(显示/收起)竖直的那一列icon,
c、右键点击重新调入配置文件。
d、中键点击关闭当前程序窗口。
e、中键滚动,轮转切换当前窗口。
f、鼠标指向并停留,可以出现一个提示,展示系统情况(内存、cpu、进程信息,可以通过配置文件关闭)
g、主icon旁边显示一个时钟。(这不单单是个时钟,还有其他功能,下面有说明。)

(2)2级icon上面的操作:
a、(点击/划过)后可以展开对应的 3级icon,或者直接打开对应程序(由配置文件决定)
b、右键关闭2级icon(由配置文件决定)。
c、独立icon上滚轮,将图标对应文件提上到最上面并激活。同时有可能关闭2级icon(配置文件决定)。
d、folder上滚动鼠标,可以轮转切换显示窗口标题,离开这个icon是,切换到指定窗口。
e、独立icon上中键点击,调用alltray/kdocker/或没有任何作用(配置文件决定)
f、滚动鼠标滚轮,或左键点击,执行完其他操作后,有可能顺便关闭2级/3极icon(由配置文件决定)

(3)3级icon上面的操作:
a、点击直接打开对应程序。
b、右键关闭3级icon(也有可能关闭2级icon,由配置文件决定)。
c、滚轮,将以前打开的对应程序窗口,提上到最上面并激活,再滚动则将窗口调整为指定大小和位置(配置文件指定)。再次滚动则关闭3级icon。
d、3级icon上中键点击,调用alltray/kdocker/或没有任何作用(配置文件决定)
f、滚动鼠标滚轮,或左键点击,执行完对应操作后,会关闭3级icon(也有可能关闭2级icon,由配置文件决定)

(4)黄色时钟上面的操作:
a、左键点击去除所有窗口的标题和边框(并重新调入配置文件)。
b、右键点击恢复所有窗口的标题和边框(并重新调入配置文件)。
c、滚轮,轮转出现:窗口水平平铺--->竖直平铺--->全屏(只支持2个窗口、3个窗口、4个窗口,由配置文件决定平铺方式)
d、中键点击,时钟下移50像素,再中键点击恢复原位。
e、最多可以定义3个闹钟提醒。

(5)dock插件上面的操作:
a、如果处于自动隐藏状态,鼠标指向dock插件的右边缘,可以显示/隐藏dock窗口。
b、鼠标指向/点击dock,则执行dock本身的正常功能(控制权交给dock程序)
c、本软件实质是启动dock进程,然后“抓住”dock窗口的id,把他“装进”我的框架里面,让dock程序听我的智慧。由于dock程序不是自己开发的,所以不一定没一次都能“抓住”dock窗口的id,并封装成功。如果失败,本程序会反复尝试(最多尝试10次)。
d、自动隐藏/显示dock窗口稍微有点迟钝,有时需要多实验几次才能有反应。

3,特色:
(1),3层icon设计,容量大。方便分类查找打开软件,且解放桌面。
(2),通过配置文件来设计icon所打开的程序,可以将网页、文件目录、单个歌曲、没有图形界面的命令等,设计进起动器里面,方便灵活。
(3),可以设置icon的大小。可以人为设定包括主icon在内的所有icon(由配置文件决定)。可以自定义背景图片(通过覆盖图片文件,png文件,支持透明背景)。
(4),可以重新调入配置文件(右键点击主icon)。
(5),依赖少(imlib2、glib、xlib、xmu),可以独立运行于绝大多数主流WM和DE环境。
(6),可以在2级icon中直接放进去独立icon。
(7),主icon有3种隐藏方式:不隐藏、贴左边全隐藏、贴左边半隐藏(由配置文件决定)。
(8),2级icon(包括dock插件)也有3种隐藏方式:不隐藏、贴左边全隐藏、贴左边半隐藏(由配置文件决定)。
(9),可以鼠标划过即打开2级icon、3级icon,也可通过点击来打开(由配置文件决定)。
(10),主icon旁边显示一个小数字时钟。
(11),指向主icon,会出现一个提示窗口,显示现在的系统信息(cpu、内存、进程状况),离开后消失(可通过配置文件取消)。
(12),打开程序和切换窗口用同一个界面,可以快速将程序窗口提升至上层并获得焦点。
(13),本DE配备有面板,面板集成有托盘(tray)。而且托盘特意设计在面板左边,使鼠标活动区域集中在左侧。
(14),切换程序窗口方式多样:窗口直接轮转(主icon滚动鼠标)、窗口间接轮转(2级floder的icon滚动鼠标)、直接快速定位(2级独立icon和3级icon滚动鼠标)、鼠标点击trayer托盘图标切换(启用alltray/kdocker后)、单击面板活动窗口列表来切换。
(15),实现了程序快速打开、快速切换、快速关闭(鼠标中键点击主icon)
(16),可以自动通过(在wharf图标上面)滚动鼠标,自动调整窗口位置和大小。
(17),实现了简单的“平铺”功能,可以消除窗口标题边框并平铺。(在“时钟”上操作,平铺方式通过配置文件决定)
(18),实现了对wmaker、afterstep的dock插件的支持,可以借用他们的插件来丰富界面和功能。
4,关于“平铺”功能的说明:
1,“平铺”功能,发现我水平实在有限,反复写语句也不出很好的效果窗口的位置总是算不准。后来于是我偷懒了,直接把窗口位置写到了配置文件的参数里面,通过调整配置文件来修改“平铺”的位置和效果。只要配置文件写的好,也可以出很好的效果了。这就为配置文件增加了难度。并有可能需要反复实验。(主icon上右键点击来调入新配置文件,配置文件是~/.icon-DE/clock.rc)
2,由于水平问题,现在只能在同时打开2-4个窗口时,实现“平铺”。超过4个窗口,“平铺”功能将不会起作用。

5,配置方法:

(1)主要文件和目录结构:

代码: 全选

~/.icon-DE #(配置文件必须放到~/.icon-DE目录,可执行文件也可以当道/bin目录)
├── bin
│   ├─ other_scr(里面存放引用的“wmctrl”、“feh”的源码。)
│   │     └......
│   ├── icon-wharf.c #(这是主程序,启动方式见下文)
│   ├── iconrun1 #主icon
│   ├── iconrun1.c
│   ├── iconrun2  #2级icon
│   ├── iconrun2.c
│   ├── iconrun3  #2级icon
│   ├── iconrun3.c
│   ├── iconrun4  #这是桌面icon
│   ├── iconrun4.c
│   ├── icon-clock  #(时钟程序,且通过他实现“平铺”)
│   ├── icon-clock.c
│   ├── icon-panel #(面板程序)
│   ├── icon-panel.c
│   ├── icon-dock  #(wmaker的dock插件“容器”)
│   ├── icon-dock.c
│   ├── icon-desk  #(桌面管理)
│   ├── icon-desk.c
│   ├── iconweather  #天气预报
│   ├── iconweather.c
│   └── Vera.ttf
├── iconcache
│   └── ...
├── icons
│   ├── background.png
│   └── ...
├── menu.rc #(这是wharf的配置文件,请根据你的情况修改)
├── panel.rc #(这是panel的配置文件,请根据你的情况修改)
├── clock.rc #(这是“时钟/平铺效果”的配置文件,请根据你的情况修改)
├── desk.rc #(桌面、壁纸、天气预报的配置文件,请根据你的情况修改)
└── pics
    └──  background.png(背景图片)
配置文件menu.rc的内容:

代码: 全选

##建议安装wmctrl。
#配置文件每行长度,不要超过1024字符。
#---------------------------------------------------------------------------------------------------
# Base-configuration:
#
# baseconfig:x y sizeOfMainIcons GapBetweenMainIcons sizeOfSubmenueIcons GapBetweenSubIcons  Lowered/Raised(0/1)  MainIconHidesAutomatically(0/1/2) SubIconHidesAutomatically(0/1/2) MouseMoveOpenSubIcon(0/1/2)
# baseconfig:x y sizeOfMainIcons GapBetweenMainIcons sizeOfSubmenueIcons GapBetweenSubIcons  Lowered/Raised(0/1)  MainIconHidesAutomatically(0/1/2) SubIconHidesAutomatically(0/1/2) MouseMoveOpenSubIcon(0/1/2)
# baseconfig:后面是基本配置,空格分割的一串数字,分别是:
# (x)(y)(1/2级icon尺寸)(1/2级icon间隔)(3级icon尺寸)(3级icon间隔)(是否长局顶层0/1)(主icon隐藏方式0/1/2)(2级icon隐藏方式0/1/2)(2级/3级icon显示隐藏方式)
baseconfig:0 100 64 0 64 0 1 2 2 2 
# baseconfig:第(1-6)个参数决定图标的位置和大小
# baseconfig:第(7)个参数决定图标局底层还是顶层
# baseconfig:第(8)个参数决定主icon隐藏方式(0/1/2):0,不隐藏  1,贴左边完全隐藏  2,贴左边半隐藏
# baseconfig:第(9)个参数决定2级icon隐藏方式(0/1/2):0,不隐藏  1,贴左边完全隐藏  2,贴左边半隐藏
# baseconfig:第(10)个参数 打开2级icon/3级icon的方式(0/1/2):0,鼠标单击打开,再单击收起   1,鼠标划过打开,打开程序收起2级icon/右键收起2级icon  2,第一次鼠标划过主icon打开2级icon,打开程序不收起2级icon,右键不收起2级icon
# 千万注意:主icon隐藏方式(0/1/2)和 2级icon隐藏方式(0/1/2)不是 0 时,X(第一个参数)需要设置成较小的数字,否则图标乱跳动

run:xfwm4 &
run:~/.icon-DE/bin/icon-panel &
run:sleep 3 && iptux &
run:sleep 3 && klipper &
#run:是wharf启动时同时启动的命令行,直接写命令,不要加“引号”。可以写多行。
#run:里面的程序,如果需要延迟启动(比如需要先启动trayer,过3秒再启动其他需要在托盘显示图标的程序),则需要用下列方式写命令)
#run:sleep 3 && klipper &


show_sys_inf:0
#show_sys_inf:表示鼠标指向主icon时,是否显示系统负载信息。

skip:ps panel.trayer xfce4-panel.Xfce4-panel panel.lxpanel xfce4-notifyd.Xfce4-notifyd docker.Docker
#skip:表示这些类型的窗口,主icon滚动鼠标时“跳过”。窗口类型用"wmctrl -l -x" (不包括双引号)命令来查询。

windows_where:0,32,0,990,740
#windows_where:确定窗口最优的位置大小,<gav>,<X>,<Y>,<W>,<H>分别是(wm参数)(x坐标)(y坐标)(宽度)(高度),在3级icon或2级独立icon上面连续滚动鼠标,窗口将变成指定的位置和大小。
#第一个参数要设置为0,即让wm自己决定移动窗口的方式。
no_bord_where:0,32,0,990,760
#这是“无标题无边框”状态下的窗口最优大小和位置,比上面的可以稍微大一些。

#------------------------------------------------------------------
# Mainbutton
#这是主icon的图标,1个参数
group0# /usr/share/icons/oxygen/48x48/emotes/face-smile.png

#这是插入的wmaker dockapps。参数是:(dock标题)(dock命令行)(dock命令参数)(x坐标微调)(y坐标微调)
#dock标题 请用wmctrl -l查询
dock1# "bubblefishymon" "bubblefishymon" " " 0 0

#这是独立2级icon,4个参数,分别表示:(图标)(命令行)(tag提示)(title定位用的标志文字),注意双引号配对。
single2# /usr/share/icons/hicolor/48x48/apps/chromium-browser.png  "chromium-browser" "chromium-browser" "- Chromium"

#这是floder类的2级icon,2个参数,分别表示:(图标)(tag提示)
group3# /usr/share/icons/oxygen/48x48/places/folder-favorites.png "文件浏览/位置"

#这是3级icon,4个参数,分别表示:(图标)(命令行)(tag提示)(title定位用的标志文字),注意双引号配对。
/usr/share/icons/oxygen/48x48/places/user-home.png "dolphin ~/" "个人目录" "– Dolphin"
/usr/share/icons/oxygen/48x48/places/folder-blue.png "dolphin /" "/ 根目录" "– Dolphin"
/usr/share/icons/oxygen/48x48/places/user-desktop.png "dolphin ~/Desktop/" "桌面" "– Dolphin"
....
配置文件:clock.rc

代码: 全选

#下面的是为“平铺”功能设计的参数,一共9组。
#这是(2)个窗口平铺,方案(1)里面,第(1)个窗口的位置。
Tiling_window02_1_1:0,32,0,990,380
#这是(2)个窗口平铺,方案(1)里面,第(2)个窗口的位置。
Tiling_window02_1_2:0,32,380,990,375

#这是(2)个窗口平铺,方案(2)里面,第(1)个窗口的位置。
Tiling_window02_2_1:0,32,0,495,760
#这是(2)个窗口平铺,方案(2)里面,第(2)个窗口的位置。
Tiling_window02_2_2:0,527,0,495,760

#这是(2)个窗口平铺,方案(3)里面,第(1)个窗口的位置。
Tiling_window02_3_1:0,32,0,495,760
#这是(2)个窗口平铺,方案(3)里面,第(2)个窗口的位置。
Tiling_window02_3_2:0,527,0,495,760

#这是(3)个窗口平铺方案(1)里面第(1)个窗口的位置。
Tiling_window03_1_1:0,32,0,990,380
#这是(3)个窗口平铺方案(1)里面第(2)个窗口的位置。
Tiling_window03_1_2:0,32,380,495,375
#这是(3)个窗口平铺方案(1)里面第(3)个窗口的位置。
Tiling_window03_1_3:0,527,380,495,375

#这是(3)个窗口平铺方案(2)里面第(1)个窗口的位置。
Tiling_window03_2_1:0,32,0,495,760
#这是(3)个窗口平铺方案(2)里面第(2)个窗口的位置。
Tiling_window03_2_2:0,527,0,495,380
#这是(3)个窗口平铺方案(2)里面第(3)个窗口的位置。
Tiling_window03_2_3:0,527,380,495,375

#这是(3)个窗口平铺方案(3)里面第(1)个窗口的位置。
Tiling_window03_3_1:0,32,0,495,760
#这是(3)个窗口平铺方案(3)里面第(2)个窗口的位置。
Tiling_window03_3_2:0,527,0,495,380
#这是(3)个窗口平铺方案(3)里面第(3)个窗口的位置。
Tiling_window03_3_3:0,527,380,495,375

##可能需要反复实验才能找到满意的平铺位置。修改参数后,在主icon右键点击调入新配置才能生效。
#以下是4个窗口的平铺位置。
Tiling_window04_1_1:0,32,0,1248,505
Tiling_window04_1_2:0,32,505,624,505
Tiling_window04_1_3:0,656,505,624,253
Tiling_window04_1_4:0,656,758,624,252

Tiling_window04_2_1:0,32,0,624,1010
Tiling_window04_2_2:0,656,0,624,350
Tiling_window04_2_3:0,656,352,624,350
Tiling_window04_2_4:0,656,704,624,350

Tiling_window04_3_1:0,32,0,624,550
Tiling_window04_3_2:0,32,550,624,550
Tiling_window04_3_3:0,656,0,624,550
Tiling_window04_3_4:0,656,550,624,550

Alarm1:11:43 午饭时间 1
Alarm2:17:28 下班回家 1
Alarm3:20:45 测试 0
#这是3个闹钟,最后一个(0/1)是开关。
以下是配置文件:panel.rc

代码: 全选

#配置文件每行长度,不要超过1024字符。
#“fc-list :lang=zh-cn|sed s/:.*//” 的中文字体结果。
fonts:WenQuanYi Zen Hei-8
height:18
以下是配置文件:desk.rc

代码: 全选

#配置文件每行长度,不要超过1024字符。
#weather:x y width height 天气预报出现位置和大小
weather_xywh:200 100 128 256 
# url天气信息网址
weather_url:http://qq.ip138.com/weather/shandong/YuCheng.wml
#icon:x y w h icon_file cmd tag 桌面图标
icon:700 520 64 64 /usr/share/icons/hicolor/48x48/apps/chromium-browser.png  "chromium-browser" "chromium-browser"
icon:900 790 64 64 /usr/share/icons/hicolor/48x48/apps/ip-tux.png "iptux" "iptux"
icon:1000 360 64 64 /usr/share/yozofileicon/yozoicon.png "/usr/bin/yozo" "永中 office"
icon:960 500 64 64 /usr/share/icons/hicolor/48x48/apps/okular.png "okular" "okular 工具"
#wallpapers:壁纸文件

#时间间隔(分钟)
time_for_change:10
# 居中(0/1) 
centered:0
#缩放(0/1) 
scaled:1
#充满(0/1/2)
filled:0
wallpapers:/usr/share/wallpapers/Aghi/contents/images/1280x1024.jpg
wallpapers:/usr/share/wallpapers/Air/contents/images/1280x1024.jpg
wallpapers:/usr/share/wallpapers/Atra_Dot/contents/images/1280x1024.jpg
wallpapers:/usr/share/wallpapers/Autumn/contents/images/1280x1024.jpg
wallpapers:/usr/share/wallpapers/Beach_Reflecting_Clouds/contents/images/1280x1024.jpg
wallpapers:/usr/share/wallpapers/Blue_Curl/contents/images/1280x1024.jpg
wallpapers:/usr/share/wallpapers/Blue_Wood/contents/images/1280x1024.jpg
wallpapers:/usr/share/wallpapers/Chess/contents/images/1280x1024.jpg
wallpapers:/usr/share/wallpapers/City_at_Night/contents/images/1280x1024.jpg
wallpapers:/usr/share/wallpapers/Code_Poets_Dream/contents/images/1280x1024.jpg
wallpapers:/usr/share/wallpapers/Colorado_Farm/contents/images/1280x1024.jpg

(2)配置方法:修改menu.rc、 替换icons目录 background.jpg文件即可
注意:
a、icon图标文件名和路径区分大小写,要完整和准确。
b、各部分的参数要写全,空格分割,可以双引号引起。
c、“标题信息”这个参数,是用来实现“在icon上滚动鼠标时,自动将已经打开的程序提升到前台”的功能的,最好打开程序看看标题栏,写上其中最有代表性的一部分。
(3)程序启动:

注意:下面这个包里面缺少中文字体,需要自己复制一个字体到bin子目录并改名为: Vera.ttf(因为字体文件太大,打包进来就无法上传了)

下载,解压到~/.icon-DE,
然后修改menu.rc务必要配置这个文件,否则可能无法启动
修改其他配置文件。
替换icons目录 background.png文件(可选)
拷贝一个中文字体到:~/.icon-DE/bin/,改名为Vera.ttf(否则不能显示提示文本
最后执行以下指令:

代码: 全选

cd ~/.icon-DE/bin/
./icon-DE INIT
6,缺陷
(1),打开2级icon/3级icon的方式(0/1/2)选择1和2时,如果鼠标移动速度太快,显示的图标会错乱,可能上一行3级icon没有消失,本行的已经显示出来了,也可能一行图标显示不全,中间缺几个。移动的慢点就没事了。

7,如何编译软件
我已经编译成二进制包了。大家如果想自己编译,则:
请安装编译工具包(build-essential),和libimlib2-dev、libxmu-dev、libglib2.0-dev、giblib-dev、libcurl4-gnutls-dev 然后:

代码: 全选

cd ~/.icon-DE/bin/
g++ -o ./icon-wharf ./icon-wharf.c  -lX11
g++ -o ./iconrun1 ./iconrun1.c  -lImlib2 -lX11 -lXmu `pkg-config --cflags --libs glib-2.0`
g++ -o ./iconrun2 ./iconrun2.c  -lImlib2 -lX11 -lXmu `pkg-config --cflags --libs glib-2.0`
g++ -o ./iconrun3 ./iconrun3.c  -lImlib2 -lX11 -lXmu `pkg-config --cflags --libs glib-2.0`
g++ -o ./iconrun4 ./iconrun4.c  -lX11 -lImlib2
g++ -o ./icon-clock ./icon-clock.c  -lImlib2 -lX11 -lXmu `pkg-config --cflags --libs glib-2.0`
g++ -o ./icon-dock ./icon-dock.c  -lImlib2 -lX11 -lXmu `pkg-config --cflags --libs glib-2.0`
sudo ln -s /usr/include/freetype2/freetype/ /usr/include/freetype
g++ -o ./icon-panel ./icon-panel.c  -lX11 -lXft  `pkg-config --cflags --libs glib-2.0`
g++ -o ./iconweather ./iconweather.c -lX11 -lImlib2 -lXmu  `pkg-config --cflags --libs glib-2.0` 
sudo apt-get install giblib-dev libcurl4-gnutls-dev 
g++ -o ./icon-desk ./icon-desk.c -lXinerama -lXft  -lX11 -lImlib2 -lXmu  `pkg-config --cflags --libsib-2.0` `giblib-config --cflags --libs` -lcurl -lpng
编译时有一些警告,不用理他。

二、核心部件之“桌面”:
一个漂亮的桌面,至少是漂亮的壁纸,是很重要的。
我承认,这一方面,我仿照“ee大神”的劳动成果,然后根据我的需要,又借用feh的代码,开发了一个icon-desk,和两个配套软件(桌面图标iconrun4,天气预报iconweather)。
1,壁纸来源:

代码: 全选

sudo apt-get install kde-wallpapers,kde-wallpapers-default,plasma-wallpapers-addons
我采用的是kde的壁纸库,安装以上3个包(会依赖kde的其他包,比较大呀!!!)后,会在/usr/share/wallpapers/下面形成52个子目录,完整壁纸文件路径类似于:/usr/share/wallpapers/Aghi/contents/images/1280x1024.jpg,其中除了中间“/Aghi/”一段外,会完全相同(文件类型可能不同,有jpg和png两种),这为脚本开发,为自动轮流显示桌面提供了便利。
2,如何显示和更换壁纸?

参考了ee天气脚本的思路:http://forum.ubuntu.org.cn/download/file.php?id=150124

为了实现桌面管理,开发了3个程序,icon-desk负责读取配置文件和换壁纸、更新天气,iconrun4和iconweather负责产生icon图标和天气预报窗口。
每个图标实际上都是一个小程序窗口,而天气预报实际上也是一个窗口(无边框、永远在底层、所有桌面都可见),不过背景就是“截取”的下面壁纸的图片,实现了“假透明”效果。

但是这需要WM(窗口管理器)的支持了。

后来发现:这个必须要等窗口管理器启动以后再启动再启动才行。已经发现:
这个桌面,在kwin、matecity、mutter、xfwm4、sawfish、jwm、fvwm、pekwm里面正常。
在compiz、blackbox、oroborus里面异常。
openbox里面,obconf配置“dock”项,把dock配置成“允许在上面,也允许在下面”,就好了。
不知道blackbox、oroborus、compiz里面,有没有类似选项。正在研究。
(现在我已经把openbox针对本DE做了对应修改,但是我还不会打包,暂时无法上传。等RC版发布时,会带上这个改造过的openbox)

这个有配置文件,格式在本文前面部分已经介绍。

三、核心部件之panel面板:
这个是我以本论坛一个帖子提供的panel:
http://forum.ubuntu.org.cn/viewtopic.ph ... &p=2235611
这是一个中文支持的fspanel的副本,他与fspanel的区别:
1,他支持中文。
2,他是黑色主题的。
3,高度只有15像素。而且task里面没有图标。
4,我增加一个配置文件(panel.rc),来配置“字体”和“高度”。
系统托盘(tray)是复制的一个叫docker的tray托盘程序的原码。下面是docker的原码,供大家参考。
http://dockapps.windowmaker.org/file.php/id/251
这个面板我起名叫:icon-panel,也放在23号以后的压缩包里面了。

特点:1,很窄,基本不占空间;2,tray在左边,离wharf近,方便操作。
其实功能很简单。我花了3天时间做出来的。


四、应用程序的搭配:
1,如何找到程序的命令行和图标:
a,新立得里面过滤找到已经安装的程序,右键菜单----属性----已安装的文件,里面在/bin和/usr/bin里面的就是命令行,在usr/share/pixmaps/和/usr/share/icons/(及其子目录)下面的,就是图标。复制,然后粘贴到配置文件中,就不容易出错了。也可以在文件管理器中“复制”图标文件,然后直接粘贴到文本编辑器中,再去掉“file://”的前缀,就可以了。
b,我将程序按使用频率分成了三种:开机后需要自动启动的(写到配置文件run项里面)、经常使用的(写到2级菜单的独立菜单里面,配置文件的single项)、偶尔使用的(写到3级菜单里面)。
c,我将程序按照功能用途,分成8类:文件/位置、网络、办公、图形图像、开发、工具、配置维护、娱乐游戏。分别建立了folder项(配置文件的group项),每种下面选择了3-6个程序。
d,因为我用的kde壁纸,已经安装了大量kde程序,另外我发现kde的附带文件组合比较好用,所以我选择了kde附件为主的程序组合。

2,我已经选择使用的程序:
开机启动的程序:icontask(自己开发的面板)、iptux(信使)、klipper(kde剪贴板)、fcitx(输入法)。
主要使用的:chromium
其他:
文件浏览/位置:(使用dolphin作为文件浏览器),个人目录、/ 根目录、桌面、下载、root权限文件浏览(kdesudo dolphin)
互联网/网络:chromium-browser、krdc 远程链接、iptux(信使)
办公/图形:永中office2012个人版、libreoffice、okular 工具(看pdf的)
图形图像:ksnapshot屏幕截图、kde 绘图、gwenview 看图、gimp
工具/开发:geany、root 权限打开 geany、kate、
工具:ark 压缩/解压、kcalc科学计算器、dmenu 起动菜单
配置维护:kde 终端、partitionmanager(kde 磁盘分区工具")、palimpsest(gnome 磁盘工具)新立得软件包管理、systemsettings(kde 系统设置)
娱乐/游戏:Dragon 媒体播放、kpat(kde的牌类游戏)

3,其他可供选择使用的程序:
关于程序的组合的建议:建议不要自己组合了,而是主要选取开篇提到的那4个DE里面已有的组合为主,加上一点其他自己想用的程序。因为这4大DE里面的程序,在自己的文件管理器里面,已经和文件类型建立了关联。否则,就需要自己修改文件关联,是很麻烦的。比如文件管理器选择了gnome/unity的nautilus,但是文本编辑器选择了kde的kate,那么文件管理器点击打开txt文件时,很可能用gedit自动打开了。
1.文件管理器:Thunar、pcmanfm、nautilus、dolphin、rox-filer
2.网络浏览器: Midori、chromium(chrome)、firefox
3.音乐/视频播放器:Xfmedia、totem、smplayer、
4.看图/截图/编辑图:Ristretto、gpicview、gwenview/KSnapshot
5.文本编辑器:Mousepad、Leafpad、gedit、kate......
6.终端程序:Xfce Terminal、
7.程序开发:geany、vim/gvim、eclipse
8.工具:ark、7zip、
KDE程序列表
GNOME程序列表

五、WM(窗口管理器):
kwin、metacity、xfwm4全部正常,很完美。sawfish基本正常,偶尔有小缺陷。

(现在我已经把openbox针对本DE做了对应修改,但是我还不会打包,暂时无法上传。等RC版发布时,会带上这个改造过的openbox)

其他WM不能完美配合(大大小小的缺陷):
openbox:dock异常(研究发现,这是和openbox一个功能冲突,openbox自身能管理dock,所以我的程序就不能管理dock了。看来pekwm、blackbox、都是这样)
pekwm:dock装入后跑到右边,变成了一种面板。
jwm:dock反复装入(已经调入程序内部,但是有关闭后重新调入,看来可以通过修改dock模块解决)
mutter:dock反复装入(已经调入程序内部,但是有关闭后重新调入,看来可以通过修改dock模块解决)
fvwm:dock调入后不能出现画面。
icewm:切换壁纸时花屏了,dock不能装入。(放弃这个WM,以后不再对其进行测试了。)
blackbox:天气和桌面icon跳到了上层来了。dock可以装入但自动跑到屏幕右边。切换壁纸偶尔花屏。
compiz:底层的天气和桌面icon跳到了上层来了。
oroborus:天气和桌面icon跳到了上层来了。

六、依赖关系、编译环境、其他辅助程序:
1,解决依赖关系:

代码: 全选

sudo apt-get install imlib2
sudo apt-get install wmctrl
sudo apt-get install feh
wnctrl、feh不是必须的,只是他的依赖和这个wharf一致,安装他就顺便把依赖给解决了。

2,搭建编译环境(不打算自己编译的,可忽略此步)
请安装编译工具包、和头文件

代码: 全选

sudo apt-get install gcc
sudo apt-get install build-essential
sudo apt-get install libimlib2-dev libxmu-dev libglib2.0-dev libxft-dev
cd ~/.icon-DE/bin/
g++ -o ./icon-wharf ./icon-wharf.c  -lX11
g++ -o ./iconrun1 ./iconrun1.c  -lImlib2 -lX11 -lXmu `pkg-config --cflags --libs glib-2.0`
g++ -o ./iconrun2 ./iconrun2.c  -lImlib2 -lX11 -lXmu `pkg-config --cflags --libs glib-2.0`
g++ -o ./iconrun3 ./iconrun3.c  -lImlib2 -lX11 -lXmu `pkg-config --cflags --libs glib-2.0`
g++ -o ./iconrun4 ./iconrun4.c  -lX11 -lImlib2
g++ -o ./icon-clock ./icon-clock.c  -lImlib2 -lX11 -lXmu `pkg-config --cflags --libs glib-2.0`
g++ -o ./icon-dock ./icon-dock.c  -lImlib2 -lX11 -lXmu `pkg-config --cflags --libs glib-2.0`
sudo ln -s /usr/include/freetype2/freetype/ /usr/include/freetype
g++ -o ./icon-panel ./icon-panel.c  -lX11 -lXft  `pkg-config --cflags --libs glib-2.0`
g++ -o ./iconweather ./iconweather.c -lX11 -lImlib2 -lXmu  `pkg-config --cflags --libs glib-2.0` 
sudo apt-get install giblib-dev libcurl4-gnutls-dev 
g++ -o ./icon-desk ./icon-desk.c -lXinerama -lXft  -lX11 -lImlib2 -lXmu  `pkg-config --cflags --libsib-2.0` `giblib-config --cflags --libs` -lcurl -lpng
其中,ln一句,用来解决ubuntu中有一个头文件不在指定的位置的问题。

七、整体的安装、设置过程:
1,安装基本系统
a,通过debootstrap来安装基本系统的工具。具体细节参考(注意:要安装DM启动管理器,也要安装一个WM,比如openbox之类,简单设置以下,使之能够进图形环境和使用。):
http://forum.ubuntu.org.cn/viewtopic.php?f=77&t=338764
b,通过live cd、live usb、硬盘来安装。具体参考:
http://forum.ubuntu.org.cn/viewtopic.php?f=77&t=348452
2,联网
特别注意:以下a、b两种方法有冲突,只能选择其一操作。否则配置会互相覆盖,可能反而不能联网了。
a,通过配置/etc/resolv.conf 设置DNS,通过pppoeconf来拨号。
 

代码: 全选

  方式1:网卡通过DHCP自动获取IP地址
  方式2:网卡静态分配IP地址
  方式3:PPPoE宽带拨号配置

  方式1:网卡通过DHCP自动获取IP地址
  $ sudo gedit /etc/network/interfaces
  # 修改文件/etc/network/interfaces如下文
  #-------------------------------------------------------------------------------
  # This file describes the network interfaces available on your system
  # and how to activate them. For more information, see interfaces(5).
  #
  # The loopback network interface(配置环回口)
  auto lo # 开机自动激lo接口
  iface lo inet loopback # 配置lo接口为环回口
  # The primary network interface (配置主网络接口)
  auto eth0 #开机自动激活eth0接口
  iface eth0 inet dhcp #配置eth0接口为DHCP自动获取
  #-------------------------------------------------------------------------------

  $ sudo /etc/init.d/networking restart # 重启网络

  方式2:网卡静态分配IP地址
  $ sudo gedit /etc/network/interfaces

  # 修改文件/etc/network/interfaces如下文

  #-------------------------------------------------------------------------------
  # This file describes the network interfaces available on your system
  # and how to activate them. For more information, see interfaces(5).
  #
  # The loopback network interface(配置环回口)
  auto lo # 开机自动激lo接口
  iface lo inet loopback # 配置lo接口为环回口
  # The primary network interface (配置主网络接口)
  auto eth0 #开机自动激活eth0接口
  iface eth0 inet static #配置eth0接口为静态设置IP地址
  address 10.16.3.99 #IP
  netmask 255.255.255.0 #子网掩码
  network 10.16.3.0 #网段
  broadcast 10.16.3.255 #广播地址
  gateway 10.16.3.1 #网关

  #sudo gedit /etc/resolv.conf

  ##设置DNS server(可以设置多个)
  #nameserver 192.168.1.1

  $ sudo /etc/init.d/networking restart # 重启网络

  方式3:PPPoE宽带拨号配置

  首次拨号:
  应用程序–系统工具–终端  打开一终端,输入命令:
  sudo pppoeconf
  系统开始搜索所有网络接口上的adsl modem,一步步的yes过来。
  │ Please enter the username which you usually need for │
  │ the PPP login to your provider in the input box below. │
  │ If you wish to see the help screen, delete the │
  │ username and press OK. │
  输入你的宽带帐号。
  输入密码。
  tip:如果是河南网通提供的PPPoE宽带帐号,此处输入的是加密后的用户名
  Would you like to add these addresses automatically to the list of nameservers
  in your local /etc/resolv.conf file? (recommended)
  是否自动获得DNS,选择是。
  Should pppoe clamp MSS at 1452 bytes? If unsure, say yes.
  数据包长度的设置,如果跟我一样不确定,选择是
  Your PPPD is configured now. Would you like to start the connection at
  boot time?
  是否启动时自动激活ADSL? 各位看着办吧。

  以后,要手工拨号,打开终端,输入命令:
  sudo pon dsl-provider

  一般情况下,一次拨通后以后登陆ubuntu都会自动拨通上网的了,不用每次都输入命令拨号。
  手工断线:
  sudo poff

  查看连接情况:
  plog 和 ifconfig ppp0
  ifconfig ppp0 可查询本机的上网IP。
b,通过安装和配置Networkmanager联网
这个是图形界面的,并且kde、gnome、unity等分别有不同前端图形界面。风格有点区别,设置内容基本一样。这个如果安装了kde、和unity的标准桌面,一般就自动安装了。

代码: 全选

sudo apt-get install networkmanager
sudo nm-connection-editor

3,搭配wharf,和“桌面”、icontask(面板),使之能够正常运行。
按照本贴前面提到的(从“一”到“六”)方法配置。
然后分别执行下列命令看效果:

代码: 全选

cd ~/.icon-DE/bin/
./icon-wharf INIT
./icon-desk 
这时,先不要在menu.rc配置文件里面写入run:项目。
4,建立Xsession,使DM(登陆管理器)内出现项目,并完善wharf。
a,在menu.rc配置文件里面写入run:项目
比如写成:

代码: 全选

run:kwin &
run:~/.icon-DE/bin/icon-panel & 
run:sleep 3 && klipper &
run:sleep 4 && iptux &
这样,可以组成由:kwin、icon-panel、klipper、iptux组合+wharf的环境。

再在配置文件最后,加上一行(single后面的数字,根据你的情况改成连贯的,图标文件自己选择和确认一下,要用“关机”图标):

代码: 全选

single10# /usr/share/icons/oxygen/48x48/actions/system-shutdown.png "killall icon-desk" "注销" "a a a a"
b,在/bin下面建立一个sh文件,并加上“可执行”属性:/bin/icon_de.sh

代码: 全选

#!/bin/bash
cd ~/.icon-DE/bin
./icon-wharf INIT &
./icon-desk
这个shell中,一定要在最后一行写上:./icon-desk,而且这一行后面千万不要有“&”符号。(目的是不让这个./icon-desk“常驻内存”。)
c,创建DM调用的.desktop文件
sessions:登陆管理器调用的文件,可能存在于多个目录之下,比如:
/usr/share/xsessions/*
/usr/share/kde4/apps/kdm/sessions/*
/etc/X11/sessions/
/etc/dm/Sessions/
/usr/share/gdm/BuiltInSessions/

我们要创建一个sessions文件:
文件 /usr/share/kde4/apps/kdm/sessions/icon_de.desktop

代码: 全选

[Desktop Entry]
Type=XSession
Exec=/bin/icon_de.sh
TryExec=/bin/icon_de.sh
Name=icon_DE
Comment=我自己开发的DE环境
注意以下两句:

代码: 全选

Exec=/bin/icon_de.sh
TryExec=/bin/icon_de.sh
这两句里面要执行的命令,就是sessions调用的命令。只要这个命令的进程还在内存中,则sessions不会退出,否则sessions退出,X重启,重新登陆。
一般,sessions中调用的是一个窗口管理器(window manager),然后由窗口管理器负责打开程序、调整窗口布局等工作。也可以调用shell脚本文件,但最终都是启动起来一个窗口管理器以及对应的面板、桌面等部件。我们的sessions需要调用的是:/bin/my_de.sh,我们的sessions有点反常,不是将WM作为最终调用语句,而是将切换壁纸./icon-desk作为驻留内存的程序了。这是有目的的。至于目的是什么,这里留一个悬念
我放在了kdm的sessions目录了。根据你的DM不同,请放入对应的目录下面

然后,注销,在DM中应该出现“MY_DE”项目了。登陆进去,看看效果吧。
这个DE没有关机按钮,关机需要点最下面的“注销”按钮退回到“DM”的登陆界面,然后从那里关机。

5,进阶:实现不注销切换WM(窗口管理器)
现在回答上面的悬念:可以做一个shell,实现不注销随意切换WM:~/change_wm
[bash]
#!/bin/bash
killall -9 kwin
killall -9 metacity
killall -9 oroborus
killall -9 icewm
killall -9 blackbox
killall -9 openbox
killall -9 jwm
killall -9 pekwm
killall -9 mutter
killall -9 fvwm
killall -9 xfwm4
killall -9 compiz
killall -9 fluxbox
killall -9 Sawfish
killall -9 fusion-icon
case $1 in
sawfish)
sawfish &
;;
metacity)
metacity &
;;
kwin)
kwin &
;;
compiz)
compiz &
fusion-icon &
;;
mutter)
mutter &
;;
xfwm4)
xfwm4 &
;;
fvwm)
fvwm &
;;
icewm)
icewm &
;;
jwm)
jwm &
;;
oroborus)
oroborus &
;;
blackbox)
blackbox &
;;
openbox)
openbox &
;;
pekwm)
pekwm &
;;
fluxbox)
fluxbox &
;;
*)
;;
esac
[/bash]

然后在menu.rc里面,加上以下内容(group后面的数字请自行修改,部分图标能够在tar包里面找到):

代码: 全选

group8# /usr/share/icons/oxygen/48x48/apps/kcmkwm.png "窗口管理器"
/usr/share/icons/oxygen/48x48/apps/kde.png "~/change_wm kwin" "kwin" "a a a a"
/usr/share/icons/wm-icons/48x48-aquafusion/gnome.png "~/change_wm metacity" "metacity" "a a a a"
/home/<you_name>/.iconmenu/iconcache/snake-logo-small.png "~/change_wm oroborus" "oroborus" "a a a a"
/home/<you_name>/.iconmenu/iconcache/icewm-logo.png "~/change_wm icewm" "icewm" "a a a a"
/home/<you_name>/.iconmenu/iconcache/blackbox.png "~/change_wm blackbox" "blackbox" "a a a a"
/usr/share/pixmaps/openbox.xpm "~/change_wm openbox" "openbox" "a a a a"
/home/<you_name>/.iconmenu/iconcache/sawfish.png "~/change_wm sawfish" "sawfish" "a a a a"
/home/<you_name>/.iconmenu/iconcache/jwm.png "~/change_wm jwm" "jwm" "a a a a"
/home/<you_name>/.iconmenu/iconcache/pekwm.png "~/change_wm pekwm" "pekwm" "a a a a"
/usr/share/icons/wm-icons/48x48-aquafusion/gnome.png "~/change_wm mutter" "mutter" "a a a a"
/home/<you_name>/.iconmenu/iconcache/fvwm.png "~/change_wm fvwm" "fvwm" "a a a a"
/usr/share/pixmaps/xfce4_xicon3.png "~/change_wm xfwm4" "xfwm4" "a a a a"
/home/<you_name>/.iconmenu/iconcache/compiz.png "~/change_wm compiz" "compiz" "a a a a"
/usr/share/icons/wm-icons/48x48-aquafusion/gnome.png "~/change_wm fluxbox" "fluxbox" "a a a a"


版本记录:
2012.04.11:

最早的版本。
2012.04.12:

配置文件添加一个skip:项目,用来定义 轮转切换程序窗口时 跳过特定类型的窗口。
优化部分代码,减少CPU消耗,增加稳定性。
优化鼠标在主icon滚动时的算法。优化鼠标在2/3级icon滚动的算法。
主icon的提示信息里面,加上了“有XX个打开的窗口”的提示。
2级icon中的folder上滚动鼠标,可以滚动显示打开的窗口的标题。然后离开这个icon时,会切换到指定的窗口。(用于弥补下面的bug)
iconmenu(主引导程序) 加上一种启动命令:

代码: 全选

cd ~/.iconmenu/bin
./iconmenu RESET $HOME
与原来的(./iconmenu INIT $HOME)的区别是:这种方式启动,只启动iconmenu,不运行配置文件里面的“run”参数的命令。
发现从wmctrl抄过来的语句,不是用来常驻内存长期运行的,只是用来处理命令行的,稳健性不好。已经找到最可能引起崩溃的语句,在语句前面加上了一些“if”来约束,估计不会再崩溃了。需要观察。
经过观察,在一台只有256M内存的老计算机上面,已经可以连续运行超过1小时不崩溃了。
明天在1M内存的计算机上面再实验一下稳定性。

发现3个BUG:
(1),如果一个程序打开了“对话框”等子窗口,主icon滚动鼠标,可能有些窗口不能出现。(原因是:滚动到“子窗口”并激活时,实际激活的是“主窗口”,然后就按照顺序又从“主窗口”开始滚动显示了,“子窗口”后面的其他程序窗口就没有机会被滚动到前台了。只是有程序打开了子窗口,才会出现这种问题。暂时可以反向滚动使窗口出现,也可以通过在folder性质的icon上面滚动鼠标,来切换到对应窗口)
(2),3级icon切换程序有时不灵。(2012.04.13已解决此问题)
(3),偶尔崩溃。还要再找原因。(找到原因,已基本解决。)
下面的时间将用来处理BUG。正在处理3级icon有时不灵的问题。
2012.04.12:
已经解决3级icon切换程序有时不灵 的问题,并且修改成:滚动滚轮后,3级菜单不会马上消失,再滚动一下,才消失。
增加了对kdocker/alltray的支持,可以在打开程序时,自动调用他们实现程序dock化。配置文件增加对应选项。
配置文件增加了(新窗口提示)功能的敏感度选项,并可关闭此功能。(这个功能是造成崩溃的原因,调低敏感度,或者关掉这个功能就不崩溃了)

现在还有/新发现的bug:
(1)如果一个程序打开了“对话框”等子窗口,主icon滚动鼠标,可能有些窗口不能出现。
(2)如果使用了alltray/kdocker,打开程序时,有1-2秒延迟。(alltray/kdocker自身原因)
(3)不是通过wharf打开的窗口(如“即时通讯”的弹出窗口),不能出现在trayer的托盘里面。(因为我没有使用面板)
(4)如果开启了“新窗口提醒”功能,还是有可能崩溃。
(5)这个DE主要功能区域在左边,但是程序窗口最大化后,左边撑满屏幕,部分内容可能被wharf覆盖。

下一步开发目标:设法定义窗口最大化规则,使窗口最大化以后,左边让出一点区域,避免被覆盖。

通过内置的函数不能调整,通过生成wmctrl命令反而可以了。
现在已经能够自动把窗口调整成预先设定的大小和位置,软件包已经更新。说明和配置方法晚上补充。
2012.04.13

将“时钟+新窗口提醒”独立了出去,成为一个新的程序,从而使主icon代码变简单,而时钟程序专注于显示时间+检查有无新窗口,所以两个程序都很稳健了,彻底解决了崩溃问题。
现在在3级icon和2级独立icon连续滚动鼠标,则会将对应程序的窗口设置成指定的位置和大小(通过调用wmctrl命令实现的)。本来想通过内部函数实现的,结果没有成功。先这样写进去了。解决了icon覆盖部分窗口的问题。
发现的新问题:
(1)主icon的语句需要优化一下,现在内存占用偏大,估计有些变量申请了内存,用完后没有释放。
(2)需要检查一下為什麼用内置函数切换窗口大小失败了。尽量用内置函数实现功能。
(3)好像将tray程序设置为N/A后,有一点不正常,需要检查一下。
(4)考虑是不是把“新窗口检测敏感度”参数去掉,感觉这个参数没用了。
(5)独立出去的时钟程序,看看语句是否可以进一步简化。
2012.04.14
抓图205.png
主icon的语句已经优化一下,占用内存从6M降低到2M。
改用内置函数实现“窗口自动移动和调整大小”功能,去掉了对wmctrl的依赖。
修正了13号发现的bug(3),tray程序设置为N/A后,也正常了。
“新窗口检测敏感度”参数还在,没有去掉。
优化了时钟程序,给时钟分配更多内存,防止时钟闪烁和崩溃。(在1G内存机器上,连续使用10小时,没有崩溃)

暂时没有发现其他bug。今天没有添加新功能,只是在修复bug。

星期天歇班,暂停更新。

2012.04.16

先放上一个小更新,只是改正了一个BUG,主要解决在3级icon滚动鼠标,将程序提升到前台后,再滚动鼠标一下,3级icon有可能直接关闭,对应窗口没有实现移动和调整大小的问题。
另外,发现如果使用kwin作为wm,则需要将“避免抢夺焦点”功能关闭,否则可能会使即时通讯软件新弹出的窗口被盖到后面,而耽误事情。(kde系统设置----窗口行为----窗口行为----避免抢夺焦点程度,选择“无”)

2012.04.18

修改了几个BUG,
开发了一个icontask,一个小面板,有托盘,有桌面切换,有活动窗口栏。

2012.04.19

最新进展
icontask现在有个小BUG:
1,刚打开时,有可能是灰的,显示不出来内容。当有窗口打开时,或者鼠标点击一下,就会好。
2,活动任务栏,不同活动任务(窗口标签)之间,有时显示白色分割线,有时不显示。
这是我引用的panel源码本身的bug,我还不会修改。暂时无解。

已经实现了:
clock上,中键点击,clock下移50像素,再点击恢复。
clock上,左键点击隐藏所有窗口标题和边框,右键点击恢复。
clock上,鼠标中键滚动,实现窗口“平铺”,和“全屏”效果。

2012.04.20
iconmenu(2012.04.20).tar.gz
这是beta版,已经可以基本正常使用了。
(274.82 KiB) 已下载 273 次
初步实现了对wmaker dock的封装。开发了一个“icondock”,用命令参数,可以把wmaker dock作为子窗口,“封装”到里面,实现了DOCK整齐的插入到图标里面。也是写在配置文件里面。具体见上面的配置文件的说明。
缺陷:现在的icondock不支持自动隐藏。

回家歇班一天。暂停更新。

所有预想的功能都已经实现,现在可以算是beta版了。
2012.04.23
icon-DE(2012.04.23).tar.gz
beta2版本,基本稳定,已经可用。框架已定局,不会再有大框架的改动了
(294.17 KiB) 已下载 244 次
做了较大改动,明确确定了软件布局,调整了文件名称和目录结构。
彻底重写icon-dock模块,现在已经可以参与“自动隐藏”了,而且调入“dock”成功率提高了很多。
配置文件分割成了3个,方便单独使用其中其中的部分模块。
背景图片正png格式了,现在支持透明背景图片。
dock改成在主icon上面排列,使主licon和二级icon不脱离,方便操作。
时钟(clock)增加了4窗口布局,布局方式由2种增加为(3种+全屏),增加了闹钟功能。

正在开发icon-desk中。

2012.04.26
开发完成了icon-desk模块。
这个模块还有待完善,现在在openbox、fluxbox等WM里面工作的不好。
发现:icon-dock模块,只有在kwin、xfwm4里面才能工作。
看来真的需要自己开发一个WM来配合了,否则就只能用xfwm4或者kwin来功能工作了。
暂时我用xfwm4作为WM了,效果很好,我比较满意。
下一步去研究WM的原理去了,再发布就是RC1版本了。
暂时打算用pekwm来研究。

最新进展:把openbox源码针对性的做了调整,调整后openbox与本DE配合非常完美!!
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

Re: 对UNITY不满意?那就自己开发个DE玩。完整记录我自己开发+搭配的linux环境,个人认为是一个简单的DE。

#3

帖子 YeLee » 2012-04-10 16:32

膜拜楼主。
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

Re: 对UNITY不满意?那就自己开发个DE玩。完整记录我自己开发+搭配的linux环境,个人认为是一个简单的DE。

#4

帖子 YeLee » 2012-04-10 16:38

楼主,lfs吧,够你折腾的了。
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
头像
monk
帖子: 19507
注册时间: 2010-01-28 10:45

Re: 对UNITY不满意?那就自己开发个DE玩。完整记录我自己开发+搭配的linux环境,个人认为是一个简单的DE。

#5

帖子 monk » 2012-04-10 16:44

支持折腾

*********宁静致远*********
如果我说的有什么不对,请看签名第一行
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: 对UNITY不满意?那就自己开发个DE玩。完整记录我自己开发+搭配的linux环境,个人认为是一个简单的DE。

#6

帖子 自由建客 » 2012-04-10 16:55

lxde 就是这么回事
谢宝良
帖子: 1983
注册时间: 2010-05-01 21:23

Re: 对UNITY不满意?那就自己开发个DE玩。完整记录我自己开发+搭配的linux环境,个人认为是一个简单的DE。

#7

帖子 谢宝良 » 2012-04-10 17:05

楼主应该找个妞或者找个亲哥哥了。
要不抽多点时间陪陪父母吧。
使用系统目标是稳定快速即可。这样折腾太过了。
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: 对UNITY不满意?那就自己开发个DE玩。完整记录我自己开发+搭配的linux环境,个人认为是一个简单的DE。

#9

帖子 自由建客 » 2012-04-10 18:25

谢宝良 写了:楼主应该找个妞或者找个亲哥哥了。
要不抽多点时间陪陪父母吧。
使用系统目标是稳定快速即可。这样折腾太过了。
人家儿子都打酱油了!
头像
Cherrot
帖子: 981
注册时间: 2011-04-03 10:01
系统: Ubuntu 12.XX
来自: 帝都
联系:

Re: 对UNITY不满意?那就自己开发个DE玩。完整记录我自己开发+搭配的linux环境,个人认为是一个简单的DE。

#10

帖子 Cherrot » 2012-04-10 19:50

ijj 有心人就是厉害哦
Ubuntu技巧汇总http://wiki.ubuntu.org.cn/UbuntuSkills --你遇到的各种问题可能已经在里面了
我的技术博客http://www.cherrot.com
Code tells you how, comments should tell you why.
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

Re: 对UNITY不满意?那就自己开发个DE玩。完整记录我自己开发+搭配的linux环境,个人认为是一个简单的DE。

#12

帖子 YeLee » 2012-04-10 21:21

路过,等更新。 :em11 :em11 :em11
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
头像
ljj_jjl2008
论坛版主
帖子: 14255
注册时间: 2007-09-16 8:29

Re: 对UNITY不满意?那就自己开发个DE玩。完整记录我自己开发+搭配的linux环境,个人认为是一个简单的DE。

#13

帖子 ljj_jjl2008 » 2012-04-11 7:49

今天先查找资料,设法去解决一下内存泄露问题,顶楼暂时不继续写了。
头像
lovelyzlf
帖子: 946
注册时间: 2009-11-04 13:03
联系:

Re: 对UNITY不满意?那就自己开发个DE玩。完整记录我自己开发+搭配的linux环境,个人认为是一个简单的DE。

#14

帖子 lovelyzlf » 2012-04-11 10:20

lz充分体现了linuxer不屈不挠的精神~~生命在于折腾~~
linux for human beings!
SAMSUNG Q460,CPU intel i3 2330,RAM 8G,HDD640G,Graphic card GT540 1G
Debian-testing(wheezy)+KDE
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

Re: 对UNITY不满意?那就自己开发个DE玩。完整记录我自己开发+搭配的linux环境,个人认为是一个简单的DE。

#15

帖子 YeLee » 2012-04-11 10:21

再过来顶一下。 :em11 :em11 :em11
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
回复