diff --git a/RAM.sh b/RAM.sh new file mode 100755 index 0000000..6c41010 --- /dev/null +++ b/RAM.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +function RAM(){ + local OUT_FILE=$1 + # Read RAM information + ram_info=$(sudo dmidecode -t memory) + # Get memory type + ram_type=$(echo "$ram_info" | awk -F': ' '/^[[:space:]]*Type:/ && $2 !~ /Unknown/ {print $2; exit}') + # Get module sizes + modules=$(echo "$ram_info" | awk ' + /^[[:space:]]*Size:/ { + if ($0 !~ /No Module Installed/ && $2 ~ /^[0-9]+$/) + print $2 + } + ') + # Count empty slots + empty_slots=$(echo "$ram_info" | awk ' + /^[[:space:]]*Size:/ { + if ($0 ~ /No Module Installed/) + count++ + } + END { + print count+0 + } + ') + + # Calculate total RAM and format modules + total=0 + sizes="" + + for size in $modules; do + total=$((total + size)) + if [ -z "$sizes" ]; then + sizes="${size} GB" + else + sizes="${sizes} + ${size} GB" + fi + done + + # Output + if [ -z "$modules" ]; then + echo -e "RAM: No modules detected - ${empty_slots} empty slots ${ram_type}" >>"$OUT_FILE" + else + echo -e "RAM: ${total} GB - ${sizes} ${ram_type} - ${empty_slots} empty slots" >>"$OUT_FILE" + fi +} \ No newline at end of file diff --git a/battery.sh b/battery.sh index a485fcc..c73f311 100755 --- a/battery.sh +++ b/battery.sh @@ -1,25 +1,30 @@ #!/bin/bash -for b in /sys/class/power_supply/BAT*; do - [ -d "$b" ] && BATTERY="$b" && break -done +function BATTERY(){ + local OUT_FILE=$1 + for b in /sys/class/power_supply/BAT*; do + [ -d "$b" ] && BATTERY="$b" && break + done -if [ -z "$BATTERY" ]; then - echo "Kein akku gefunden" - return 1 -fi + if [ -z "$BATTERY" ]; then + echo -e "Kein akku gefunden">>"$OUT_FILE" + return 1 + fi -if [ -f "$BATTERY/capacity" ]; then - CAPACITY=$(cat "$BATTERY/capacity") -else - echo "Akku kann nicht gelesen werden" - return 1 -fi + if [ -f "$BATTERY/capacity" ]; then + CAPACITY=$(cat "$BATTERY/capacity") + else + echo -e "Akku kann nicht gelesen werden">>"$OUT_FILE" + return 1 + fi -if [ "$CAPACITY" -gt 0 ]; then - echo "Akku bei $CAPACITY % " - return 0 -else - echo "Akkustand 0%, prüfen" - return 1 -fi + if [ "$CAPACITY" -gt 0 ]; then + echo -e "Akku bei $CAPACITY % ">>"$OUT_FILE" + return 0 + else + echo -e "Akkustand 0%, prüfen">>"$OUT_FILE" + return 1 + fi + + +} diff --git a/camera.sh b/camera.sh index ed67301..ad0dc76 100644 --- a/camera.sh +++ b/camera.sh @@ -1,13 +1,14 @@ #!/bin/bash -snapshot >/dev/null 2>&1 & disown +function CAMERA(){ + local OUT_FILE=$1 + snapshot >/dev/null 2>&1 & disown + read -p "Funktioniert Kamera? Snapshot öffnet sich - (y/n): " answer + #output + if [[ "$answer" == [Yy] ]]; then + echo -e "Kamera:\t Ja" >>"$OUT_FILE" + else + echo -e "Kamera:\t Nein" >>"$OUT_FILE" + fi -read -p "Funktioniert Kamera? Snapshot öffnet sich - (y/n): " answer - -if [[ "$answer" == [Yy] ]]; then - return 0 -elif [[ "$answer" == [Nn] ]]; then - return 1 -else - return 1 -fi \ No newline at end of file +} \ No newline at end of file diff --git a/lan.sh b/lan.sh index 0614116..06b4639 100644 --- a/lan.sh +++ b/lan.sh @@ -1,29 +1,27 @@ #!/bin/bash -for iface in /sys/class/net/*; do - iface_name=$(basename "$iface") -#echo "${iface_name:0:2}" +function LAN_CABLE(){ + for iface in /sys/class/net/*; do + iface_name=$(basename "$iface") + if [[ "$iface_name" == "lo" ]]; then + continue + fi - # Skip loopback - if [[ "$iface_name" == "lo" ]]; then - continue - fi + if [[ "${iface_name:0:2}" == "wl" ]]; then + continue + fi - if [[ "${iface_name:0:2}" == "wl" ]]; then - continue - fi - # Check if carrier file exists (only for physical interfaces) - if [[ -f "$iface/carrier" ]]; then - carrier=$(cat "$iface/carrier") + if [[ -f "$iface/carrier" ]]; then + carrier=$(cat "$iface/carrier") - if [[ "$carrier" == "1" ]]; then - echo "Bitte LAN Kabel entfernen" - read -n 1 -s -r -p "Any key to continue" - return 0 - fi - fi -done - -echo "LAN cable is NOT connected" -return 1 \ No newline at end of file + if [[ "$carrier" == "1" ]]; then + echo "Bitte LAN Kabel entfernen" + read -n 1 -s -r -p "Any key to continue" + return 0 + fi + fi + done + echo "LAN cable is NOT connected" + return 1 +} \ No newline at end of file diff --git a/model.sh b/model.sh new file mode 100644 index 0000000..958baae --- /dev/null +++ b/model.sh @@ -0,0 +1,13 @@ +#!/bin/bash +function MODEL(){ + local OUT_FILE=$1 + MODEL=$(cat /sys/class/dmi/id/product_name) + echo -e "Model:\t$MODEL" >>"$OUT_FILE" + sudo hostnamectl set-hostname "csr-$MODEL" +} + +function CPU(){ + local OUT_FILE=$1 + CPUModel=$(cat /proc/cpuinfo | grep "model name" | head -1 | cut -d: -f2- | sed 's/^[[:space:]]*//' ) + echo -e "CPU:\t$CPUModel" >>"$OUT_FILE" +} \ No newline at end of file diff --git a/screen.sh b/screen.sh index 10932b9..c8ed67e 100644 --- a/screen.sh +++ b/screen.sh @@ -1,33 +1,38 @@ #!/bin/bash -# Get primary display name -display=$(xrandr --query | awk '/ connected primary/{print $1}') +function SCREEN(){ + local OUT_FILE=$1 + # Get primary display name + display=$(xrandr --query | awk '/ connected primary/{print $1}') + # If no primary, use first connected + if [ -z "$display" ]; then + display=$(xrandr --query | awk '/ connected/{print $1; exit}') + fi -# If no primary, use first connected -if [ -z "$display" ]; then - display=$(xrandr --query | awk '/ connected/{print $1; exit}') -fi + if [ -z "$display" ]; then + echo -e "No connected display found." >>"$OUT_FILE" + exit 1 + fi -if [ -z "$display" ]; then - echo "No connected display found." - exit 1 -fi + # Get physical dimensions line for that display + dim_line=$(xrandr --query | grep "^$display connected") -# Get physical dimensions line for that display -dim_line=$(xrandr --query | grep "^$display connected") + # Extract width and height in mm + width_mm=$(echo "$dim_line" | sed -n 's/.* \([0-9]\+\)mm x \([0-9]\+\)mm.*/\1/p') + height_mm=$(echo "$dim_line" | sed -n 's/.* \([0-9]\+\)mm x \([0-9]\+\)mm.*/\2/p') -# Extract width and height in mm -width_mm=$(echo "$dim_line" | sed -n 's/.* \([0-9]\+\)mm x \([0-9]\+\)mm.*/\1/p') -height_mm=$(echo "$dim_line" | sed -n 's/.* \([0-9]\+\)mm x \([0-9]\+\)mm.*/\2/p') -if [ -z "$width_mm" ] || [ -z "$height_mm" ]; then - echo "Could not determine physical screen size." - exit 1 -fi + if [ -z "$width_mm" ] || [ -z "$height_mm" ]; then + echo -e "Could not determine physical screen size." >>"$OUT_FILE" + exit 1 + fi -# Calculate diagonal in mm -diagonal_mm=$(echo "scale=4; sqrt($width_mm^2 + $height_mm^2)" | bc -l) -# Convert to inches -diagonal_in=$(echo "scale=2; $diagonal_mm / 25.4" | bc -l) -return ${diagonal_in%.*} \ No newline at end of file + # Calculate diagonal in mm + diagonal_mm=$(echo "scale=4; sqrt($width_mm^2 + $height_mm^2)" | bc -l) + + # Convert to inches + diagonal_in=$(echo "scale=2; $diagonal_mm / 25.4" | bc -l) + echo -e "Screen:\t ${diagonal_in%.*}" >>"$OUT_FILE" + return 0 +} \ No newline at end of file diff --git a/speaker.sh b/speaker.sh index d3984b6..ddded73 100755 --- a/speaker.sh +++ b/speaker.sh @@ -1,13 +1,13 @@ #!/bin/bash -audacious ./stereo_test.mp3 >/dev/null 2>&1 & disown +function SPEAKER(){ + local OUT_FILE=$1 + audacious ./stereo_test.mp3 >/dev/null 2>&1 & disown + read -p "Funktioniert Sound? Audacios öffnet sich - (y/n): " answer + if [[ "$answer" == [Yy] ]]; then + echo -e "Speaker:\t Ja" >>"$OUT_FILE" + else + echo -e "Speaker:\t Nein" >>"$OUT_FILE" + fi -read -p "Funktioniert Sound? Audacios öffnet sich - (y/n): " answer - -if [[ "$answer" == [Yy] ]]; then - return 0 -elif [[ "$answer" == [Nn] ]]; then - return 1 -else - return 1 -fi \ No newline at end of file +} \ No newline at end of file diff --git a/test.sh b/test.sh index 5d899d8..40edf0e 100755 --- a/test.sh +++ b/test.sh @@ -5,87 +5,31 @@ DIR="${BASH_SOURCE%/*}" DESKTOP_PATH=$(xdg-user-dir DESKTOP) OUT="$DESKTOP_PATH/device_info.txt" source drives.sh +source RAM.sh +source camera.sh +source speaker.sh +source wifi.sh +source lan.sh +source screen.sh +source battery.sh +source model.sh if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi -get_cpu_model () { - CPUModel=$(cat /proc/cpuinfo | grep "model name" | head -1 | cut -d: -f2- | sed 's/^[[:space:]]*//' ) -} -get_model () { -MODEL=$(cat /sys/class/dmi/id/product_name) -} +LAN_CABLE -get_RAM () { -LANGUAGE="${LC_MESSAGES:-$LANG}" - - -if [[ "$LANGUAGE" == de* ]]; then - TOTAL_MEM=$(free -g | grep Speicher: | awk '{print $2}') -elif [[ "$LANGUAGE" == en* ]]; then - TOTAL_MEM=$(free -g | awk '/^Mem:/ {print $2}') -fi - -} - -. "$DIR/lan.sh" -get_cpu_model -get_model -get_RAM -sudo hostnamectl set-hostname "csr-$MODEL" -clear echo -e "$(date -I)" >"$OUT" -echo -e "CPU:\t$CPUModel" >>"$OUT" -echo -e "Model:\t$MODEL" >>"$OUT" -echo -e "RAM:\t$TOTAL_MEM GB" >> "$OUT" - -. "$DIR/camera.sh" -retval=$? -if [ "$retval" == 0 ] -then - echo -e "Kamera:\t Ja" >>"$OUT" -else - echo -e "Kamera:\t Nein" >>"$OUT" -fi - - -. "$DIR/speaker.sh" -retval=$? -if [ "$retval" == 0 ] -then - echo -e "Speaker:\t Ja" >>"$OUT" -else - echo -e "Speaker:\t Nein" >>"$OUT" -fi - -. "$DIR/wifi.sh" -retval=$? -if [ "$retval" == 0 ] ; then - echo -e "WIFI:\t Ja" >>"$OUT" -else - echo -e "WIFI:\t Nein" >>"$OUT" -fi - -. "$DIR/screen.sh" - -in_retval=$? -if [ "$in_retval" != 0 ] -then - echo -e "Screen:\t $in_retval" >>"$OUT" -else - echo -e "Screen check failed" >>"$OUT" -fi - -#clear -. "$DIR/battery.sh" -retval=$? -if [ "$retval" == 0 ];then - echo -e "AKKU:\t Ja" >>"$OUT" -else - echo -e "AKKU:\t Nein" >>"$OUT" -fi +MODEL $OUT +CPU $OUT +CAMERA $OUT +SPEAKER $OUT +WIFI $OUT +SCREEN $OUT +BATTERY $OUT drives $OUT +RAM $OUT cat "$OUT" diff --git a/wifi.sh b/wifi.sh index af7ec2d..b61d8ce 100644 --- a/wifi.sh +++ b/wifi.sh @@ -1,65 +1,66 @@ #!/bin/bash -SSID="CSR_Gastzugang" -PASSWORD="CSR_2021" +function WIFI(){ + local OUT_FILE=$1 + SSID="CSR_Gastzugang" + PASSWORD="CSR_2021" + #delete network to safely test + nmcli connection delete $SSID + if [[ -z "$SSID" || -z "$PASSWORD" ]]; then + echo "Usage: $0 " + echo -e "WIFI:\t Nein" >>"$OUT_FILE" + return 1 + fi + echo "Verbinde: $SSID ..." + nmcli dev wifi connect "$SSID" password "$PASSWORD" >/dev/null 2>&1 + if [[ $? -ne 0 ]]; then + echo "Verbinding fehlgeschlagen $SSID" + echo -e "WIFI:\t Nein" >>"$OUT_FILE" + return 2 + fi -nmcli connection delete $SSID #delete network to safely test + echo "Verbindsaufbau..." + # Wait up to 15 seconds for connection + for i in {1..15}; do + STATE=$(nmcli -t -f WIFI g) + if [[ "$STATE" == "enabled" ]]; then + CONN=$(nmcli -t -f ACTIVE,SSID dev wifi | grep '^ja' | cut -d: -f2) + if [[ "$CONN" == "$SSID" ]]; then + echo "Verbunden mit $SSID" + break + fi + fi + sleep 1 + done + if [[ "$CONN" != "$SSID" ]]; then + echo "Verbindingsfehler" + echo -e "WIFI:\t Nein" >>"$OUT_FILE" + return 3 + fi -if [[ -z "$SSID" || -z "$PASSWORD" ]]; then - echo "Usage: $0 " - return 1 -fi + echo "Teste (ping 8.8.8.8)..." -echo "Verbinde: $SSID ..." + ping -c 3 8.8.8.8 >/dev/null 2>&1 + PING_STATUS=$? + if [[ $PING_STATUS -ne 0 ]]; then + echo "Kein Internet" + echo -e "WIFI:\t Nein" >>"$OUT_FILE" + return 4 + fi -nmcli dev wifi connect "$SSID" password "$PASSWORD" >/dev/null 2>&1 + echo "Ping Erfolg" -if [[ $? -ne 0 ]]; then - echo "Verbinding fehlgeschlagen $SSID" - return 2 -fi + echo "Teste HTTP..." + curl -s --max-time 5 https://google.com >/dev/null 2>&1 + CURL_STATUS=$? + if [[ $CURL_STATUS -ne 0 ]]; then + echo "HTTP fehlgeschlagen" + echo -e "WIFI:\t Nein" >>"$OUT_FILE" + return 5 + fi -echo "Verbindsaufbau..." - -# Wait up to 15 seconds for connection -for i in {1..15}; do - STATE=$(nmcli -t -f WIFI g) - if [[ "$STATE" == "enabled" ]]; then - CONN=$(nmcli -t -f ACTIVE,SSID dev wifi | grep '^ja' | cut -d: -f2) - if [[ "$CONN" == "$SSID" ]]; then - echo "Verbunden mit $SSID" - break - fi - fi - sleep 1 -done - -if [[ "$CONN" != "$SSID" ]]; then - echo "Verbindingsfehler" - return 3 -fi - -echo "Teste (ping 8.8.8.8)..." - -ping -c 3 8.8.8.8 >/dev/null 2>&1 -PING_STATUS=$? - -if [[ $PING_STATUS -ne 0 ]]; then - echo "Kein Internet" - return 4 -fi - -echo "Ping Erfolg" - -echo "Teste HTTP..." - -curl -s --max-time 5 https://google.com >/dev/null 2>&1 -CURL_STATUS=$? - -if [[ $CURL_STATUS -ne 0 ]]; then - echo "HTTP fehlgeschlagen" - return 5 -fi - -echo "Internet funktioniert!" -return 0 + echo "Internet funktioniert!" + echo -e "WIFI:\t Ja" >>"$OUT_FILE" + return 0 + +} \ No newline at end of file