Возникла тут необходимость сканировать с Raspberry Pi. Но вот как то нет под нее сетевого драйвера для эпсона, да и складывать файлы на карту памяти как то не очень хотелось, тк Пи используется в качестве тонкого клиента для подключения по RDP и ограничена по самое нехочу.
Написал скрипт, который можно запустить по ссш
ssh -X user@host 'script'
оно выполняется там и рисует диалоги у нас с помощью zenity.
Так вот скрипт я написал, а вот завести пользователя, под которым можно бы подключаться по ссш без пароля (ключами ссш решаемо) и под ним выполнять ничего кроме скрипта (главный вопрос) - не могу :( Ну или могу, но не знаю как.
Система xubuntu, пробовал завести обычного пользователя, так он почему то может
cat /home/otheruser/file.txt
Что не есть хорошо
Ну и сам скрипт
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
#!/bin/bash #init tmpdir="/tmp/scan"`date "+%d%m%Y%H%M%S"` #папка куда складывать сканы outdir="/home/scans/" #подсеть где работает скансервер net="10.10.10."
#---------------------------------------------------------------# # scan profiles # #---------------------------------------------------------------# # Name | res | color | pdf # #---------------------------------------------------------------# #1 Document | 150 | Gray | no # #2 Document C | 150 | Color | no # #3 Document PDF | 150 | Gray | yes # #4 Document C PDF | 150 | Color | yes # #5 Passport | 150 | Color | yes # -у нужен для сканирования половинки листа #6 Photo | 300 | Color | no #
pdfArray[3]=1 pdfArray[4]=1 pdfArray[5]=1 resArray=( "" 150 150 150 150 "150 -y 150" 300 ) colArray=( "" Gray Color Gray Color Color Color )
#выбираем сканер, можно сразу прописывать последний октет айпишника chscan () { zenity --width=300 --height=300 --list \ --title="Список сканеров" \ --text="Выберите сканер из списка (переключить точечку), если необходимо" \ --hide-header \ --radiolist \ --ok-label="Продолжить" \ --hide-column=2 \ --column="" --column="ip" --column="Сканер" \ true 11 "Директор" \ false 12 "Бухгалтер" \ false 13 "Холл" }
#выбираем профиль сканирования chq () { zenity --width=300 --height=300 --list \ --title="Профиль сканирования" \ --hide-header \ --ok-label="Сканировать" \ --text="Выберите подходящий профиль для сканирования.\n\Есть возможность сканировать несколько страниц (оно спросит).\n\При сканировании в PDF все страницы в итоге будут добавлены в один файл.\n\Через некоторое время документы появятся на сервере в папке Scans.\n\Будьте терпеливы :)" \ --radiolist --hide-column=2 \ --column="" --column="q" --column="Профиль" \ true 1 "Чернобелый документ" \ false 2 "Цветной документ" \ false 3 "PDF Многостраничный" \ false 4 "PDF Цветной многостраничный" \ false 5 "PDF Паспорт" \ false 6 "Фото цвет" }
#сама процедура сканирования scanme () { #проверяем наличие временной папки if [ -d $tmpdir ]; then #папка есть сканируем scanimage -d $device --x-resolution=${resArray[$q]} --y-resolution=${resArray[$q]} --mode=${colArray[$q]} --format=tiff | \ convert tiff:- -quality 50 -quiet $tmpdir"/"`date "+%d-%m-%Y_%H%M%S"`.jpg | \ zenity --progress --pulsate --no-cancel --auto-close --title="Состояние" --text="Идет сканирование..." #запрос на сканирование еще одной странички if zenity --question --title="Вопрос" --text="Отсканировать еще одну страницу?"; then scanme else #пдф pdf=${pdfArray[$q]} if [ -z "$pdf" ]; then #если нет - просто перемещаем файлы в итоговую папку mv $tmpdir/* $outdir && rm -rf $tmpdir else # конвертим и перемещаем в итоговую папку convert $tmpdir/*.jpg $outdir`date "+%d-%m-%Y_%H%M%S"`.pdf && rm -rf $tmpdir fi
fi else #если нет папки, то создадим ее mkdir $tmpdir scanme fi }
#проверяем были ли выбран сканер while [ -z "$ip" ]; do ip=$(chscan) if [ -z "$ip" ]; then if zenity --width=300 --question --title="Вопрос" --text="Вы не выбрали сканер!\n\n\Отменить сканирование?"; then exit 0 fi fi done
#проверяем были ли выбран профиль сканирования while [ -z "$q" ]; do q=$(chq) if [ -z "$q" ]; then if zenity --width=300 --question --title="Вопрос" --text="Вы не выбрали профиль сканирования.\n\n\Отменить сканирование?"; then exit 0 fi fi done
#генерируем имя девайса - драйвер+подсеть+ip device="epkowa:net:"$net$ip #вызываем процедуру сканирования scanme
exit 0
|
command="ваш скрипт"
и куча опций на выбор
no-port-forwarding
no-X11-forwarding
no-agent-forwarding
no-pty
и так далее man ssh
при подключении по ssh будет запускаться только скрипт