据我了解,对于与 Linux 内核的基于文本的交互,一个名为init开始getty(或agetty)的程序连接到下面的一个 TTY 设备/dev并提示输入用户名。此后,login运行一个调用的程序,提示输入用户的密码,如果正确,则启动用户首选的外壳程序(例如bash或csh)。此时,bash 通过 TTY 设备与内核交互。
这个登录过程如何在 X11 上工作?X11 是否通过 TTY 与内核交互?
默认情况下,当我在 tty 中登录我的 Arch linux 框时,在我输入用户名之后但在我输入密码之前会超时。
所以它是这样的
Login: mylogin <enter>
Password:
(+ 60 seconds)
Login:
Run Code Online (Sandbox Code Playgroud)
如您所见,如果我不输入密码,它会回收提示——我希望它无限期地等待我的密码,而不是回收登录提示。
这可能吗?
似乎--timeout选择agetty将是我想要的。但是,我尝试在 getty 文件中添加此标志/usr/lib/systemd/system/(默认情况下不使用该选项),然后重新启动 - 它似乎没有任何效果。
我的 inittab 中有一行如下所示:
# Put a getty on the serial port
ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL
Run Code Online (Sandbox Code Playgroud)
如果我尝试从ssh会话命令行执行类似的操作(这次是针对我拥有的 USB 串行适配器):
/sbin/getty -L ttyUSB0 115200 vt100
Run Code Online (Sandbox Code Playgroud)
我收到以下回复:
getty: setsid: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
我是否可以从我的ssh会话启动getty进程并在 USB 串行适配器上显示一个串行终端?为什么这必须发生在 inittab 中?
我已经将 USB 转串口线从 OS X 连接到运行 Arch Linux ARM的Banana Pi板,由 Lemaker 分发。连接本身运行良好 - 我在启动时看到所有启动消息,我可以进入 U-Boot 并发出命令等;我假设连接本身按预期工作。
但是,一旦引导序列完成并且应该提示我输入凭据,屏幕就会变为空白(清除以前的条目)并且不会出现登录提示。
谷歌搜索发现我应该:
systemctl enable getty@ttyS0.serviceconsole=ttyS0,115200是最后一个console参数这样做,我仍然没有收到登录提示。检查日志显示systemd由于某种原因无法启动dev-ttyS0.device:
Nov 25 20:20:27 pi-server systemd[1]: Timed out waiting for device dev-ttyS0.device.
Nov 25 20:20:27 pi-server systemd[1]: Dependency failed for Serial Getty on ttyS0.
journalctl -u dev-ttyS0.device不会透露任何其他信息 - 只是它超时了。systemctl start dev-ttyS0.device也超时。
我错过了什么?为什么systemd不能启动设备?更重要的是,为什么缺少登录提示?
跑步 Linux pi-server 3.4.90 #2 SMP PREEMPT …
是否可以agetty从命令行使用?我试过命令
sudo agetty -s 34800 tty8 linux
Run Code Online (Sandbox Code Playgroud)
但它在几秒钟后返回并且tty8未打开。这是预期的行为吗?
此外,尝试在后台启动它
sudo agetty -s 34800 tty8 linux &> /dev/null &
Run Code Online (Sandbox Code Playgroud)
立即返回。为什么?
我试图让我的计算机在 Arch Linux 计算机上重新启动后自动以特定用户身份登录。我按照Arch Linux Wiki 的指南,运行# systemctl edit getty@tty1并粘贴了以下几行:
[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin username --noclear %I $TERM
Run Code Online (Sandbox Code Playgroud)
这有效,我会自动登录以及一切。但是,当我因为想以其他人的身份登录而按 CTRL+D 注销时,会触发自动登录并立即重新登录。如何将自动登录配置为仅在启动后第一次自动登录,并且当我手动注销时什么都不做?
从手册页:
agetty 打开一个 tty 端口,提示输入登录名并调用 /bin/login 命令。它通常由 init(8) 调用。
但是如果你不带任何参数运行 login,它会询问用户名。那么为什么不让 login 完成询问用户名的工作,而不是在 agetty 中进行(另外,如果您的登录失败,login会再次询问您的用户名)?
这对我来说似乎是多余的。我认为 agetty 的唯一工作是重复调用 login (因为在一定次数的尝试后登录退出)。
这个命令到底在做什么(一步一步)?
openvt -c 40 /bin/agetty tty40 linux
Run Code Online (Sandbox Code Playgroud)
我改用这个命令:
openvt -c 41 /bin/agetty tty40 linux
Run Code Online (Sandbox Code Playgroud)
并且 agetty 是在 tty40(不是 tty41)上启动的。这是为什么?这个-c 41选项似乎没有必要。删除它会产生相同的结果。
在尝试理解 TTY 时,我有一些黑暗区域。
在我的系统上,我有/dev/tty[1-63]. 正在udev创建这些字符设备吗?以及如何访问它们(例如可以使用 Ctrl+Alt+F2 访问 tty2)?/dev/tty40例如,我如何访问?
据我了解,当我访问/dev/tty1, 时agetty被调用,然后调用login. agetty电话之外的真正作用是login什么?