Category: 默认分类
移动直连的Cloudflare-HKG IPv6
Domain
time.cloudflare.com
IP List
2606:4700:f1:: 2606:4700:83b0:: 2606:4700:8ca0:: 2606:4700:90c1::
一语成谶
“Across the Great Wall, we can reach every corner in the world”
Epsilon: A No-Op Garbage Collector
System V ABI
FSH – 私有网络间Linux主机互访
FSH是一个通过服务器中转方式实现私有网络间Linux主机互访的方案,支持:
1. Shell终端
2. TCP端口转发
源代码
https://gitlab.com/hev/hev-fsh
编译及使用说明
README.md
Over!
GStreamer OpenMAX plugins
GStremaer OpenMAX plugins 在 Raspberry Pi 上跑起来了,中间遇到了一点小情况,解决后运行效果果然不是很理想。
GstOMX
GStreamer OpenMAX 是将 OpenMAX 的 Components 与 GStreamer 的 Elements 映射起来的插件,插件设计的还相对灵活,可通过配置文件调整许多参数。
源码包:gst-omx-1.0.0-1.src.tar.gz
小情况
videoconvert 运行就出现了段错误,调试后发现了它所使用的 orc 在 ARM 平台上存在 Bug,升级后即可正常工作。为什么要使用 videoconvert?见下文
源码包:orc-0.4.17-1.src.tar.gz
大杯具
omxh264dec 解码后的输出 Frames 格式为 I420 (YUV420),而 waylandsink 的输入 Frames 格式要求为 BGRA (XRGB8888),而且只支持这一种。这就需求做一次 videoconvert了。
videoconvert (I420 – BGRA)太占用 CPU 了,对于 Raspberry Pi 的 700MHz 的 CPU 来说,压力山大呀!
最后,还得想办法使用 OpenMAX 的 video_render component。
Over!
GtkStatusIcon 弹出菜单问题记录
GtkStatusIcon 使用教程 => https://live.gnome.org/GtkStatusIconTutorial
问题描述
将 gnome panel 位置调整到“底部”后,弹出的菜单位置不正确,导致菜单项不可见及无法选择。
问题原因
gtk_menu_popup(GTK_MENU(my_menu),
NULL,
NULL,
gtk_status_icon_position_menu,
status_icon,
button,
activate_time);
gtk_widget_show_all(my_menu); // 在 popup 后才进行 show,导致窗口大小计算错误。
在调用 gtk_menu_popup 之前需要对 menu 进行 show。
Over!
为什么 g_debug() 不输出了?
从 GLib 2.32 开始,一个使 GLib 默认 log 处理函数更可用的补丁使得 g_debug() 在正常情况下是不被输出到终端上的。
当需要启用调试的时候需要显式的通过环境变量 G_MESSAGES_DEBUG 来打开 g_debug() 的输出。
export G_MESSAGES_DEBUG=all
Over!
使用 GtkBuilder 构造自定义构件
之前博客里有一个非常类似的记录 使用 Builder 构造自定义构件,是在学习 Vala 语言时记录的。说的是如何使用 GtkBuilder 构造出自定义构件,仅仅只给出了一个示例代码。
最近在写 GTK+ 程序时被代码写 UI 的方式搞的很累,尽管那个 UI 并不复杂。在程序中有使用自定义的构件(是 GtkWidget 的子类),这里再重新整理一下关于 GtkBuilder 构造自定义构件的日志,并给出一个 C 语言版本的示例。
GTK+ 从 2.12 开始实现了 GtkBuildable 接口类与 GtkBuilder 类用于处理从 XML 格式的 UI 描述数据中构造出对象的实例,提高 GTK+ UI 程序的开发效率。只要实现了 GtkBuildable 接口类的 Widget 类,都可以在 XML 格式的 UI 描述数据中引用,并使用 GtkBuilder 进行实例化。
目前 GTK+ 库中基本上所有的 Widget 类都实现了 GtkBuildable 接口类,也就意味着可以使用 GtkBuilder 进行实例化。然而有的时间情况并不总是那么好,我们的项目需要自定义新的 Widget 类型完成特定的功能,幸运的是这些自定义的 Widget 类型只要实现了 GtkBuildable 接口类也是一样可以被 GtkBuilder 实例化的。
示例中 src/hev-window.h 和 src/hev-window.c 是基于 GtkWindow 简单派生出来的 HevWindow 类。ui/main.xml 使用 HevWindow 类构造了一个 Window,在 src/hev-main.c 中创建了一个 GtkBuilder 实例 builder 来装载 ui/main.xml 并通过 name (对应描述文件中的 id)来获取构造出来的 HevWindow 类型的实例,再调用 gtk_widget_show 方法显示出来。
PS:编译参数中需要使用 gmodule-export-2.0,这样才能导出自定义类型与信号处理函数,需要描述文件中指定的信号回调将不能正常调用。具体见示例中的 Makefile
Over!