Leczymy DRMosis Adobensis

No dobra zrobiło się zbyt ekscytująco (zbyt łatwo wygląda), żeby odkładać w nieskończoność. Choroba została oswojona. Wiadomo już, że specyfiki które mają leczyć DRMozę działają – mmazur sprawdził, ja chcę się tylko przekonać czy działa też via wine – mimo, że wiem, że działa bo ktoś w komentarzu u mmazura się pochwalił.
Niby cały czas mam gdzieś tu na boku qemu, ale na moim starym kompie wirtualny PCet to udręka jest raczej. Przy okazji okazało się, że niewiele trudniej można sobie poradzić z innymi chorobami na jakie cierpią ebooki, instrukcje zebrali w jednym miejscu autorzy serwisu eksiążki.org Systemy DRM – przegląd, skuteczność rozwiązań jak widać, a mówi się, że pieniądze nie leżą na ulicy, z punktu widzenia właścicieli systemów DRM chyba jednak leżą.

No dobra zrobiło się zbyt ekscytująco (zbyt łatwo wygląda), żeby odkładać w nieskończoność. Choroba została oswojona. Wiadomo już, że specyfiki które mają leczyć DRMozę działają – mmazur sprawdził, ja chcę się tylko przekonać czy działa też via wine – mimo, że wiem, że działa bo ktoś w komentarzu u mmazura się pochwalił.
Niby cały czas mam gdzieś tu na boku qemu, ale na moim starym kompie wirtualny PCet to udręka jest raczej. Przy okazji okazało się, że niewiele trudniej można sobie poradzić z innymi chorobami na jakie cierpią ebooki, instrukcje zebrali w jednym miejscu autorzy serwisu eksiążki.org Systemy DRM – przegląd, skuteczność rozwiązań jak widać, a mówi się, że pieniądze nie leżą na ulicy, z punktu widzenia właścicieli systemów DRM chyba jednak leżą.

Na początek przygotujemy szpital, nie chodzi przecież o to, żeby nawtykać jakichś śmieci to czyściutkiego profilu wine gdzie zainstalowałem ADE.

$ cp -r ~/.wine-Adobebook/ ~/.wine-ADEcrypt
$ export WINEPREFIX="/home/wariat/.wine-ADEcrypt"

$ wget http://pastie.org/pastes/1030386/download -O ineptkey-5.0.pyw
$ wget http://pastebin.com/download.php?i=kuKMXXsC -O ineptpdf-8.4.42.pyw
$ wget http://www.python.org/ftp/python/2.7/python-2.7.msi
$ wget http://www.voidspace.org.uk/downloads/pycrypto-2.1.0.win32-py2.7.zip

$ unzip pycrypto-2.1.0.win32-py2.7.zip

$ wine msiexec /i python-2.7.msi
$ wine pycrypto-2.1.0.win32-py2.7.exe

Gdyby cokolwiek wymagało wyjaśnienia w co szczerze wątpię. Najpierw skopiowałem profil .wine-Adobebook gdzie zainstalowany jest Adobe Digital Editions jako .wine-ADEcrypt. Później ten nowy ustawiłem jako domyślny (w tym otwartym terminalu oczywiście). Następnie pobrałem z netu wszystko co podobno jest potrzebne, czyli windzianą wersję Pythona 2.7, moduł PyCrypto do niego i sam skrypt pobierający klucz deszyfrujący z ADE, oraz ineptpdf czyli szczepionkę dla plików PDF z linku znalezionego w podlinkowanym wyżej artykule z eksiążki.org.
Ostatnie dwa wiersze to oczywiście instalacja obu wyżej wymienionych paczek z Pythonem. Od tego momentu profil .wine-ADEcrypt to profil .wine-Adobebook wzbogacony o Pythona.
Mam nadzieję, że tym razem zanim ktoś powie, że to skomplikowane (cześć Paweł 🙂 zauważy, że 90% powyższego da się zrobić tak, że zamiast literek w konsoli potrzebne będą obrazki w co i kiedy kliknąć, albo nawet i nie to ;-).

Kiedy już wszystko jest pobrane trzeba włączyć jeden skrypt.

$ wine ~/.wine-ADEcrypt/dosdevices/c\:/Python27/python.exe ineptkey-5.0.pyw 




A później drugi skrypt

$ wine ~/.wine-ADEcrypt/dosdevices/c\:/Python27/python.exe ineptpdf-8.4.42.pyw


