![更改主机名会扰乱系统和桌面环境(如 KDE、Gnome 等)...我该怎么做才能允许它发生?](https://linux22.com/image/74602/%E6%9B%B4%E6%94%B9%E4%B8%BB%E6%9C%BA%E5%90%8D%E4%BC%9A%E6%89%B0%E4%B9%B1%E7%B3%BB%E7%BB%9F%E5%92%8C%E6%A1%8C%E9%9D%A2%E7%8E%AF%E5%A2%83%EF%BC%88%E5%A6%82%20KDE%E3%80%81Gnome%20%E7%AD%89%EF%BC%89...%E6%88%91%E8%AF%A5%E6%80%8E%E4%B9%88%E5%81%9A%E6%89%8D%E8%83%BD%E5%85%81%E8%AE%B8%E5%AE%83%E5%8F%91%E7%94%9F%EF%BC%9F.png)
很久以前,我开始用 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 应该可以工作。