#!/bin/bash # hwinfo wrapper to use hwinfo with sudo if requested hwinfo() { local use_sudo="" case ${SUDO} in yes|y|true|1) use_sudo=sudo ;; esac ${use_sudo} /usr/sbin/hwinfo $@ } # get_hwinfo $hw_item get_hwinfo() { local enable_desc="0" if [[ $1 = --with-description ]] || [[ $1 = -d ]] then enable_desc=1 shift fi local item="$1" local all local i # handle special items case ${item} in memory) get_hwinfo_memory; return ;; smp) get_hwinfo_smp; return ;; esac all=$(hwinfo --short --"${item}") declare -i i=0 while read device description do # skip the first line (( i++ )) [ ${i} -eq 1 ] && continue if [[ ${enable_desc} = 1 ]] then echo "${device};${description}" else echo "${device}" fi done <<< "${all}" } # remove_duplicates $list remove_duplicates() { local list="$@" local fixed_list=":" local i for i in ${list} do if [[ -z $(echo "${fixed_list}" | fgrep ":${i}:") ]] then fixed_list="${fixed_list}${i}:" fi done unset list # remove all ':' and show the cleaned list # this way fixes double spaces also local counter declare -i counter=0 for i in $(echo ${fixed_list} | sed "s|:| |g") do (( counter++ )) if [[ ${counter} -eq 1 ]] then list="${i}" else list+=" ${i}" fi done echo "${list}" } get_x11_driver_modules() { local modules modules="$(hwinfo --gfxcard | grep 'XFree86 v4 Server Module:' | sed 's/.*Module:\ \(.*\)/\1/')" # use vesa if nothing was found [[ -z ${modules} ]] && modules="vesa" # remove duplicates from list and show it remove_duplicates "${modules}" } get_drm_driver_modules() { local modules modules="$(hwinfo --gfxcard | grep 'Driver:' | sed 's/.*: \"\(.*\)\"/\1/;q')" # use vesa if nothing was found [[ -z ${modules} ]] && modules="uvesafb" # remove duplicates from list and show it remove_duplicates "${modules}" } get_wlan_driver_modules() { local device="$1" local modules if [[ -z ${device} ]] then echo "Error: get_netcard_driver_module(): no device given" return 1 fi modules=$(hwinfo --wlan | grep -B1 "Device File: ${device}" | sed 's/.*Modules: \"\(.*\)\"/\1/;q') remove_duplicates "${modules}" } get_netcard_driver_modules() { local device="$1" local modules if [[ -z ${device} ]] then echo "Error: get_netcard_driver_module(): no device given" return 1 fi modules=$(hwinfo --netcard | grep -B1 "Device File: ${device}" | sed 's/.*Modules: \"\(.*\)\"/\1/;q') remove_duplicates "${modules}" } get_system_type() { local hwinfo local systemtype hwinfo="$(hwinfo --bios --storage)" if [[ ! -z $(echo "${hwinfo}" | grep -i zotac) ]] then systemtype="zotac" elif [[ ! -z $(echo "${hwinfo}" | grep -i CLE266) ]] then systemtype="rangee" else systemtype="standard" fi echo "${systemtype}" } # debug #echo "LAN: $(get_netcard_driver_modules eth0)" #echo "WLAN: $(get_wlan_driver_modules wlan0)" #echo "X11: $(get_x11_driver_modules)" #echo "KMS/FB: $(get_drm_driver_modules)" case $1 in wlan) get_wlan_driver_modules wlan0 ;; lan) get_netcard_driver_modules eth0 ;; vga) get_x11_driver_modules ;; console) get_drm_driver_modules ;; system) get_system_type ;; esac