I have a script which I used to use in ubuntu. It got my lan ip address using the command
hostname -I. I would get an output like
192.168.1.xxx as a string which I can use somewhere else.
However, with Manjaro, the command doesn’t exist, when I tried
hostname -i, (lowercase) but i get
127.0.1.1. I even installed the dnsutils.
Is there a way I can get my lan address as an output from any command / tool in Manjaro?
Linux iproute2 tools have been supporting JSON output since 2017. This output is then easily parsable with the
jq utility (which is distributed in most distributions, including Manjaro) for use in scripts.
You can combine this with asking the kernel how it would choose to reach some well known address (eg: 188.8.131.52), and keep only the relevant part (among other information such as the gateway, the interface name etc.): the chosen local address (
"prefsrc") using a jq filter. No packet is emitted, it’s just asking the kernel to resolve a route and give back the result:
ip -json route get 184.108.40.206 | jq -r '..prefsrc'
will give the result which won’t be affected by any output peculiarities nor requires to know beforehand the interface name. This result is dynamic. For example if one then uses a VPN for all traffic, the previous command would return the new tunnel address instead.