在之前我通过修改calendar.js的方法解决了在Cinnamon桌面环境中增加中国农历显示的功能,但是在XFCE桌面环境中,面板的小部件不是由JavaScript编写的,功能修改起来就不一样了,需要查看一下C语言编写的源代码,我通过查看xfce4-panel-4.16的源代码,明白了clock插件是调用的gtk_calendar_new()函数绘制的GtkCalendar界面,并未发现自定义的绘制日历界面的语句,因此只能够从GtkCalendar方面的知识学习入手后再修改。
要修改GtkCalendar,肯定还会用到lunar-date等第三方的支持农历显示的库函数,通过github我找到了yetist负责维护的lunar-date和lunar-calendar,现在的最新版本为3.0,而Ubuntu软件仓库的最新版本则为2.1;我查看了Readme文件,发现安装完lunar-calendar 3.0版本,再做一些简单的配置,GtkCalendar就可以默认显示中国农历了。要安装lunar-calendar则必须先安装lunar-date,因此我通过Git clone命令将上述两个软件包的源代码下载了下来,准备进行编译安装。虽然在debian的官方的软件库中包含lunar-date 3.0的安装包,但是发现安装完成后仍然无法支持lunar-calendar 3.0的编译,提示未安装lunar-date 3.0,因此还是老老实实的编译源代码方式进行安装。
上述两个软件包是使用meson来完成编译工作,因此首先应该安装编译环境,安装需要以下两个语句:
sudo apt-get install python3 python3-pip ninja-build
pip3 install --user meson
一、下面就可以在源代码目录中开始编译,首先编译lunar-date 3.0,
第一步编译语句就会报错:
$ meson build --prefix /usr -Ddocs=true -Dintrospection=true -Dvapi=true -Dtests=true
错误信息:lunar-date/meson.build:75:4: ERROR: Program(s) ['vapigen'] not found or not executable
解决的办法:sudo apt-get install valac
重新编译,又产生一个新的错误:
错误信息:docs/meson.build:17:6: ERROR: Program(s) ['gtkdoc-scan'] not found or not executable
解决的办法:sudo apt-get install gtk-doc-tools
如果此时重新执行meson build还产生如下的错误信息:
Meson install error: Can't get attribute 'OctalInt' ·
那样需要重装meson,执行sudo apt-get remove meson,然后再sudo apt-get install meson
$ meson build --prefix /usr -Ddocs=true -Dintrospection=true -Dvapi=true -Dtests=true就不会报错了。
第二步:执行$ ninja -C build/
第三步:进行安装;$ sudo ninja -C build install
二、接着编译lunar-calendar 3.0
第四步:meson build -Dprefix=/usr -Denable_gtk_modules=true,编译时启用gtk模块,自动显示农历
第五步:执行$ ninja -C build/
第六步:进行安装;$ sudo ninja -C build install
三、对系统做一些简单配置,为自动显示农历提供一些基本支持
第七步:在 /etc/X11/xinit/xinitrc.d/ 新建文件 70-lunar-calendar.sh,并增加可执行权限, 内容为:
export GTK3_MODULES=lunar-calendar-module
重新注销、登录系统,使用日历的gtk3应用就应该会部分支持中国农历。
但是XFCE4桌面环境中点击clock插件时间部分,弹出的日历界面仍然不包含中国农历,只是用鼠标点击某一个具体日期时会弹出一个界面显示指定日期的农历信息,还不是那么直观。
四、下载xfce4-panel-4.16的源代码,并解压。
第八步:在源代码的根目录中运行./configure,进行编译的配置工作,这部分可能会有包缺失需要安装,这里就不详细描述了。
第九步:进入plugins/clock子目录,打开clock.c文件,修改clock_plugin_popup_calendar (ClockPlugin *plugin)函数,在第1370行处增加"| GTK_CALENDAR_SHOW_DETAILS"字符串,要求绘制calendar时显示细节。修改完后该语句为:
gtk_calendar_set_display_options (GTK_CALENDAR (plugin->calendar),
GTK_CALENDAR_SHOW_HEADING
| GTK_CALENDAR_SHOW_DAY_NAMES
| GTK_CALENDAR_SHOW_WEEK_NUMBERS
| GTK_CALENDAR_SHOW_DETAILS);
五、编译clock小插件。
第十步:在plugins/clock子目录,执行make命令,在.libs子目录中就包含了插件的的共享链接库文件:libclock.so
第十一步:将libclock.so拷贝至/usr/lib/x86_64-linux-gnu/xfce4/panel/plugins/目录中替换原文件,默认显示农历的插件就完成了。
第十二步:修改当前主题的配置文件,将/usr/share/themes/主题名称/gtk-3.0/下的gtk.css文件中的calendar部分增加padding: 8px和font-size: 16px;;增加后为如下样式:
calendar {
font-size: 16px;
padding: 8px;
border-width: 1px;
border-radius: 0px;
border-style: solid;
border-color: shade(#FFFFFF, 0.9);
color: #000000; }
备注:如觉得编译麻烦,需要现成的libclock.so文件的,或有其他问题的,请私信。