Systemd

如何禁用所有登錄提示,包括 systemd 系統上的 VT 1

  • July 17, 2020

我本質上是在嵌入式 Linux 上執行基於 X 的資訊亭程序,並且我想禁用在某些配置下登錄的能力。我想在啟動早期在一個 systemd 服務的 Exec 中執行一些發行版非特定的控制台命令,以禁用所有登錄提示,包括第一個虛擬終端上的提示,以便只有 systemd 服務的輸出出現在強制 VT 上。我還需要另一個服務來啟動 X 和全屏應用程序。

目前我的服務文件已訂購

Before=systemd-logind.service systemd-networkd.service NetworkManager.service dhclient.service
Before=MyKioskApp.service

WantedBy=basic.target

並且執行檔執行

for UNIT in systemd-logind.service systemd-networkd.service systemd-networkd.socket NetworkManager.service dhclient.service
do
   systemctl stop $UNIT
   systemctl mask --runtime $UNIT
done

這與其他技巧相結合可以完成我想要的大部分工作,但如果我的資訊亭應用程序遇到錯誤並退出,我仍然會看到登錄提示。將 getty 服務添加到列表中似乎會破壞事情,因此 X 拒絕啟動。我認為我需要禁用某種 PAM 模組,但我沒有看到推薦的用於更新該配置的命令。我無法為此任務添加新包,但我可以修改文件系統。

掩蓋 getty 服務被證明是可行的方法。將 console-getty.service 和 getty@tty1.service 添加到屏蔽服務列表會禁用 TTY1 上的登錄提示。實際上 systemd-logind 負責啟動額外的虛擬終端會話,而 getty 負責在它們上提供登錄提示,這似乎與它們的名稱直接矛盾。

引用自:https://unix.stackexchange.com/questions/598870