나는 글을 쓰고있다애플리케이션효과는 같아요새로 찍은옵션이 전달될 때 -w
. 메모리, 스왑, CPU, 배터리 사용량, 호스트 이름, 로컬 IP, 커널 버전 등과 같은 일부 시스템 정보를 표시합니다.
Neofetch처럼 "호스트"를 얻는 방법을 알고 싶습니다. 예를 들어:
-` sourav@archlinux-arm
.o+` --------------------
`ooo/ OS: Arch Linux armv7l
`+oooo: Host: Raspberry Pi 3 Model B Rev 1.2
`+oooooo: Kernel: 4.19.108-1-ARCH
-+oooooo+: Uptime: 10 mins
`/:-:++oooo+: Packages: 804 (pacman)
`/++++/+++++++: Shell: bash 5.0.16
`/++++++++++++++: Resolution: 1366x768
`/+++ooooooooooooo/` DE: Xfce
./ooosssso++osssssso+` WM: Xfwm4
.oossssso-````/ossssss+` WM Theme: XFCE_Colour_Lite_Pink
-osssssso. :ssssssso. Theme: XFCE_Colour_Lite_Pink [GTK2], X
:osssssss/ osssso+++. Icons: Papirus [GTK2], Tela-orange [GT
/ossssssss/ +ssssooo/- Terminal: tilix
`/ossssso+/:- -:/+osssso+- CPU: BCM2835 (4) @ 1.350GHz
`+sso+:-` `.-/+oso: Memory: 333MiB / 901MiB
`++:. `-/+/
.` `/
이 메시지를 받았습니다. 내 노트북에서:
-` sourav@archlinux
.o+` ----------------
`ooo/ OS: Arch Linux x86_64
`+oooo: Host: Inspiron 5567
`+oooooo: Kernel: 5.5.10-arch1-1
-+oooooo+: Uptime: 3 hours
`/:-:++oooo+: Packages: 1163 (pacman)
`/++++/+++++++: Shell: bash 5.0.16
`/++++++++++++++: Resolution: 1920x1080
`/+++ooooooooooooo/` DE: Xfce
./ooosssso++osssssso+` WM: Xfwm4
.oossssso-````/ossssss+` WM Theme: XFCE_Colour_Lite_Ruby
-osssssso. :ssssssso. Theme: XFCE_Colour_Lite_Purple [GTK2
:osssssss/ osssso+++. Icons: Papirus [GTK2/3]
/ossssssss/ +ssssooo/- Terminal: tilix
`/ossssso+/:- -:/+osssso+- CPU: Intel i3-6006U (4) @ 2.000GHz
`+sso+:-` `.-/+oso: GPU: Intel Skylake GT2 [HD Graphics
`++:. `-/+/ Memory: 2814MiB / 3755MiB
.` `/
내 문제는이 문제, 그러나 내 라즈베리 파이가 실행되지 않고 dmidecode
( /sys/devices/virtual/dmi/
또한 실행되지도 않음) lshw
설치되어 있지 않기 때문에 내 질문에 대답하지 않습니다. 또한 /etc/hostname
컴퓨터의 모델명이 아니라 단순히아치리눅스암그리고아키텍처Linux. 아니면 uname -a
'cat /proc/version
라즈베리 파이' 라즈베리 파이의 문자열.
대부분의 하드웨어에서도 실행되어야 하는 종속성을 사용하지 않고 neofetch와 같은 하드웨어 이름을 얻을 수 있는 방법이 있습니까?
답변1
소스 코드 읽기새로 찍은혼란을 명확히 했습니다. Neofetch 버전 7.0.0에는 1174행에 조건부 검사가 있습니다.
if [[ -d /system/app/ && -d /system/priv-app ]]; then
model="$(getprop ro.product.brand) $(getprop ro.product.model)"
elif [[ -f /sys/devices/virtual/dmi/id/product_name ||
-f /sys/devices/virtual/dmi/id/product_version ]]; then
model=$(< /sys/devices/virtual/dmi/id/product_name)
model+=" $(< /sys/devices/virtual/dmi/id/product_version)"
elif [[ -f /sys/firmware/devicetree/base/model ]]; then
model=$(< /sys/firmware/devicetree/base/model)
elif [[ -f /tmp/sysinfo/model ]]; then
model=$(< /tmp/sysinfo/model)
fi
실제로 세부 정보를 얻기 위해 단일 경로가 아닌 다양한 경로를 확인합니다. 따라서 이는 모든 GNU/Linux 배포판에 적용되는 하드코어 검사는 아닙니다. 예를 들어 첫 번째 if 조건은 Android에서 찾을 수 있는 특정 경로를 확인합니다.
다양한 배포판과 하드웨어에서 이 파일을 테스트했습니다.
PC 및 노트북
내 모든 시스템에는 /sys/devices/virtual/dmi/id/product_name
모델 정보가 있습니다.
Raspberry Pi 3 모델 B 및 Android(7.0 테스트됨)
내 Raspberry Pi 3 Model B 및 Android 스마트폰에서 이 파일에는 /sys/firmware/devicetree/base/model
모델 정보가 포함되어 있습니다.
가상 상자
Debian은 Virtualbox에서 실행되고 있으며 Neofetch가 Virtualbox 1.2
호스트로 나타나며 cat /sys/devices/virtual/dmi/id/product_name /sys/devices/virtual/dmi/id/product_version
.
참고하시기 바랍니다,제품 버전단지 개행 문자일 수도 있으므로 파일을 읽고 문자열을 연결한 후 후행 개행 문자를 제거(Ruby에서는 제거, 제거!)하는 것이 좋습니다.
따라서 모든 조건을 넣고 기존 파일을 확인한 후 파일을 읽어 모델 정보를 얻는 것이 합리적일 수 있습니다.
답변2
Linux에서는 하드웨어 모델 이름을 검색하는 이식 가능하고 안정적이며 보편적인 방법이 없습니다. Raspbian이 설치된 ARM 기반 Raspberry Pi와 OpenWRT가 설치된 MIPS 기반 TP-LINK 라우터라는 두 가지 시나리오를 설명하겠습니다.
Raspberry Pi에는 ARM CPU와 일반 ARM 장치가 있습니다.
장치 트리하드웨어에 대해 설명하고
위키피디아 기사그리곤 그랬다고 언급함2012년부터 의무화. 장치 트리 구조는 사용자 공간에 노출되며 그 자체가 심볼릭 링크인 cat
ing 을 통해 모델 이름을 검색하는 데 사용할 수 있습니다 (장치 트리 파일 끝에 개행 문자가 없으므로 다음과 같은 도우미 함수를 만듭니다. 저것/proc/device-tree/model
/proc/device-tree
/sys/firmware/devicetree/base
catn
고양이파일을 만들고 개행을 추가하세요):
pi@raspberrypi:~$ catn () { cat $1 && echo; }
pi@raspberrypi:~$ catn /proc/device-tree/model
Raspberry Pi 3 Model B Rev 1.2
pi@raspberrypi:~$ catn /sys/firmware/devicetree/base/model
Raspberry Pi 3 Model B Rev 1.2
또는 dtc를 사용하여 /sys/firmware/fdt
평면화된 장치 트리 Blob을 수동으로 덤프합니다 .
pi@raspberrypi:~$ sudo dtc /sys/firmware/fdt 2>/dev/null | grep model
compatible = "raspberrypi,3-model-b\0brcm,bcm2837";
model = "Raspberry Pi 3 Model B Rev 1.2";
공식 Raspberry Pi Linux 지점을 사용하는 경우 모델에도 동일하게 적용됩니다. /proc/cpuinfo에 쓰기:
pi@raspberrypi:~$ grep "^Model" /proc/cpuinfo
Model : Raspberry Pi 3 Model B Rev 1.2
또한 마더보드의 전체 이름( Raspberry Pi 3 Model B Rev 1.2
저수준 펌웨어로 구축됨)은 Linux 커널 코드 어디에서도 다음과 같은 완전한 문자열을 찾을 수 없습니다.
pi@raspberrypi:~$ strings /boot/start.elf | grep 'Raspberry Pi '
Raspberry Pi %s Rev %s
Raspberry Pi Bootcode
model
표준 장치 트리 속성에 설명되어 있습니다.
DTSpec.
RISC-V와 같은 다른 아키텍처도 장치 트리를 사용하여 하드웨어를 설명하지만 확인할 RISC-V 보드가 없습니다.
내 TP-LINK 라우터에는 /proc/device-tree, /sys/firmware/devicetree/base 및 /sys/firmware/fdt가 없습니다. 즉, 장치 트리가 전혀 제공되지 않거나 일부 적절한 Linux 커널 구성 옵션이 비활성화되고 장치 트리가 사용자 공간에 노출되지 않습니다. 그러나 대신 /tmp/sysinfo가 있으므로 전자가 더 가능성이 높습니다.
~ $ cat /tmp/sysinfo/board_name
tl-wdr4300
~ $ cat /tmp/sysinfo/model
TP-Link TL-WDR3600 v1
이 값은 다음과 같이 제공됩니다.ar71xx.sh 스크립트
꽤 길지만 name
1313행에 할당된 것을 볼 수 있습니다.
*"TL-WDR3600/4300/4310")
name="tl-wdr4300"
;;
TL-WDR4900 v2
이를 바탕으로 machine
/proc/cpuinfo 필드에서 가져옵니다.
machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /proc/cpuinfo)
AR71XX_BOARD_NAME
그런 다음 스크립트 끝에 할당 하고 작성하십시오./tmp/sysinfo/board_name
이 라우터의 /proc/cpuinfo에 있는 필드의 전체 값은 다음과 같습니다 machine
.
~ $ grep "^machine" /proc/cpuinfo
machine : TP-LINK TL-WDR3600/4300/4310
하지만 Neofetch는 /tmp/sysinfo/board_name을 찾지 않고 /tmp/sysinfo/model을 찾습니다. /proc/cpuinfo에서 가져오지 않고 firmware
플래시 파티션에서 읽습니다.
~ $ cat /proc/mtd
dev: size erasesize name
mtd0: 00020000 00010000 "u-boot"
mtd1: 0010c5a4 00010000 "kernel"
mtd2: 006c3a5c 00010000 "rootfs"
mtd3: 00490000 00010000 "rootfs_data"
mtd4: 00010000 00010000 "art"
mtd5: 007d0000 00010000 "firmware"
~ $ dd if=/dev/mtdblock5 bs=4 count=1 skip=16 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"' && echo
36000001
모델은 321행에 지정됩니다.
"360000"*)
model="TP-Link TL-WDR3600"
;;
물론 네오페치와 같은 범용 프로그램이 각 펌웨어, 플래시 메모리 레이아웃 등에 대해 그렇게 많이 알고 있을 것이라고는 상상하기 어렵습니다. 그러나 장치 트리를 지원하지 않거나 /tmp/sysinfo 및 다른 곳에서 유용한 하드웨어 모델 정보를 제공하지 않는 MIPS 기반 구현을 상상할 수 있습니다. 이 경우 /proc/cpuinfo는 최후의 수단으로 얻을 수 있습니다.어느하드웨어에 대한 정보입니다.