Попробовал соорудить простецкий GUI :) Вроде фурычит :)))
Сергей, а поиск по комментариям будет? :) А то без поиска бида-бида :)))
#!/bin/bash
# Требует: zenity gksu readlink xrandr lspci sed cut tr
XXRA=`xrandr | grep -m 1 current | sed 's/.*\(current[0-9x ]*,\).*$/\1/g;s/current//' | tr -d ', '`
XRES=`echo $XXRA | cut -d 'x' -f 1` # X
YRES=`echo $XXRA | cut -d 'x' -f 2` # Y
if [ "$XRES" -lt 100 ]; then XRES=630; else let XRES=XRES-40; fi
if [ "$YRES" -lt 100 ]; then YRES=470; else let YRES=YRES-40; fi
if [ "$1" = "-h" ] || [ "$1" = "--help" ]
then
echo "Ключи запуска:"
echo "------------------------------------------------------------------"
echo " -r или --root - Запустить от пользователя root для отчета"
echo " -h или --help - Данная информация по ключам командной строки"
exit
fi
if [ "$1" = "-r" ] || [ "$1" = "--root" ]
then
ROOT=1
else
ROOT=0
if [ "$XRES" -lt 800 ]; then XRES2=XRES; else XRES2=720; fi
choice=`zenity --list --width=$XRES2 --height=250 --title "Требуемое действие" --text "Выберите требуемое действие:" --radiolist --column "V" --column "Ваш выбор" TRUE "1. Создать отчет о работе компьютера и периферии (требуются права ROOT)" FALSE "2. Выполнить поиск по базы данных проб оборудования" `
cho=${choice:0:1}
if [ "1" = "$cho" ]
then
ABSFN=$(readlink -e "$0")
gksu "$ABSFN -r"
exit
fi
if [ "2" != "$cho" ]
then
zenity --error --text="Выбор не сделан!\nРабота закончена!"
exit
fi
fi
# Читаем lspci
ARRLS=( )
ARRBAD=( )
while read lin
do
if [ "${#lin}" -gt 10 ]
then
lin=$(echo $lin | tr -d '|' ) # 0000:00:00.0 Host bridge [0600]: Intel Corporation 440FX - 82441FX PMC [Natoma] [8086:1237] (rev 02)
a1="PCI"
a2=`echo $lin | cut -d ' ' -f 1` # 0000:00:00.0
lin=${lin#$a2}
a4=`echo $lin | sed 's/^.*\(\[[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]\]:\).*$/\1/g' | tr -d ':[]' ` # 0600
lin=`echo $lin | sed 's/\[[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]\]:/|/' `
a6=`echo $lin | sed 's/^.*\(\[[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]:[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]\]\).*$/\1/g' | tr -d '[]' ` # 8086:1237
lin=`echo $lin | sed 's/\[[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]:[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]\]/|/' `
a3=`echo $lin | cut -d '|' -f 1 | sed 's/^[ ]*//;s/[ ]*$//'` # Host bridge
a5=`echo $lin | cut -d '|' -f 2 | sed 's/^[ ]*//;s/[ ]*$//'` # Intel Corporation 440FX - 82441FX PMC [Natoma]
a7=`echo $lin | cut -d '|' -f 3 | sed 's/^[ ]*//;s/[ ]*$//'` # (rev 02)
if [ "${#a4}" -gt 1 ] && [ "${#a3}" -gt 1 ] && [ "${#a6}" -gt 1 ] && [ "${#a5}" -gt 1 ]
then
lin="$a1|$a2|$a3|$a4|$a5|$a6|$a7"
ARRLS=( "${ARRLS[@]}" "$lin" )
ARRBAD=( "${ARRBAD[@]}" "0" )
fi
fi
done < <( lspci -nn -D )
# Читаем usb
while read lin
do
if [ "${#lin}" -gt 1 ]
then
if [ -f /sys/bus/usb/devices/$lin/product ] && [ -f /sys/bus/usb/devices/$lin/idVendor ] && [ -f /sys/bus/usb/devices/$lin/idProduct ]
then
a1="USB"
a2=""
a3="USB device"
a4=""
a5=`cat /sys/bus/usb/devices/$lin/product`
a6=`cat /sys/bus/usb/devices/$lin/idProduct`
a7=`cat /sys/bus/usb/devices/$lin/idVendor`
a6="$a7:$a6"
a7=""
if [ ${#a5} -gt 1 ] && [ ${#a6} -gt 1 ]
then
if [ "$a6" != "1d6b:0001" ]
then
lin="$a1|$a2|$a3|$a4|$a5|$a6|$a7"
ARRLS=( "${ARRLS[@]}" "$lin" )
ARRBAD=( "${ARRBAD[@]}" "0" )
fi
fi
fi
fi
done < <( ls -1 /sys/bus/usb/devices/ )
# Выполняем
if [ "$ROOT" -eq 1 ]
then
# От Рута
# Новый временный каталог
tmpdir=`mktemp -dt "$(basename $0).XXXXXXXXXX"`
username=`whoami`
if [ "$username" = "root" ]
then
userhome="/root/"
else
userhome="/home/$username"
fi
if [ -d $userhome ]
then
echo $userhome
else
zenity --error --text="Ошибка при определении каталога пользователя !\nРабота закончена!"
exit
fi
existfile=`find $userhome/.hcl-get/ -name *.tar.bz2 | head -n 1`
if [ -f $existfile ]
then
existfile=`basename $existfile | cut -d "." -f1 `
zenity --warning --text="Ваш номер пробы: $existfile \n\nТеперь, пожалуйста, кратко прокомментируйте корректность работы дистрибутива на Вашем компьютере"
else
#Отправка основы
(echo y | hcl-get -r >$tmpdir/hcl-main-number.txt ; echo $? >$tmpdir/hcl-main-exit.txt ; echo "100" )| zenity --progress --pulsate --title="Сбор данных о устройствах компьютера и занесение в базу" --text "Подождите! Идет работа..." --auto-close
hclexit=`cat $tmpdir/hcl-main-exit.txt`
if [ "$hclexit" -eq 0 ]
then
hclout=`cat $tmpdir/hcl-main-number.txt | grep "ей присвоен номер:" | cut -d ":" -f2 `
zenity --warning --text="Файла для базы успешно отправлен !\nВаш номер пробы: $hclout \n\nТеперь, пожалуйста, кратко прокомментируйте корректность работы дистрибутива на Вашем компьютере"
else
hclout=`cat $tmpdir/hcl-main-number.txt | tail -n 2 `
zenity --error --text="Ошибка при отправке файла для базы !\n\n-----------------------\n$hclout\n-----------------------\n\nРабота закончена!"
exit
fi
fi
#Подготовка комментария
comm1=`echo -e "Опишите, пожалуйста, проблемы при установке:\n\n\nОпишите, пожалуйста, проблемы при работе:\n\n\nОпишите, пожалуйста, общие ощущения от работы дистрибутива:\n" | zenity --width=$XRES --height=$YRES --text-info --title "Общий отчет о работе дистрибутива на Вашем компьютере:" --editable`
ARGS=""
total=${#ARRLS[@]}
comm2=""
if [ "$total" -gt 0 ]
then
comm2="${comm2}"$'\n'$'\n'"${comm2}"
for (( index=0; index<$total; index++ ))
do
ABOOL="FALSE";
lin=${ARRLS[$index]}
let a1=index+1
a2=`echo $lin | cut -d '|' -f 5`
a3=`echo $lin | cut -d '|' -f 6`
a4=`echo $lin | cut -d '|' -f 3`
ARGS="$ARGS $ABOOL \"$a1 $a2\" \"$a3\" \"$a4\" "
done
ARGS="--list --width=$XRES --height=$YRES --title \"Не работающие или проблемные устройства\" --text \"Отметье все устройства которые у Вас не заработали или с которыми были проблемы\" --checklist --column \"V\" --column \"Название проблемного устройства\" --column \"VID&PID\" --column \"Тип устройства\" $ARGS"
choice=`echo $ARGS | xargs zenity`
IFS='|' read -r -a ARRRD <<<"$choice"
total2=${#ARRRD[@]}
if [ "$total2" -gt 0 ]
then
#по устройствам
for (( index2=0; index2<$total2; index2++ ))
do
lin2=${ARRRD[$index2]}
b1=`echo $lin2 | cut -d ' ' -f 1`
let b2=b1-1
ARRBAD[$b2]=1
lin3=${ARRLS[$b2]}
a3=`echo $lin3 | cut -d '|' -f 5`
a4=`echo $lin3 | cut -d '|' -f 6`
a7=`echo $lin3 | cut -d '|' -f 3`
a5=`echo -e "Опишите, пожалуйста, проблемы c устройством $a3:\n\n\nЕсли Вы нашли решение проблемы, то опишите его пожалуйста:\n" | zenity --text-info --width=$XRES --height=$YRES --title "Проблемы с устройством $a3 ($a4)" --editable | tr '\n' '^' `
a0="BAD | $a4 | $a3 - $a7 | $a5 "
comm2="${comm2}"$'\n'"${a0}"
done
fi
for (( index=0; index<$total; index++ ))
do
lin=${ARRLS[$index]}
a2=`echo $lin | cut -d '|' -f 5`
a3=`echo $lin | cut -d '|' -f 6`
a4=`echo $lin | cut -d '|' -f 3`
a6=${ARRBAD[$index]}
if [ "$a6" -eq 0 ]
then
a0="OK! | $a3 | $a2 - $a4 | Проблем не зафиксированно!"
comm2="${comm2}"$'\n'"${a0}"
fi
done
else
zenity --error --text="Устройства не найдены!"
fi
#Пишем комментарий в файл
echo "$comm1$comm2" > $tmpdir/hcl-comm-write.txt
# Отправка комментария
existfile=`find $userhome/.hcl-get/ -name *.tar.bz2 | head -n 1`
if [ -f $existfile ]
then
echo "$existfile | hcl-get -c $tmpdir/hcl-comm-write.txt"
echo $existfile | hcl-get -c $tmpdir/hcl-comm-write.txt
if [ $? -ne 0 ]
then
zenity --error --text="Отправка закончилась неудачей!"
else
zenity --warning --text="Комментарий добавлен!\nСпасибо за Ваш отзыв!"
fi
else
zenity --error --text="Пробы не найдены!\nОтправка комментария не возможна!"
fi
else
# От Юзера
ARGS=""
total=${#ARRLS[@]}
if [ "$total" -gt 0 ]
then
for (( index=0; index<$total; index++ ))
do
ABOOL="FALSE";
if [ $index -eq 0 ]; then ABOOL="TRUE"; fi
lin=${ARRLS[$index]}
let a1=index+1
a2=`echo $lin | cut -d '|' -f 5`
a3=`echo $lin | cut -d '|' -f 6`
a4=`echo $lin | cut -d '|' -f 3`
ARGS="$ARGS $ABOOL \"$a1 $a2\" \"$a3\" \"$a4\" "
done
ARGS="--list --width=$XRES --height=$YRES --title \"Поиск информации по устройству\" --text \"Выберите по какому устройству будет производится поиск\" --radiolist --column \"V\" --column \"Название искомого устройства\" --column \"VID&PID\" --column \"Тип устройства\" $ARGS"
varexit=0
while [ "$varexit" -eq 0 ]
do
choice=`echo $ARGS | xargs zenity`
if [ $? -ne 0 ]; then zenity --warning --text="Работа закончена!"; varexit=1; exit; fi
cho=`echo $choice | cut -d ' ' -f 1`
let index=cho-1
lin=${ARRLS[$index]}
a2=`echo $lin | cut -d '|' -f 5`
a3=`echo $lin | cut -d '|' -f 6`
if [ ${#a2} -gt 1 ] && [ ${#a3} -gt 1 ]
then
# Пробуем искать
varread1=`hcl-get -q $a3`
if [ $? -ne 0 ]; then zenity --error --text="Ошибка чтения из базы данных устройств\nРабота закончена!"; exit; fi
varread2=`hcl-get -q $a2`
#Удалим одинаковые строки
varread=`echo "$varread1\n$varread2" | grep '|' | uniq -u`
#вывод окна
IFS='\n' read -r -a ARRRD <<<"$varread"
ARGS2=""
total2=${#ARRRD[@]}
if [ "$total2" -gt 0 ]
then
for (( index2=0; index2<$total2; index2++ ))
do
lin2=${ARRRD[$index2]}
let a9=index2+1
a5=`echo $lin2 | cut -d '|' -f 1`
a6=`echo $lin2 | cut -d '|' -f 2`
a7=`echo $lin2 | cut -d '|' -f 3`
a8=`echo $lin2 | cut -d '|' -f 4`
if [ ${#a6} -gt 1 ] && [ ${#a7} -gt 1 ]
then
ARGS2="$ARGS2 \"$a9 $a5 $a6 $a7 $a8\" "
else
ARGS2="$ARGS2 \"$a9 $a5\" "
fi
done
ARGS2="--list --width=$XRES --height=$YRES --title \"Найденная в базе информации по устройству\" --text \"Выберите какую запись по устройству вывести на экран\" --column \"Запись по устройству\" $ARGS2"
varexit2=0
while [ "$varexit2" -eq 0 ]
do
choice=`echo $ARGS2 | xargs zenity`
if [ $? -ne 0 ]
then
varexit2=1
else
cho=`echo $choice | cut -d ' ' -f 1`
let index3=cho-1
lin3=${ARRRD[$index3]}
a5=`echo $lin3 | cut -d '|' -f 1`
a6=`echo $lin3 | cut -d '|' -f 2`
a7=`echo $lin3 | cut -d '|' -f 3`
a8=`echo $lin3 | cut -d '|' -f 4 | tr '^' '\n'`
echo "$a7 ($a6) - $a5 \n\n$a8" | zenity --text-info --title "Комментарий по $a7 ($a6)"
fi
done
else
zenity --warning --text="По запросу ничего не найдено!"
fi
else
zenity --error --text="Ошибка чтения строки описания устройства!\nРабота закончена!"
fi
done
else
zenity --error --text="Устройства не найдены!\nРабота закончена!"
fi
fi