如何在 Arch Linux 的登录屏幕上显示 IP

Mar*_*aro 4 bash arch-linux systemd

我可以通过编辑文件在 Ubuntu 中执行以下操作:

/etc/rc.local
Run Code Online (Sandbox Code Playgroud)

并添加:

IP=$(/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}')

echo "IP: $IP" > /etc/issue
Run Code Online (Sandbox Code Playgroud)

在 Arch 中,这个文件不存在“/etc/rc.local”,经过一番搜索,我发现我必须创建这个文件:

/etc/systemd/system/rc-local.service
Run Code Online (Sandbox Code Playgroud)

内容:

[Unit]
Description=/etc/rc.local compatibility

[Service]
Type=oneshot
ExecStart=/etc/rc.local

TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

然后创建“/etc/rc.local”。

内容:

IP=$(/sbin/ip route get 1 | awk '{print $NF;exit}')
echo "IP: $IP" > /etc/issue

exit 0
Run Code Online (Sandbox Code Playgroud)

然后使其可执行:

sudo chmod +x /etc/rc.local
Run Code Online (Sandbox Code Playgroud)

最后开始/测试:

sudo systemctl start rc-local.service
Run Code Online (Sandbox Code Playgroud)

得到错误:

Job for rc-local.service failed because the control process exited with error code.
See "systemctl status rc-local.service" and "journalctl -xe" for details.
Run Code Online (Sandbox Code Playgroud)

的输出systemctl status rc-local.service

* rc-local.service - /etc/rc.local Compatibility
Loaded: loaded (/etc/systemd/system/rc-local.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Fri 2016-06-10 02:52:17 AST; 1min 59s ago
Process: 760 ExecStart=/etc/rc.local (code=exited, status=203/EXEC)

Jun 10 02:52:17 maro systemd[1]: Starting /etc/rc.local Compatibility...
Jun 10 02:52:17 maro systemd[1]: rc-local.service: Control process exited, code=exited status=203
Jun 10 02:52:17 maro systemd[1]: Failed to start /etc/rc.local Compatibility.
Jun 10 02:52:17 maro systemd[1]: rc-local.service: Unit entered failed state.
Jun 10 02:52:17 maro systemd[1]: rc-local.service: Failed with result 'exit-code'.
Run Code Online (Sandbox Code Playgroud)

的输出journalctl -xe

-- Unit rc-local.service has begun starting up.
Jun 10 02:52:17 maro systemd[760]: rc-local.service: Failed at step EXEC spawning /etc/rc.local: Exec format error
-- Subject: Process /etc/rc.local could not be executed
-- Defined-By: systemd
Run Code Online (Sandbox Code Playgroud)

更新:

  1. 添加#!/bin/bash/etc/rc.local
  2. sudo systemctl daemon-reload
  3. sudo systemctl start rc-local.service
  4. 现在我没有收到任何错误!但:
  5. sudo systemctl status rc-local.service 输出:

    rc-local.service - /etc/rc.local Compatibility Loaded: loaded (/etc/systemd/system/rc-local.service; enabled; vendor preset: disabled) Active: inactive (dead) since Fri 2016-06-10 13:13:04 AST; 3s ago Process: 488 ExecStart=/etc/rc.local (code=exited, status=0/SUCCESS)

    Jun 10 13:13:04 maro systemd[1]: Starting /etc/rc.local Compatibility... Jun 10 13:13:04 maro systemd[1]: Started /etc/rc.local Compatibility.

尝试重新启动并在登录前显示:

rtnetlink answers network is unreachable

在登录界面:只显示“IP:”,不显示机器IP。例如,一旦登录并 ping google,互联网就可以正常工作,并且可以通过 LAN 访问机器。


  1. sudo env -i /etc/rc.local = 无输出
  2. ip route get 1 | awk '{print $NF;exit}'用于/etc/rc.local= 192.168.0.103

的输出nav

XDG_SESSION_ID=c2
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=192.168.0.100 64436 22
SSH_TTY=/dev/pts/0
USER=maro
MAIL=/var/spool/mail/maro
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
PWD=/home/maro
LANG=C
SHLVL=1
HOME=/home/maro
LOGNAME=maro
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
SSH_CONNECTION=192.168.0.100 64436 192.168.0.103 22
XDG_RUNTIME_DIR=/run/user/1000
_=/usr/bin/env
Run Code Online (Sandbox Code Playgroud)

编辑/etc/systemd/system/rc-local.service:在 ExecStart 之后删除了四个设置。我也试过改变: Type=forking

状态仍然说: Active: inactive (dead)

Pao*_*loC 5

CentOS 7Debian 8(也许还有其他)上,只需将以下行附加到/etc/issue

My IP address: \4
Run Code Online (Sandbox Code Playgroud)

这将解析为机器的 IPv4 地址。如果你有多个网络接口并且你想选择一个特定的,你可以用

My IP address: \4{eth0}
Run Code Online (Sandbox Code Playgroud)