Tam wskazujemy chorego i miejsce gdzie ma się znaleźć zdrowa kopia pacjenta klikamy Decrypt i …

$ evince Zdrowa\ Gorzka\ czekolada.pdf




… już.

Strasznie jestem ciekaw ile kosztuje obsługa DRM (patrząc od strony wydawcy) czyli o ile tańsze mogłyby być książki przyjazne dla użytkowników lub o ile więcej można by zapłacić ich autorom.
Bo przecież nawet jeśli przyjąć – co nie jest prawdą moim zdaniem – że wielu tzw. ZU by nie potrafiło, to pewnie za chwilę ktoś wyciągnie ku nim rękę i zmontuje klikalną wersję wszystkiego (o ile już nie zmontował). A jeśli jeszcze zauważyć, że przecież są ludzie którzy – z nieznanych mi pobudek – ciężko pracują skanując papierowe książki aby je wrzucić na jakieś torrenty to … cóż, spodziewałem się, że procedura jest wykonalna przy odrobinie zacięcia, przez myśl mi nie przeszło, że sprowadza się do bezmyślnego klikania w instalatory i skrypty (pod Windows™ chyba nie używa się wine 😉

Przechodzę chyba szybciej do punktu drugiego i wybieram czytnik dla siebie. Książki z DRM da się obsłużyć bez windowsów! 🙂

Oswajamy DRMozę

Od jakiegoś czasu – bardzo powoli zaczynam się zastanawiać nad zakupem e-book readera. Bardzo powoli bo na razie wciąż nie bardzo jest co na takiej zabawce czytać, a można założyć, że im później kupi się urządzenie tym będzie ono tańsze i/lub lepsze niż to co w danym momencie dostępne jest na rynku. No ale reader jest po to, żeby czytać, a to że dostępne jest niewiele to nie znaczy, że nic.
Pomyślałem, że trzeba zobaczyć co z zakażonym DRM ebookiem da się zrobić nie posiadając windowsa. Potrzebny był mi też plik testowy do readera jak już w końcu pójdę go oglądać w sklepie. I tak doszło do tego, że trochę na chybił trafił wybrałem i kupiłem książkę na (w ?) virtualo. Wersja PDF zakażona DRMosis Adobensis.

Od jakiegoś czasu – bardzo powoli zaczynam się zastanawiać nad zakupem e-book readera. Bardzo powoli bo na razie wciąż nie bardzo jest co na takiej zabawce czytać, a można założyć, że im później kupi się urządzenie tym będzie ono tańsze i/lub lepsze niż to co w danym momencie dostępne jest na rynku. No ale reader jest po to, żeby czytać, a to że dostępne jest niewiele to nie znaczy, że nic.
Pomyślałem, że trzeba zobaczyć co z zakażonym DRM ebookiem da się zrobić nie posiadając windowsa. Potrzebny był mi też plik testowy do readera jak już w końcu pójdę go oglądać w sklepie. I tak doszło do tego, że trochę na chybił trafił wybrałem i kupiłem książkę na (w ?) virtualo. Wersja PDF zakażona DRMosis Adobensis.

Sklep już kiedy kupowałem (ale zanim zapłaciłem) lojalnie poinformował mnie, że jeśli chodzi o czytanie tego co mam zamiar kupić to mogę sobie te moje linuksy wsadzić, pozwoliłem sobie tę przemiłą sugestię zignorować – ale miło, że ostrzegają!


Po zakupie książka trafiła w serwisie do działu Moja Biblioteka gdzie znalazłem link do pobrania pliku. No to pobrałem…

wariat@coyote ~/Desktop/ebook $ ls -l Gorzka*
-rw-r--r-- 1 wariat wariat 1826 10-21 22:46 Gorzka czekolada.acsm


Jak na książkę to trochę mało to to waży… w środku trochę śmieci które pozwoliłem sobie zamazać na obrazku bo to w końcu moja książka (w sensie egzemplarz) i nikt bez mojej zgody mi jej na makulaturę wynosił nie będzie! 😀

Jest tam groźnie wyglądający tag <expiration /> I coś co wygląda jak bezpośredni link do zakażonego PDF’a no to … pobieramy oczywiście bez żadnej nadziei na sukces 😀

wariat@coyote ~/Desktop/ebook $ wget http://adobe.virtualo.pl/media/cf BLA BLA BLA 207.pdf -O Gorzka\ czekolada.pdf
--2010-10-21 23:06:07--  http://adobe.virtualo.pl/media/cf BLA BLA BLA 207.pdf
Translacja adobe.virtualo.pl... 94.23.225.21
Łączenie się z adobe.virtualo.pl|94.23.225.21|:80... połączono.
Żądanie HTTP wysłano, oczekiwanie na odpowiedź... 200 OK
Długość: 1896677 (1,8M) [application/pdf]
Zapis do: `Gorzka czekolada.pdf'

100%[===================================================================================================>] 1.896.677    115K/s   w  16s     

2010-10-21 23:06:23 (116 KB/s) - zapisano `Gorzka czekolada.pdf' [1896677/1896677]

Chorego PDFa tak po prostu otworzyć się nie da (no przecież ostrzegali). Ale nie mogłem nie spróbować.


Na początek chodzi o samo otwarcie ebooka na komputerze. Wymagany jest do tego niejaki Adobe Digital Editions którego oczywiście w wersji na Linuksa nie ma (a wersja dla windy dostępna jest do pobrania po kliknięciu installation Technote), Wersji na lin nie ma ale jest wine.

$ export WINEPREFIX="/home/wariat/.wine-Adobebook"
$ winecfg
$ wine AdobeDigitalEditions-1.7.2.exe

Dalej, dalej instalatorze gadgeta. Program się za chwilę uruchomi informując, że teraz trzeba się zarejestrować w niejakim Adobe ID. Pojęcia nie mam czy trzeba podać ten sam email co w sklepie, czy można dowolny ale ponieważ wokół czai się całe zUo wielkich korporacji na wszelki wypadek podałem ten sam (prawie fake) adres. Dalej bez pudła. Przeciągnięcie na ADE pliku Gorzka czekolada.acsm z virtualo pozwoliło pobrać książkę i można czytać


I wydawałoby się, że to nadal nic, ale jeśli dobrze rozumiem mogę teraz ten pobrany przez ADE plik PDF („~/My Digital Editions/Gorzka czekolada.pdf”) podłożyć do Calibre i co prawda tam go nie przeczytam, ale będę mógł przesłać go na urządzenie (ebook reader) i wszystko będzie działało. (Calibre FAQ: How do I use purchased epub books). Tu pozostaje problem, czy ADE jarnięty pod wine pozwoli na uznanie czytnika ale jest nadzieja, a Nadzieja prababką hackera więc szansa istnieje.

No dobrze, ale co gdybyśmy chcieli plik z DRMosis Adobensis wyleczyć? Jedno co wiemy na pewno o systemach DRM to, że są nieskuteczne w co najmniej takim samym stopniu jak upierdliwe. Można nawet zaryzykować stwierdzenie, że im większa upierdliwość tym mniejsza skuteczność (bo większe ciśnienie, żeby się draństwa pozbyć) ale to zupełnie inna bajka.
Chcemy więc leczyć, a żeby wyleczyć trzeba mieć lekarstwo. Czasy mamy takie, że jak człowiek czegoś nie wie to sprawdza w wikipedii, a tam w sekcji References artykułu o ADE wiele obiecujący link: Circumventing Adobe ADEPT DRM for EPUB. No to chyba jesteśmy w domu. Co prawda PDF to nie EPUB ale jak jest lekarstwo na jedno to pewnie obok zaraz jest i na drugie.

I tu miał być ciąg dalszy eksperymentów, odkładany i odkładany aż do wczoraj kiedy ukazał się artykuł mmazura mmazur: Kindle i obchodzenie zabezpieczeń Babci Jagódki już praktycznie wiem, że się da, a skoro ciśnienie do eksperymentów miałem słabe – i klikałem powyższe z pięć tygodni (z czego tak naprawdę godzinę) to dokończę pewnie tylko dla własnej pamięci – później :D.
Generalnie samo leczenie jak widać u mmazura jakichś poważnych czarów nie wymaga, pewnie za chwilę pojawi się też automat który poprosi tylko o podanie nazwy pliku wynikowego i go zapisze – a przy odrobinie szczęscia ów automat też da się jarnąć pod wine. Na ten moment tak czy siak, zaklęcia są gotowe wystarczy odpalić po kolei:

Czy warto w ogóle zabierać się za leczenie plików? Uważam, że tak. Po pierwsze plik wyleczony jest łatwiejszy w obsłudze, bo po prostu działa. No i nie ma ryzyka, że nasza cyfrowa biblioteczka zostanie zniknięta jak któregoś dnia księgarnia, czy sam Adobe uzna, że zwija biznes razem z zakupionymi przez użyszkodników książkami. Bo jak mówiłem nikt mi moich książek bez mojej wiedzy na makulaturę wynosił nie będzie!
Warto też pamiętać o przywróceniu standardowych możliwości dokumentu elektronicznego jak na przykład copy/paste fragmentów. Nie żeby codzień wszyscy pisali recenzje książek, ale nie po to wymyślono ebooki, żeby się nie dało.

Który serial jest który?

Problem: stoi sobie komputer i ma wpięte dwa adaptery USBRS232C, do których dalej podpięte są dwa różne urządzenia. Urządzeń rozpoznać się nie da bo do nich się tylko rozmawia z zawrotną prędkością 300 bps. Ale rozmawia się do nich o czymś innym. Trzeba mieć pewność, że rozmawia się do właściwego, bo inaczej nie funguje.
Wodzu zgodnie z zasadami proponował podłączyć, zostawić i założyć, że zawsze porty po odpaleniu kompa pojawią się w tych samych miejscach. To dobre rozwiązanie bo nie trzeba nic robić, a jest duża szansa, że po prostu zadziała. Ale da się lepiej.

Problem: stoi sobie komputer i ma wpięte dwa adaptery USBRS232C, do których dalej podpięte są dwa różne urządzenia. Urządzeń rozpoznać się nie da bo do nich się tylko rozmawia z zawrotną prędkością 300 bps. Ale rozmawia się do nich o czymś innym. Trzeba mieć pewność, że rozmawia się do właściwego, bo inaczej nie funguje.
Wodzu zgodnie z zasadami proponował podłączyć, zostawić i założyć, że zawsze porty po odpaleniu kompa pojawią się w tych samych miejscach. To dobre rozwiązanie bo nie trzeba nic robić, a jest duża szansa, że po prostu zadziała. Ale da się lepiej.

Za utworzenie pliku urządzenia odpowiada niejaki UDEV, który robi wiele rzeczy często zahaczających o czary, przez co wariaty się go boją, okazuje się, że chyba nie potrzebnie.
Wtyczki oczywiście zostają wpięte raz na stałe, więc o ile najbardziej chińskie z chińskich adapterów USBRS232 Bus 001 Device 034: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port same w sobie są również nie do rozpoznania, o tyle gniazdko gdzie są wetknięte już owszem. W moim przypadku ona wylądowały w dwóch pierwszych złączach podpiętego do eeeBoxa huba USB.

Cała magia sprowadza się do:

udevadm info -ap /sys/class/tty/ttyUSB0
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.1/1-2.1:1.0/ttyUSB0/tty/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.1/1-2.1:1.0/ttyUSB0':
    KERNELS=="ttyUSB0"
    SUBSYSTEMS=="usb-serial"
    DRIVERS=="pl2303"
    ATTRS{port_number}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.1/1-2.1:1.0':
    KERNELS=="1-2.1:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="pl2303"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bNumEndpoints}=="03"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceSubClass}=="00"
    ATTRS{bInterfaceProtocol}=="00"
    ATTRS{modalias}=="usb:v067Bp2303d0300dc00dsc00dp00icFFisc00ip00"
    ATTRS{supports_autosuspend}=="1"
(...)

gdzie w pierwszej sekcji interesuje nas: KERNEL==”ttyUSB0″, w drugiej nic, a w trzeciej KERNELS==”1-2.1:1.0″

Powstaje więc regułka (gwiazdka zastępuje numer portu!!!):

/etc/udev/rules.d/00-ttyUSB.rules

KERNEL=="ttyUSB*", KERNELS=="1-2.1:1.0", NAME="ttyTABLICA"

tak samo z drugim adapterem i … no i po prostu działa:

yogi ~ # cat /etc/udev/rules.d/00-ttyUSB.rules 

KERNEL=="ttyUSB*", KERNELS=="1-2.1:1.0", NAME="ttyTABLICA"
KERNEL=="ttyUSB*", KERNELS=="1-2.2:1.0", NAME="ttyWYSWIETLACZ"

yogi ~ # ls -l /dev/tty* | grep 23:
crw-rw---- 1 root uucp 188,  0 07-15 23:49 /dev/ttyTABLICA
crw-rw---- 1 root uucp 188,  1 07-15 23:50 /dev/ttyWYSWIETLACZ

Okazuje się, że nie taki UDEV straszny jak sobie wariat wyobrażał, a przy okazji bonus bo nie trzeba nawet pamiętać co było wpięte jako ttyUSB0 bo widać po nazwie urządzenia.

Uciekający kursor schwytany!

Kilka razy spotkałem się w starych laptopach z problemem kursora myszy który samowolnie udawał się w sobie tylko znanym kierunku. Trafiło też jakiś czas temu we Freda (starą Tecrę znaczy). A że ta była mi chwilowo potrzebna na dłużej co wykluczało permanentną obsługę z klawiatury, kursor siedział cały czas schowany w lewym dolnym rogu ekranu.
W pierwszym odruchu chciałem po prostu wyłączyć myszkę w systemie (u Freda mieszka Windows XP), kłopot polega na tym, że się nie da. Można odinstalować co powoduje, że winda chce zrobić restart, po którym instaluje łechtaczkę z powrotem, opcja wyłączenia urządzenia jest nieaktywna (de facto nieobecna).
Wpadłem na pomysł, że po prostu odepnę łechtaczkę od płyty i być może w ten sposób pozbędę się problemu. A kursor na ekranie napędzę za pomocą myszy podłączanej do USB.
Długo się nie zastanawiając wymontowałem klawiaturę dokonałem dwóch obserwacji:

  1. I klawiatura i łechtaczka wpięte są jedną taśmą, czyli nie da się odpiąć trzeba by wyciąć, a co jeśli przetnie się nie to co trzeba? 😉
  2. Styki tasiemki były okrutnie zaśniedziałe!

No to w ramach rozpoczynania od działań mało inwazyjnych, te styki oczyściłem (skrobiąc śrubokrętem, bo papier ścierny był całe piętro niżej – czyli ewidentnie za daleko. Zmontowałem staruszkę do kupy i … jak ręką odjął. Jeśli ktoś jeszcze obserwuje początki życia u swojego kursora proponuję zajrzeć pod klawiaturę … być może to ta sama przypadłość.

omnibook module, czyli jednak się da :)

Bateria w laptopie (i wszystkich innych urządzeniach) ma tę paskudną wadę, że jak się jej używa to ona się rozładowuje. Warto więc wiedzieć jaki jest jej stan i starać się prąd oszczędzać. Gnome-power-manager sobie z problemem radzi, jeśli wie co z baterią. W przypadku Toshiba Satellite P25-S609 (taki desktop udający laptopa) pewne informacje są domyślnie tajne ;-).

