Systemd
如何禁用所有登錄提示,包括 systemd 系統上的 VT 1
我本質上是在嵌入式 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 負責在它們上提供登錄提示,這似乎與它們的名稱直接矛盾。