我在虚拟机中使用 Damn Small Linux(或“DSL”)(它“非纯粹”基于 Debian - 我可以访问 apt-get)。
我安装了 telnet 服务器(telnetd + xinetd)。
我还运行另一个虚拟机,这次安装了 telnet 客户端(Linux 发行版 AntiX)。
当我使用 telnet 从 AntiX 连接到 DSL 时,系统会提示我输入登录名+密码,这没问题。
但是,当我登录时,它只显示一条消息,然后就冻结了。我所说的“冻结”是指:
- 我可以输入任何我想要的内容,但是当我按 ENTER 键时,命令不会被执行。相反,光标只是移动到下一行。
- 行“dsl@dsl$”(提示输入命令)不显示。
- 在服务器端(DSL),登录时窗口会闪烁(关闭)。
似乎某个进程正在运行,但问题是它永远不会停止。我必须输入“Ctrl+C”来停止它并继续使用命令行。
DSL 网站上还有一个警告,说如果您通过 apt-get 安装了错误的应用程序,那么您可能会破坏某些东西,“例如 X 服务器”?这可能是 X 服务器吗?
我的问题是:
- 我可以查出哪个进程正在运行吗?我在这里只是想尝试让它不再重新开始。
- 我可以让这个过程在 telnet 连接时不启动吗?
使用 root 登录也会重现该错误。
答案1
根据这个维基页面about /home/dsl/.bash_profile
,该文件的默认内容检查您是否从 ssh 登录,如果不是,则使用命令startx
启动 X11 图形服务器:
#!/bin/bash
export IRCNICK=DSL
SSH=`env | grep SSH_CONNECTION`
RUNLEVEL=`runlevel|cut -f2 -d' '`
if [ -z "$SSH" ]; then
if [ $RUNLEVEL -eq 5 ]; then
startx
fi
fi
因此,当您从 telnet 登录时,不会检测到 ssh,并且您可能正在执行startx
并运行 X11。最简单的解决方案是编辑此文件以使命令成为注释,: startx
或以某种方式检测您的 telnet 连接。 Telnet 通常不设置任何特殊的环境变量。您也许可以使用该命令tty
来查看您是否位于伪终端而不是真正的控制台上。例如,在该SSH=
行之后添加:
case `tty` in
/dev/pts*) SSH=telnet ;;
esac
对于不同于 的用户,dsl
例如root
,您需要查看其主目录以查看它是否与 /home/dsl 不同,并检查.profile
和.bash_profile
。找到目录,例如:
awk -F: '$1=="root"{print $6}' /etc/passwd