要禁用我的设备上的某些 getty /dev/ttyAMA0
,我必须使用 来屏蔽它。这很好用。所以我启用了getty 。效果也很好。systemctl mask [email protected]
ttyUSB1
systemctl enable [email protected]
[email protected]
所以我的问题: a和 a之间有区别吗[email protected]
?
答案1
要查看这两个单元(或者更确切地说,单元模板)之间的差异,只需查看文件之间的差异即可[电子邮件受保护]和[电子邮件受保护],您可以/lib/systemd/system
在您的系统上找到它。
(此处链接的文件指向 systemd v239 中的文件,这是撰写本文时的最新版本。这些文件中包含 m4 宏,因此它们在安装之前进行了处理,但这是 m4 处理引入的微小更改,因此它们是足够接近。)
有一些差异,但主要的差异是ExecStart=
每个单元调用的命令。
单元[电子邮件受保护]调用此命令:
ExecStart=-/sbin/agetty -o '-p -- \\u' --noclear %I $TERM
尽管[电子邮件受保护]调用此命令:
ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,38400,9600 %I $TERM
该命令使用于[电子邮件受保护]传递agetty
参数--keep-baud
,以配置串行端口速度。在某种方式,[电子邮件受保护]将在串行端口上工作,但它可能无法正确配置串行端口,这可能最终无法正常工作,或者可能比正确配置时的速度慢。
另一方面,[电子邮件受保护]传递agetty
参数--noclear
,因此在用户注销后控制台屏幕不会被清除(传统上至少是在 tty0 上配置的。)
与单元文件的进一步区别:
- [电子邮件受保护]绑定到串行端口 ( ) 的 udev 设备
BindsTo=dev-%i.device
,因此如果它是可移动设备(例如 USB),当设备被移除或拔出时,systemd 将停止 getty。 - [电子邮件受保护]检查 tty0 是否存在 (
ConditionPathExists=/dev/tty0
),因此如果内核中禁用了对本地控制台的支持,它不会生成任何本地控制台。 - [电子邮件受保护]取消设置区域设置变量 (
UnsetEnvironment=LANG LANGUAGE LC_...
),因为本地化通常在本地控制台上不受支持或支持不佳。
关于您屏蔽 ttyAMA0 并启用 ttyUSB1 的特定情况,ttyUSB1 是一个串行端口(至少,它模拟一个),因此使用[电子邮件受保护]会更合适。
然而,启用 getty@ 或[电子邮件受保护]屏蔽 @ttyAMA0 并不是实现这一目标的最佳方法。
systemd 从内核获取其控制台配置,通常是从console=
内核命令行中的参数(这是通过systemd-getty-生成器,因此请参阅其文档以获取更多详细信息。)因此,您需要做的就是在内核命令行上配置控制台(使用诸如 之类的参数console=ttyUSB1
,尽管您可能也想包含本地控制台,例如tty0
),systemd 将执行以下操作:正确的事。
看一眼这篇关于 systemd 中串行控制台支持的博客文章更多细节。