GJS和GNOME Extension趟坑指南

本文是作者在编写GNOME插件过程中的一些体验分享,主要涉及GNOME Extension、GJS、GTK+和GLib等技术。文章指出,尽管GNOME Extension提供了定制工作环境的便利,但缺乏完善文档,开发者需要阅读源码进行学习。调试方面,作者推荐了Looking Glass,但也提到其使用不便。此外,文章简述了GNOME Shell、Mutter和Clutter之间的关系,以及Clutter使用OpenGL进行硬件加速的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过了半个月的摸爬滚打,总算在写GNOME插件上走上了点正轨。这篇文章虽然是指南,其实就是一些抱怨(笑)

概况

首先说说GNOME Extension是什么来的。

2011年,GNOME释放了万众期待的大版本更新GNOME 3。据wiki描述,这个万众期待的大版本气得Linus Torvalds投向了xfce,并且把GNOME开发组狠狠地骂了一顿。不过在GNOME 3这么迭代了几个版本之后,他又用回了GNOME。

而GNOME Extension就是GNOME 3开始的,一种更加开放自由的方式提供给用户tweak自己的工作环境的方式。GNOME 3的桌面环境称作GNOME Shell,它负责Top Bar,还有Activites,Workspaces。整个GNOME Shell是由一种Javascript方言GJS和一大堆GTK+库Binding写成的。

前端开发的同学都知道,无论一个网页写成什么样子,我只要在控制台输入几行js代码,就可以魔改这个网页,也即没有所谓名字保护机制,任何部分都可以自由访问。GNOME Shell自然也是这样,所以每一个插件上传都需要相当长的时间由工作人员Review之后才能释出。

在终端输入gjs,你就可以开始用一个由GNOME倾情提供的js解释器了:

$ gjs
gjs> print("Hello World!");
Hello World!
gjs> const Gtk = imports.gi.Gtk;
gjs> const GLib = imports.gi.GLib;
gjs> Gtk.init(null);

gjs> let mainloop = new GLib.MainLoop(null, null);
gjs> let w = new Gtk.Window();
gjs> w.show_all();
gjs> mainloop.run();

在你打完最后一句之后,应该会出来一个小窗口儿了。

screenshot1

是不是有一种胜券在握的感觉。有了这个gjs感觉可以扔掉nodejs了(两者使用的JS引擎不同,nodejs和QML使用Google的V8,而GJS使用Mozilla的SpiderMonkey,这两家真是世仇啊哈哈),甚至还可以10行以内开发Native GUI,还可以使用由GTK+提供的所有库!是不是很爽。其实噩梦才刚刚开始。`

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值