写在最前
本文章的Kali Linux版本为2022.3
我相信许多人在使用Kali Linux的过程中都会遇上这些情况:
对于这个横在Thunar和Mousepad界面正中的警告栏,我说个实话,这毕竟用的都是Kali Linux了,用户还能不知道root应该怎么用吗(
于是乎我在谷歌和必应之间来回切换,终于找到了几个关于这个横栏的讨论,但是,找到的为数不多的教程其实并没有提出什么实际的解决办法,而且我的解决过程中也有许多的坑,综上种种,我写了这篇博客。
那么不管怎么说,现在就开始吧。
教程开始
先把已经改好的软件放在最前面:
mousepad_0.5.10-1_amd64.deb
thunar_4.16.10-1_amd64.deb
总体的大概思路。
首先,Kali Linux使用的带有“Warning:you are using the root account”,也就是上图的“警告:您正在使用超级帐户,可能会损害您的系统。”这个提示,它其实来自两个软件。
红色的提示来自一款不怎么有名的Linux开源文本编辑器:Mousepad—Github链接。
橙红色的警告来自Thunar-Github链接。
翻看两个软件的Github源代码仓库,都可以在对应的window.c
文件中找到对应的代码部分。
那么处理这个事情就很简单了,我们只需要重新编译安装一遍这两个软件就可以了。
下载两个软件的源码
首先必须注意一个地方,这两款软件是依靠Xfce来运行的,也就是说它和xfce的版本息息相关。因此,我们不能直接编译安装最新版本。
先在Terminal中查看这两个软件的版本。
然后在代码仓库里找到对应版本的源码并下载。
进行更改
需要更改的地方很少,如果不懂C语言也可以很轻松。
首先是Thunar,直接用搜索框搜索关键词root,然后大概是在731行的样子,我们可以找到以下的代码块:
thunar-window.c部分:
/* check if we need to add the root warning */
if (G_UNLIKELY (geteuid () == 0)){
/* add the bar for the root warning */
infobar = gtk_info_bar_new ();
gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_WARNING);
gtk_widget_set_hexpand (infobar, TRUE);
gtk_grid_attach (GTK_GRID (window->grid), infobar, 0, 2, 1, 1);
gtk_widget_show (infobar);
/* add the label with the root warning */
label = gtk_label_new (_("Warning: you are using the root account. You may harm your system."));
gtk_container_add (GTK_CONTAINER (gtk_info_bar_get_content_area (GTK_INFO_BAR (infobar))), label);
gtk_widget_show (label);
}
大概是在731行的样子。然后把放在上面代码块里的部分全部删除,删除之后大概是这个样子:
同理我们处理mousepad的源码。
源代码长这样:
mousepad-window.c部分
static void
mousepad_window_create_root_warning (MousepadWindow *window){
/* check if we need to add the root warning */
if (G_UNLIKELY (geteuid () == 0)){
GtkWidget *ebox, *label, *separator;
GtkCssProvider *provider;
GtkStyleContext *context;
const gchar *css_string;
/* add the box for the root warning */
ebox = gtk_event_box_new ();
gtk_box_pack_start (GTK_BOX (window->box), ebox, FALSE, FALSE, 0);
gtk_widget_show (ebox);
/* add the label with the root warning */
label = gtk_label_new (_("Warning: you are using the root account. You may harm your system."));
gtk_widget_set_margin_start (label, 6);
gtk_widget_set_margin_end (label, 6);
gtk_widget_set_margin_top (label, 3);
gtk_widget_set_margin_bottom (label, 3);
gtk_container_add (GTK_CONTAINER (ebox), label);
gtk_widget_show (label);
separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
gtk_box_pack_start (GTK_BOX (window->box), separator, FALSE, FALSE, 0);
gtk_widget_show (separator);
/* apply a CSS style to capture the user's attention */
provider = gtk_css_provider_new ();
css_string = "label { background-color: #b4254b; color: #fefefe; }";
context = gtk_widget_get_style_context (label);
gtk_css_provider_load_from_data (provider, css_string, -1, NULL);
gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
g_object_unref (provider);
}
}
大概是在1059行。这个处理方法和上面的Thunar稍有不同,我们删掉里面的方法部分,删除后如下:
这一部分的工作就做完了。
编译
这个部分稍微有点折磨人,建议在Debian系的机器上编译(有条件用服务器就行了,安装的运行库软件包懒得删),否则会有大量的需要的运行库找不到。
首先在两个软件的源码文件夹里打开Terminal,以编译mousepad为例,直接使用./autogen.sh
。
最后的结果一定是失败的,编译器会提示你缺少某个包,然后我们必须安装这个包。这个其实很简单,因为需要的包有点多所以我不一一列举出来。
这里有些需要注意的地方:缺少的包并不是提示所说的那个名字,我们一般需要带有-dev
后缀的包,可以先用apt search 包名
搜索一下,找到名字后面带dev的包。如下图:
经过痛苦的安装运行库后,反复运行./autogen.sh
得到下面的提示说明就ok了:
之后使用make
进行编译,编译成功后是这样的:
打包安装
先使用apt remove
将两个软件包都卸载,之后重启一下。
这里稍有不同,我们不使用make install
来安装,而使用checkinstall
。
checkinstall
有很多优点,它在安装之后会默认把包加入dpkg的管理目录中,即使以后想删除也可以用dpkg -r ***
来卸载。
首先用apt install checkinstall
之后一定要把源码文件夹给命名为packname-版本这种格式,比如应该是mousepad-0.5.10这种格式,否则用dpkg命令管理时会很不方便。
在Temrinal中直接使用checkinstall
进行安装,期间它会提示是否需要添加描述和确认包信息之类的,如果看不懂一路回车就行了,如果出现报错,可以跟着提示信息做一些简单的操作,比如删某个文件夹或者文件之类的。
成功之后是这样的:
同时会在目录生成对应的.deb
包。
编译完其中一个之后立刻重启一次再编译第二个,在第二个编译时可能无法安装,但是会出现deb包,可以使用dpkg -i
安装,并添加--force-all
参数强制覆盖安装,之后再次重启。
看看效果吧