sobota, 8 marca 2014

Skanowanie po naciśnięciu przycisku na skanerze

Cel:

Skanowanie za pomocą skanera (Canon MP360) po naciśnięciu przycisku.

Opis sytuacji:

Skaner (drukarka wielofunkcyjna) stoi sobie w pokoju koło serwera z Linux-em. Aby zeskanować trzeba podpiąć drukarkę do laptopa, lub do jakiegoś innego komputera. Pomysł jest taki, że można podłączyć skaner do serwera i po naciśnięciu przycisku uruchomić skanowanie, którego wynikiem będzie plik png w danej lokalizacji.

Przygotowanie:


Aby możliwe było skanowanie konieczne są pakiety: sane-utils, sane i cups

Cups są potrzebne aby drukarka była widoczna przez sane.
Po instalacji pakietów należy sprawdzić czy wszystko działa:

scanimage -L


Wynik powinien być podobny do:
device `pixma:04A9263C_8027C0' is a CANON PIXMA MP360 multi-function peripheral

Z pomocy polecenia scanimage można wyczytać jakie dodatkowe opcje ma dany backend sane do skanowania.

Mięsko


Czyli skrypt, który umożliwi więcej niż jedno skanowanie przeniesie wynik do odpowiedniego katalogu:
#!/bin/bash

CURRENT_SCAN_FILE=/tmp/current_scan_file.tiff
OUTPUT_DIR=/mnt/shared/skany
RESOLUTION=300

EMAIL_ADDRESS="root@sobczak.tk"
EMAIL_SUBJECT="Scan image fail"
EMAIL_MESSAGE="/tmp/scaner_fail.msg"

PID_FILE="/var/run/scan-after-button.pid"

if [ ! -d "$OUTPUT_DIR" ]; then
        mkdir $OUTPUT_DIR
fi


echo $$ > $PID_FILE

while true; do
        scanimage --resolution $RESOLUTION --button-controlled=yes > $CURRENT_SCAN_FILE
        if [ $? == 0 ]; then
                CURRENT_TIME=`date +%F_%H.%M.%S`
                convert "${CURRENT_SCAN_FILE}" "${OUTPUT_DIR}/${CURRENT_TIME}.png"
        else
                echo "Scan failed. scanimage output code: $?" > $EMAIL_MESSAGE
                sleep 10;
                mail -s "$EMAIL_SUBJECT" "$EMAIL_ADDRESS" < $EMAIL_MESSAGE
        fi
done

Automatyzacja

Kolejnym krokiem jest dodanie automatyzacji. Umieszczamy skrypt w katalogu /usr/local/sbin/ i sprawdzamy czy wszystko działa jak należy (nie zapomnij o nadaniu praw do wykonywania). Teraz tworzymy skrypty udev dzięki, któremu będziemy mogli reagować na włączenie/wyłączenie skanera. /usr/local/sbin/start-scan-after-button.sh
#!/bin/bash

PID_FILE="/var/run/scan-after-button.pid"

/sbin/start-stop-daemon --start --pidfile $PID_FILE  --background --exec /usr/local/sbin/scan-after-button.sh
/usr/local/sbin/stop-scan-after-button.sh
#!/bin/bash

PID_FILE="/var/run/scan-after-button.pid"
PID=`cat ${PID_FILE}`

pkill -P $PID && kill $PID

rm $PID_FILE
i /etc/udev/rules.d/85-scan-ater-button.rules
ACTION=="add", ENV{ID_MODEL}=="MP360_Series", RUN+="/usr/local/sbin/start-scan-after-button.sh"
ACTION=="remove", ENV{ID_MODEL}=="MP360_Series", RUN+="/usr/local/sbin/stop-scan-after-button.sh"

środa, 26 lutego 2014

Aptitude - krótka ściąga :P

Głównie chodzi mi o komendę, która pozwala ściągnąć całą listę pakietów z repozytorium a nie tylko różnicę:

 aptitude update -o Acquire::Pdiffs=false 

niedziela, 10 lutego 2013

Gigabyte GA-Z77-DS3H i OCZ Verterx 4

Niestety jak się kupuje składaka to nie można być pewnym, że wszystkie części składaka będą ze sobą współgrać. Niestety tak też jest w moim przypadku. Dysk się restartuje i nie da się z niego korzystać. W innym komputerze dysk działa dobrze, a z drugim, talerzowym dyskiem nie ma problemu. Najnowsza wersja firmware dla dysku i dla płyty głównej zainstalowane. Po ostatnich aktualizacjach biosu (od f8 w górę) system w ogóle nie uruchamia się, ale tymczasowe rozwiązanie:

Należy wyłączyć przechodzenie procesora w stan C3/C6 - większe zużycie energii, ale jak również wyłączymy przechodzenie w stan C1 to otrzymujemy większą wydajność.


Aby dokonać naprawy należy :)
  1. Wejść do biosu - klawisz End przy starcie
  2. Wejść w zaawansowane ustawienia - klawisz F1
  3. Przejść przez gąszcz ustawień:
    • M.I.T. 
    • Advanced Frequency Setting
    • Advanced CPU Core Features
    • Wyłączys C3/C6 State Support (ustawić na disabled)
  4. Zapisać zmiany i cieszyć się działającym komputerem
 Ale jest jeden mały problem - kernel Linux-a  od wersji 3.7 olewa ustawienia biosu dotyczące włączania/wyłączania stanu C3/C6 rozwiązaniem jest tylko jedno własna kompilacja jądra - konfiguracja dla mojego zestawu (Z77-DS3H, i7-3770, OCZ Vertex 4 128GB) dostępna w repo git:
https://smichal88@bitbucket.org/smichal88/kernel-config.git
(git clone https://smichal88@bitbucket.org/smichal88/kernel-config.git)


Uaktualnienie biosu płyty Gigabyte GA-Z77-DS3H pod linux-em

  1. Ściągnięcie biosu ze strony http://www.gigabyte.pl/products/page/mb/ga-z77-ds3hrev_10/download/bios
  2. Rozpakowanie archiwum
     7za x mb_bios_ga_z77-ds3h_*.exe 
  3. Wrzucenie pliku z biosem (Z77DS3H.F??f) na pedraka
  4. Aktualizacja biosu z pliku (Przy z starcie wciskamy klawisz End i dalej już wiadomo)

czwartek, 3 stycznia 2013

Dodanie napisów do kontenera mkv

Ostatnio zdarza mi się dodawać napisy do pliku mkv. Aby nie zapomnieć jak to się robi kilka poleceń:
  1. Konwersja napisów z CP1250 na UTF8
    iconv -f CP1250 -t UTF-8  plik_wejsciowy.txt > plik_wyjściowy.txt
    
  2. Zapisanie pliku w zjadliwej przez mkvmerge formie:
    subtitleeditor nazwa_pliku.txt
    
    Zapisz jako → Format SubRip (rozszerzenie powinno się zmienić na srt)
  3. Połączenie napisów z filmem
    mkvmerge -o plik_wyjściowy.mkv -S plik_źródłowy.mkv napisy.srt
    
I już.  
Jak nie wiadomo w jakim kodowaniu jest plik z napisami pomocą służy program enca.
Pakiety potrzebne by magia działała:
aptitude install libc-bin subtitleeditor mkvtoolnix enca


Jeszcze jedna uwaga: Jeżeli film ma inną szybkość klatek na sekundę należy ją ustawić w programie subtitleeditior


Naprawa uszkodzonego pliku mkv:

 

 mkvmerge -o out.mkv --compression -1:none input.mkv

niedziela, 25 marca 2012

niedziela, 4 marca 2012

Mój prompt

By żyło się lepiej czasem trzeba trochę zmienić wygląd promt-a (to co jest przed znakiem zachęty w konsoli):
 if [ "$color_prompt" = yes ]; then                                                                                         
     # Add more info to git branch                                                                                       
     # If changed no commit                                                                                           
     export GIT_PS1_SHOWDIRTYSTATE=true                                                                                     
     # Diff beetwen originy                                                                                           
     export GIT_PS1_SHOWUPSTREAM="verbose"                                                                                   
     # If some file is no track                                                                                         
     export GIT_PS1_SHOWUNTRACKEDFILES=true                                                                                   
     # If somthing is stashed                                                                                          
     export GIT_PS1_SHOWSTASHSTATE=true                                                                                     
     PS1='\[$(tput sgr0)$(tput setaf 5)\]$(__git_ps1 "[%s]")\[$(tput setaf 2)\]\u@\h:\[$(tput sgr0)$(tput setaf 3)\]\w\[$(tput sgr0)\]$ '                                    
     if [ -e /usr/share/terminfo/x/xterm-256color ]; then                                                                            
         export TERM='xterm-256color'                                                                                    
     else                                                                                                    
         export TERM='xterm-color'                                                                                     
     fi                                                                                                     
 else                                                                                                        
     PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '                                                                            
 fi