Bateria w laptopie (i wszystkich innych urządzeniach) ma tę paskudną wadę, że jak się jej używa to ona się rozładowuje. Warto więc wiedzieć jaki jest jej stan i starać się prąd oszczędzać. Gnome-power-manager sobie z problemem radzi, jeśli wie co z baterią. W przypadku Toshiba Satellite P25-S609 (taki desktop udający laptopa) pewne informacje są domyślnie tajne ;-).

Bateria tak na prawdę ma pojemność 6450mAh która w tej chwili (komputer nie jest już od dawna nowy) realnie zmniejszyła się do ok. 5300mAh. Niestety /proc/acpi/battery/* raportuje w tym względzie bzdury.

Czy jest rozwiązanie? Jest, nazywa się omnibook i nie koniecznie dotyczy tylko produktów znanego producenta dobrych drukarek i przeciętnej reszty ;-). To do dzieła.

# echo "app-laptop/omnibook ~x86" >> /etc/portage/package.keywords
# emerge omnibook

I teraz tak, wiele modeli jest rozpoznawanych przez moduł, może i nasz?

# modprobe -v omnibook
insmod /lib/modules/2.6.19-gentoo-r5/char/omnibook.ko

# dmesg
omnibook: Driver version 2.20070211.
omnibook: Unknown model.
omnibook: Enabled features: version dmi.

# ls  /proc/omnibook/
dmi  version

Co stanowi, że nie śmiga bo laptop nie został przez moduł rozpoznany. Co teraz? Teraz otwieramy listę supportowanych komputerów i szukamy podobnego. W przypadku Toshiba Satellite P25-S609 jak się wydaje najlepiej odpowiadają wersje ectype=11 i ectype=12. W jaki sposób? Metodą prób i błędów, ectype=11 pasuje bo jest tam Satellite P20, bateria na takich ustawieniach działa, ale źle raportowana jest ilość możliwych ustawień podświetlenia ekranu. W tej chwili wydaje się, że ectype=12 w tym wypadku jest lepszym wyborem. Tak czy siak trzeba próbować i porównywać wyniki. Po dobraniiu porawidłowych wartości warto założyć feature request na stronie projektu omnibook, tak aby kolejna wersja modułu rozpoznawała nasz komputer bez większego kombinowania, w końcu takie wspomaganie developperół informacjami to też jakis malutki wkład w Wolne Oprogramowanie right?

# modprobe -vr omnibook
rmmod /lib/modules/2.6.19-gentoo-r5/char/omnibook.ko

# modprobe -v omnibook ectype=12 battery=1
insmod /lib/modules/2.6.19-gentoo-r5/char/omnibook.ko ectype=12 battery=1

omnibook: Driver version 2.20070211.
omnibook: Forced load with EC type 12.
omnibook: check_default_state timeout.
omnibook: EC state check failure, please report.
omnibook: LCD backlight turn off at console blanking is enabled.
omnibook: Enabled features: battery blank bluetooth display version dmi lcd temperature wifi throttling.

# ls /proc/omnibook/
battery  bluetooth  dmi  temperature  version
blank    display    lcd  throttling   wifi

# cat /proc/omnibook/battery 
Battery:                      0
Type:                    Li-Ion
Serial Number:            20152
Present Voltage:          16716 mV
Design Voltage:           14800 mV
Remaining Capacity:        5371 mAh
Last Full Capacity:        5371 mAh
Design Capacity:           6450 mAh
Gauge:                      100 %
Status:                 charged

Youpiii! 😉 No to niech się teraz samo ładuje 😉

# echo "options omnibook ectype=12 battery=1" > /etc/modules.d/omnibook

# modules-update 
 * Updating /etc/modules.conf ...                                         [ ok ]
 * Updating /etc/modprobe.conf ...                                        [ ok ]

# modprobe -vr omnibook 
rmmod /lib/modules/2.6.19-gentoo-r5/char/omnibook.ko
# modprobe -v omnibook 
insmod /lib/modules/2.6.19-gentoo-r5/char/omnibook.ko ectype=12 battery=1

# echo omnibook >> /etc/modules.autoload.d/kernel-2.6

# reboot

I śmiga... Bateria jest poprawnie raportowana przez gnome-power-manager. W przypadku odcięcia zasilania ekran jest przygaszany, zanim prądu w baterii zabraknie, komputer się wyłączy. Czas po mału zebrać siły na zwalczenie suspend2-sources 😉

Disable synaptic while typing

Myślał wariat, że to po prostu nie działa, ale chyba nie doczytał, że nie wystarczy do /etc/X11/xorg.conf dopisać w sekcji „InputDevice” magicznego Option „SHMConfig” „on”.

Za to jak dodać do programów startujących z sesją:

syndaemon -i 1 -d

to okazuje się, że działa jak trzeba, i kursor już nie powinien polecieć w zupełnie nowym nieznanym kierunku muśnięty przypadkiem podczas pisania, a wariat kompletnie bez sensu kilka razy zaczął kląć szpetnie na jeździdełko, które i tak jest gorsze od pradawnej łechtaczki ale to już inna bajka 😉

Toshiba Satellite dla ludzi piszących po polsku (czyli Insert & AltGr Swap patch)

Sprawa jest prosta, to że wcisnęli <WIN> w prawy górny róg klawiatury można wybaczyć. Nie wiem czy cokolwiek to utrudnia, nawet jeśli to żyć się z tym da.
Za to kategorycznie przegięli z dolnym rzędem, gdzie w kolejności po prawej od spacji są: Insert, Delete i dopiero AltGr. I weź tu człowieku napisz coś po polsku, jak Insert plus a ni hu hu nie chce dawać ą. Właściwie trudno się dziwić i trzeba naprawić. 😉
Trochę byłem zmieszany, po tym jak wodzu, a później Smoku dali znać, że na bank się da, ale konkrety to gdzie indziej. Hinty były, ale wariat jak to wariat. Nie zrozumiał 😉
Ostatecznie zaczęło się grzebanie w okolicach /usr/share/X11/xkb/ i jest. Działa!

Cała magia to:

  1. Otworzyć w ulubionym edytorze plik /usr/share/X11/xkb/keycodes/xfree86
  2. I po prostu zamienić scankody klawiszy <RALT> ze 113 na 106 i <INS> odwrotnie ze 106 na 113
  3. Zrestartować Xy i cieszyć się Altem w łatwo dostępnym i spodziewanym przez rękę miejscu, oraz przy okazji z min ludzi którzy będą próbowali coś na naszej klawiaturze napisać 😉

Na patchach to ja się nie znam, ale to by było chyba jakoś tak: Insert & AltGr swap patch.

Istnieje co prawda ryzyko, że przy aktualizacji systemu coś się przywróci, ale zmiana jest tak trywialna, a upierdliwość alta poza zasięgiem kciuka tak duża, że warto ;-). Jak się sprawdza? DOSKONALE SIĘ SPRAWDZA! 😀

Zrób sobie książkę, a książka dużo waży :D

Jest sobie duuuży plik PDF i chciałoby się go mieć na papierze, niech to będzie książka np. Wolna Kultura (pomijając, że w przypadku istniejącej książki taniej jest ją kupić niż drukować, ale na przykład się nada.)
Mamy więc plik PDF i 380 stron do zadrukowania, duuużo … a gdyby tak po 4ry strony na kartce? Oczywiście.

Software…

emerge -avD a2ps psutils gsview

Najpierw trzeba przerobić plik PDF na format PS.

$ a2ps "Lawrence Lessig - Wolna Kultura.pdf" --sides=2 --columns=1 > temp.ps
[Lawrence Lessig - Wolna Kultura.pdf (pdf, delegated to pdf2ps): 380 pages on 190 sheets]
[Total: 380 pages on 190 sheets] sent to the standard output

Teraz trzeba się zorientować na jakim papierze wydrukowany jest dokument, ja nie potrafie lepiej niz po prostu otworzyć go w gsview i zmieniając format papieru w menu Media zobaczyć, że ten najbardziej pasuje do A5, a my na chwilę chcemy żeby pasował do A4 wiec…

 $ psresize -Pa5 -pa4 temp.ps temp1.ps 
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] 
(...)
[367] [368] [369] [370] [371] [372] [373] [374] [375] [376] [377] [378] [379] 
[380] Wrote 380 pages, 19761460 bytes

-P (WIELKIE) to format wejściowy, -p (małe) to format wyjściowy, dostępne formaty i inne zmienne tam gdzie zwykle, czyli $ man psresize.

Evince nie potrafi tego dokumentu prawidłowo wyświetlić, bo dokument ma błąd, znaczy obszar widzialny pozostał w formacie A5 czyli pokrywa w tej chwili tylko część dokumentu, ale można to olać (jak się nei wie jak naprawić, a ja nie wiem :D) i najwyżej podejrzeć plik za pomocą gsview, który może jest brzydki, za to umie wszystko ;-).

Teraz samo gęste, chcemy wymieszać zawartość i poukładać po dwie strony dokumentu na każdej stronie kartki. Przy okazji ponieważ dokument jest duży (380 stron) wiadomo, że nie da się złożyć go w całości z jednej składki, więc ustalamy, że będziemy zginać po 5 kartek (20 stron dokumentu), co da 19 części całej książki ( 19 * 20 = 380 )

$ psbook -s20 temp1.ps | psnup -2 > ksiazka.ps
[20] [1] [2] [19] [18] [3] [4] [17] [16] [5] [6] [15] [14] [7] [8] [13] [12] 
(...)
[364] [377] [376] [365] [366] [375] [374] [367] [368] [373] [372] [369] [370] 
[371] Wrote 380 pages, 19761460 bytes
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] 
(...)
[172] [173] [174] [175] [176] [177] [178] [179] [180] [181] [182] [183] [184] 
[185] [186] [187] [188] [189] [190] Wrote 190 pages, 19881160 bytes

Na koniec zróbmy z tego z powrotem PDF’a bo będzie ciut mniejszy (plik), a poza tym nie będzie problemów przy drukowaniu na drukarce postscriptowej.

ps2pdf14 -sPAPERSIZE=a4 ksiazka.ps ksiazka.pdf

$ ls -lh
razem 71M
-rw-r--r-- 1 wariat users  12M lut  5 17:45 ksiazka.pdf
-rw-r--r-- 1 wariat users  19M lut  5 17:39 ksiazka.ps
-rw-r--r-- 1 wariat users 1,9M lut  5 04:24 Lawrence Lessig - Wolna Kultura.pdf
-rw-r--r-- 1 wariat users  19M lut  5 17:28 temp1.ps
-rw-r--r-- 1 wariat users  19M lut  5 17:19 temp.ps

I voilla. Jak mówiłem książki która już istnieje, raczej się nie opłaca, bo będzie gruba, mało wygodna i droga. Ale zawsze mogą pojawić się dokumenty których drukiem nie wydano, a w takiej formie na pewno będą wygodniejsze w użyciu, choćby w miejscu gdzie nawet Król… ;-).

  • Czy plik wynikowy mógłby mieć wielkość choćby zbliżoną do wielkości oryginału?
  • Czy plik książka.ps mógłby zawierać informacje o sposobie odwracania kartki w przypadku użycia duplexu (powinno się obracać dokument względem krótszej krawędzi kartki)?
  • Czy można poprawić dane o obszarze zadrukowanym w dokumencie ps?

No właśnie nie wiem… Albo inaczej, wiem, że można ale nie mam na razie pojęcia jak :D.

Nowe jajko i neostrada

Zaktualizowałeś jajko do wersji 2.6.18 i neostrada via Speedtouch-usb 330 vel żaba przestała działać? Wszystko jest na bank dobrze, a w dmesg dostajesz dość losowe komunikaty o tym, że formware nie ma (choć jest), lub się nie ładuje?

# cd /lib/firmware
# ln -s speedtch-1.bin.4 speedtch-1.bin.4.00
# ln -s speedtch-2.bin.4 speedtch-2.bin.4.00

I powinno być dobrze, u mnie na jajku 2.6.18-r3 działa.

Przy okazji po raz kolejny okazuje się, że warto w miejscach gdzie net jest niepewny (przez neostradę) przed poważną aktualizacją zrobić do końca:
emerge –sync && emerge -vuD –fetchonly world

W oczekiwaniu na AdHoc commands

Przesiadka z Psi-0.10-Daisy na Gajim-0.10 (prawie vanilla 😉 w moim domowym Gentoo przyniosła same plusy i … jeden problem. Gajim-0.10 nie obsługuje AdHoc commands, jak więc dowiedzieć się czy i co zalega jeśli zapomniało się wyłączyć Gajim wychodząc z domu?
Kiedyś w Psi (jak też nie miało AdHoc) wystarczyło przejrzeć plik tekstowy w formacie WTF za pomocą less’a … w Gajim nie jest dużo trudniej, a daje większe możliwości bo…

Przesiadka z Psi-0.10-Daisy na Gajim-0.10 (prawie vanilla 😉 w moim domowym Gentoo przyniosła same plusy i … jeden problem. Gajim-0.10 nie obsługuje AdHoc commands, jak więc dowiedzieć się czy i co zalega jeśli zapomniało się wyłączyć Gajim wychodząc z domu?
Kiedyś w Psi (jak też nie miało AdHoc) wystarczyło przejrzeć plik tekstowy w formacie WTF za pomocą less’a … w Gajim nie jest dużo trudniej, a daje większe możliwości bo…

[11:21:35] <asterix – Gajim Dev> yes it stores it
[11:21:42] <asterix – Gajim Dev> you’re lucky gajim is a great app 🙂
[11:21:48] <asterix – Gajim Dev> it’s in logs.db
[11:21:55] <asterix – Gajim Dev> there is a table unread_messages

No to do dzieła.

Password:
Last login: Fri Nov 24 11:15:22 2006 from py118.poznan.cvx.ppp.tpnet.pl
wariat@mickey ~ $ sqlite3 .gajim/logs.db
SQLite version 3.3.5
Enter ".help" for instructions
sqlite> -- sprawdzmy czy cos czeka
sqlite> select * from unread_messages;
6823|104
6824|104
6825|104
6826|104
6827|104
6828|104
6829|104
6830|104
6831|104
6832|104
6833|104
6834|262
6835|70
6836|70
sqlite> -- sa wiadomosci od jid #104, 262 i 70
sqlite> -- kim jest 262? (i jak bardzo trzeba ocenzurowac wynik na joggerze :D )
sqlite> select * from jids where jid_id=262;
262|asterix@jabber.*.org|0
sqlite> -- ciekawe co chcial ;-)
sqlite> select * from logs where (jid_id=262 and log_line_id>=6834);
6834|262||1164365170|4||does it work ?|
sqlite> -- a 70 to pewnie ja ;-)
sqlite> select * from jids where jid_id=70;
70|jklawiter@g.*.com|0
sqlite> select * from logs where (jid_id=70 and log_line_id>=6834);
6835|70||1164365249|4||Tak se gadam|
6836|70||1164365252|4||troche|
sqlite> .quit
wariat@mickey ~ $ exit

QL! 😀