很久以前,我开始用 C++ 开发某种隐身模式恶魔。其中一部分是仅以 root 身份运行,另一部分是将主机名更改为随机生成的主机名。我经历过,对我的主机名的任何更改(通过虚拟终端或通过我的 Stealthdemon 或通过 dhcp 功能)都会以某种方式扰乱系统。一个例子是,突然间所有 KDE 应用程序都无法启动,无论是通过快捷方式还是通过单击都无法启动。如果我将主机名重置为原始主机名,那么一切似乎都很完美。
我的问题是:
- 通过 bash 发出主机名时还会调用什么?
- 在 c/c++ 代码中发出主机名时还会调用什么?
- 奇怪行为的原因是什么? (虽然我猜想,xorg 或 kde 本身可能以某种方式链接到旧主机名,但在更改后它们不再链接)
- 可以做什么来保持系统稳定,但仍然允许通过 shell 或代码更改主机名?
提前谢谢。
答案1
- X auth 文件(
~/.Xauthority
、/tmp/xauth-*
等)包含系统主机名。如果它与实际主机名不同(如 所示hostname(1)
),X 应用程序将不会启动。
就我而言,它打印“未指定协议无法连接到显示器:0”。但将 X auth 文件中的主机名更改为实际值可以解决问题。 (我使用十六进制编辑器来测试它;好吧,应该有更好的方法来改变它)
答案2
我在 KDE 4.13.3 上也遇到了同样的问题。我做了很多事情来修复它(有些可能是多余的,但这绝对对我有用)。当 KDE 未运行时,您可能必须从命令行执行这些操作。
- 删除
.Xauthority
主目录中的文件。 - 转到
.kde
主目录中的文件夹。 - 重命名
cache-<your old hostname>
为cache-<your new hostname>
. - 重命名
socket-<your old hostname>
为socket-<your new hostname>
. - 重命名
tmp-<your old hostname>
为tmp-<your new hostname>
.删除该目录中的所有文件。 - 在
.kde
目录中导航至.kde/share/config/
.删除所有kwin*
文件,例如使用rm kwin*
. - 在同一目录中删除该
session
目录。
重新启动 X 服务器(或计算机),KDE 应该可以工作。