FSH – 助你接入私有网络中的 Linux 终端

Linuxer! 同事、朋友有技术问题需要你远程协助,可是双方计算机都连接在私有网络中怎么办?FSH 能助你接入私有网络中的 Linux 终端。

FSH 是采用服务器中转来穿透 NAT 的一种连接远程 Linux 终端的方案,服务端、客户端的源代码都是开放的,托管在 GitHub 上。

如何编译?

git clone git://github.com/heiher/hev-fsh
cd hev-fsh
git submodule init
git submodule update
make

如何使用?
公共转发服务:222.92.8.138:81

被控端

# 登录模式(root 用户运行)
bin/hev-fsh -s 222.92.8.138 -p 81
 
# 当前用户模式
bin/hev-fsh -s 222.92.8.138 -p 81
 
# 指定用户模式,如 nobody 用户(root 用户运行)
bin/hev-fsh -s 222.92.8.138 -p 81 -u nobody

主控端

bin/hev-fsh -s 222.92.8.138 -p 81 -c TOKEN

自建转发服务端

bin/hev-fsh -a 0.0.0.0 -p 端口
 
# 指定 LOG 文件
bin/hev-fsh -a 0.0.0.0 -p 端口 -l /var/log/fsh.log

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!

使用 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!

最先他们逮捕共产党员

马丁·尼默勒

在德国,起初他们追杀共产主义者,
我没有说话———因为我不是共产主义者;

接着他们追杀犹太人,
我没有说话———因为我不是犹太人;

后来他们追杀工会成员,
我没有说话———因为我不是工会成员;

此后他们追杀天主教徒,
我没有说话———因为我是新教教徒;

最后他们奔我而来,
却再也没有人站出来为我说话。

德文原版:
Als die Nazis die Kommunisten holten,
habe ich geschwiegen;
ich war ja kein Kommunist.
Als sie die Sozialdemokraten einsperrten,
habe ich geschwiegen;
ich war ja kein Sozialdemokrat.
Als sie die Gewerkschafter holten,
habe ich nicht protestiert;
ich war ja kein Gewerkschafter.
Als sie mich holten,
gab es keinen mehr, der protestieren konnte.

Over!

HTC Desire CDMA

今天花了 ¥1920 买了个 HTC Desire CDMA,其中邮费 ¥42,现在货到付款真是越来越贵了。。。卖家给送了用配套的屏幕膜和塑料套,武装起来感觉就是不一样,虽然有点丑了。

手机总体感觉非常不错,响应速度飞快,或许因为我长时候使用G1的原因吧,对比鲜明啊。

默认安装的 ROM 我不喜欢,发现有 root 权限,不用我费事啦,卖家很“体贴”啊。基于 CM 7.0.3 定制了一个适合我自己的 ROM,刷上效果不错。

我之前买了一个只能使用 CDMA 1X 的 ¥58 低消,送 300 小时上网的资费卡也派上大用场喽,测试发现以 CDMA 1X 的网速(稳定 15KB/s)使用 Skype for Android 打电话非常流畅。可以组合 Skype 的包月套餐了。准备使用如下组合:
费用:¥58 + ¥77
通话:1000 分钟
短信:580 条
上网时长:300 小时
上网流量:不限制

是不是很强大?

Over!