Фоторамка из tabletpc и OpenBSD

В связи с изменениями в личной жизни у меня дома появилась фоторамка фирмы_DSCN1185, как это не противно, Sony. Обыкновенная маленькая чёрная рамка для любителей фотографий в формате 9х13.
Её основной минус – абсолютно отвратительный экран. Пиксели размером со слона при размере экрана 9х14см как-то ухудшают восприятие фото. На фоне этого все остальные характеристики можно вообще не рассматривать. _DSCN1189
Уже лет пять, если не больше, у меня пылится один гаджет – таблетка фирмы Compaq на базе Transmeta Crusoe, зачем-то купленная в своё время у друга. Как ноутбук/таблет в настоящее время её использовать бессмысленно – у неё хитромудрое перо с батарейкой (пальцем в экран тыкать бесполезно), мало памяти, дохленький проц, старый аккумулятор и заюзаный IDEшный жёсткий диск. В общем все прелести таблета десятилетней давности. Зато у неё недурственныё экран (по сравнению с фоторамкой), есть сеть, USB, кардридер…
_DSCN1191
$ dmesg
OpenBSD 5.4-current (GENERIC) #46: Mon Sep 2 13:54:44 MDT 2013
deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
cpu0: Transmeta(tm) Crusoe(tm) Processor TM5800 ("GenuineTMx86" 586-class) 1 GHz
cpu0: FPU,V86,DE,PSE,TSC,MSR,CX8,SEP,CMOV,MMX
real mem = 376942592 (359MB)
avail mem = 358969344 (342MB)
mainbus0 at root
bios0 at mainbus0: AT/286+ BIOS, date 10/06/03, BIOS32 rev. 0 @ 0xfd6a0, SMBIOS rev. 2.3 @ 0xe7010 (20 entries)
bios0: vendor Phoenix version "4.06CJ15" date 10/06/2003
bios0: Compaq Compaq Tablet PC TC1000
acpi0 at bios0: rev 0
acpi0: sleep states S0 S1 S3 S4 S5
acpi0: tables DSDT FACP
acpi0: wakeup devices PWRB(S4) PCI0(S3) USB0(S3) USB1(S3) USB2(S3)
acpitimer0 at acpi0: 3579545 Hz, 24 bits
acpiprt0 at acpi0: bus 0 (PCI0)
acpiec0 at acpi0
acpicpu0 at acpi0: C2, PSS
acpipwrres0 at acpi0: LRP0
acpipwrres1 at acpi0: LRP1
acpipwrres2 at acpi0: LRP2
acpitz0 at acpi0: critical temperature is 100 degC
acpiac0 at acpi0: AC unit online
acpibat0 at acpi0: CMB0 model "BAT1" serial 1234 type LION oem "COMPAQ"
acpibtn0 at acpi0: PWRB
acpivideo0 at acpi0: VIDO
bios0: ROM list: 0xc0000/0xe000 0xe7000/0x1000!
cpu0 at mainbus0: (uniprocessor)
pci0 at mainbus0 bus 0: configuration mode 1 (bios)
pchb0 at pci0 dev 0 function 0 "Transmeta LongRun Northbridge" rev 0x03
"Transmeta Mem1" rev 0x00 at pci0 dev 0 function 1 not configured
"Transmeta Mem2" rev 0x00 at pci0 dev 0 function 2 not configured
vga1 at pci0 dev 5 function 0 "NVIDIA GeForce2 Go" rev 0xb2
wsdisplay0 at vga1 mux 1: console (80x25, vt100 emulation)
wsdisplay0: screen 1-5 added (80x25, vt100 emulation)
pcib0 at pci0 dev 7 function 0 "VIA VT82C686 ISA" rev 0x40
pciide0 at pci0 dev 7 function 1 "VIA VT82C571 IDE" rev 0x06: ATA100, channel 0 configured to compatibility, channel 1 configured to compatibility
wd0 at pciide0 channel 0 drive 0:
wd0: 16-sector PIO, LBA48, 76319MB, 156301488 sectors
wd0(pciide0:0:0): using PIO mode 4, Ultra-DMA mode 5
pciide0: channel 1 ignored (disabled)
viapm0 at pci0 dev 7 function 4 "VIA VT82C686 SMBus" rev 0x40: SMI
iic0 at viapm0
iic0: addr 0x2d 00=01 01=0e 02=16 07=50 08=ad 09=5d 0b=55 13=fe 14=74 15=57 16=67 17=04 1d=ff 1e=fb 1f=86 20=01 21=01 22=fe 23=ff 24=c8 25=fe 26=fe 27=7d 28=7d 2b=ff 2c=bf 2d=7b 2e=fb 2f=fd 30=ff 31=ff 32=ff 33=ff 34=bf 35=5d 36=fd 37=ff 38=f7 39=be 3a=bd 3b=ff 3c=ff 3d=7f 3e=df 3f=a2 40=01 47=50 48=ad 49=5d 4b=55 53=86 54=6b 55=57 56=e5 57=80 5d=ff 5e=fb 5f=86 60=01 61=01 62=fe 63=ff 64=c8 65=fe 66=fe 67=7d 68=7d 6b=ff 6c=bf 6d=7b 6e=fb 6f=fd 70=ff 71=ff 72=ff 73=ff 74=bf 75=5d 76=fd 77=ff 78=f7 79=be 7a=bd 7b=ff 7c=ff 7d=7f 7e=df 7f=a2 80=01 87=50 88=ad 89=5d 8b=55 93=86 94=70 95=57 96=ee 97=80 9d=ff 9e=fb 9f=86 a0=01 a1=01 a2=fe a3=ff a4=c8 a5=fe a6=fe a7=7d a8=7d ab=ff ac=bf ad=7b ae=fb af=fd b0=ff b1=ff b2=ff b3=ff b4=bf b5=5d b6=fd b7=ff b8=f7 b9=be ba=bd bb=ff bc=ff bd=7f be=df bf=a2 c0=01 c7=50 c8=ad c9=5d cb=55 d3=86 d4=6c d5=57 d6=f6 d7=80 dd=ff de=fb df=86 e0=01 e1=01 e2=fe e3=ff e4=c8 e5=fe e6=fe e7=7d e8=7d eb=ff ec=bf ed=7b ee=fb ef=fd f0=ff f1=ff f2=ff f3=ff f4=bf f5=5d f6=fd f7=ff f8=f7 f9=be fa=bd fb=ff fc=ff fd=7f fe=df ff=a2 words 00=01ff 01=00ff 02=00ff 03=00ff 04=00ff 05=00ff 06=00ff 07=50ff
spdmem0 at iic0 addr 0x50: 128MB SDRAM non-parity PC133CL3
auvia0 at pci0 dev 7 function 5 "VIA VT82C686 AC97" rev 0x50: irq 10
ac97: codec id 0x41445372 (Analog Devices AD1981A)
ac97: codec features headphone, 20 bit DAC, No 3D Stereo
audio0 at auvia0
fxp0 at pci0 dev 8 function 0 "Intel PRO/100 M" rev 0x10, i82562: irq 9, address 00:08:02:92:e2:0e
inphy0 at fxp0 phy 1: i82555 10/100 PHY, rev. 4
iwi0 at pci0 dev 10 function 0 "Intel PRO/Wireless 2200BG" rev 0x05: can't map interrupt
cbb0 at pci0 dev 11 function 0 "TI PCI1520 CardBus" rev 0x01: irq 9, CardBus support disabled
cbb1 at pci0 dev 11 function 1 "TI PCI1520 CardBus" rev 0x01: irq 11, CardBus support disabled
ohci0 at pci0 dev 12 function 0 "NEC USB" rev 0x41: irq 9, version 1.0, legacy support
ohci1 at pci0 dev 12 function 1 "NEC USB" rev 0x41: irq 11, version 1.0, legacy support
ehci0 at pci0 dev 12 function 2 "NEC USB" rev 0x02: irq 10
usb0 at ehci0: USB revision 2.0
uhub0 at usb0 "NEC EHCI root hub" rev 2.00/1.00 addr 1
isa0 at pcib0
isadma0 at isa0
pckbc0 at isa0 port 0x60/5
pckbd0 at pckbc0 (kbd slot)
pckbc0: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard, using wsdisplay0
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
npx0 at isa0 port 0xf0/16: reported by CPUID; using exception 16
cardslot0 at cbb0 slot 0 flags 0
pcmcia0 at cardslot0
cardslot1 at cbb1 slot 1 flags 0
pcmcia1 at cardslot1
usb1 at ohci0: USB revision 1.0
uhub1 at usb1 "NEC OHCI root hub" rev 1.00/1.00 addr 1
usb2 at ohci1: USB revision 1.0
uhub2 at usb2 "NEC OHCI root hub" rev 1.00/1.00 addr 1
uhidev0 at uhub1 port 2 configuration 1 interface 0 "Jing-Mold USB K/B+Mouse" rev 1.10/3.20 addr 2
uhidev0: iclass 3/1
ukbd0 at uhidev0: 8 variable keys, 6 key codes
wskbd1 at ukbd0 mux 1
wskbd1: connecting to wsdisplay0
uhidev1 at uhub1 port 2 configuration 1 interface 1 "Jing-Mold USB K/B+Mouse" rev 1.10/3.20 addr 2
uhidev1: iclass 3/1, 3 report ids
ums0 at uhidev1 reportid 1: 3 buttons, Z dir
wsmouse0 at ums0 mux 0
uhid0 at uhidev1 reportid 2: input=1, output=0, feature=0
uhid1 at uhidev1 reportid 3: input=3, output=0, feature=0
vscsi0 at root
scsibus0 at vscsi0: 256 targets
softraid0 at root
scsibus1 at softraid0: 256 targets
root on wd0a (eeaba327d78804c1.a) swap on wd0b dump on wd0b

Основная задача, которую надо было решить, заключалась в автоматическом логине и запуске X. Решить её помог логин менеджер SLiM из пакета x11/slim.
Конфигурация проще некуда – в /etc/slim.conf прописать имя пользователя по умолчанию default_user yason, прописать auto_login yes и добавить SLiM в автозапуск:
$ cat /etc/rc.conf.local
ntpd_flags= # enabled during install
pkg_scripts="dbus_daemon slim"

Для показа слайд-шоу сначала думал использовать graphics/shotwell, но у него нет возможности запуска сразу в режиме слайд-шоу. Да и слишком монструозен он для такой машины и таких задач. Хотя рейтинги фото были бы полезны…
Потом я попробовал graphics/feh. Он больше отвечает моим нуждам – есть рандомайз, возможность привязки различных комманд на цифровые клавиши, но нет автоориентации фото по информации из EXIF тэгов.
В итоге остановился я на graphics/qiv. У программы практически идентичные feh возможности, но в добавок есть опция ориентации фотографий исходя из EXIF информации.
Для моих задач я запускаю qiv с таким набором флагов: qiv -lfusrmd 1 /home/yason/Pictures > ~/qiv.log 2>&1
Выдержки из мануала:
-l, --autorotate
Autorotate JPEGs according to EXIF rotation tag.
-f, --fullscreen
Use fullscreen window on start-up.
-u, --recursivedir
Change the behavior of qiv to recursively descend into the
directories given on the command line.
-s, --slide
Start slideshow immediately. This can also be used for the
desktop background (x/y/z).
-r, --random
Randomize slideshow.
-m, --maxpect
Expand image(s) to fit screen size while preserving aspect
ratio.
-d, --delay x
Set slideshow delay to x seconds.

То есть qiv запускается в режиме слайд-шоу на полный экран с резайзом фотографий до размеров экрана заглядывая в поддиректории и показывая фотографии с правильной ориентацией в пространстве, в случайном порядке по одной секунде.
Для автоматического запуска qiv надо добавить вышеописанную строку в файл .xinitrc пользователя, под которым будет автоматический вход в систему. В моём случае пользователь yason.
Теперь при запуске будет происходить автоматический запуск X, логин и запуск слайд-шоу.
В процессе эксплуатации выяснился один нюанс – сначала запускается скринсейвер X, а через некоторое время монитор переходит в спящий режим. Чтобы его от этого отучить добавил ещё две строки в .xinitrc:
xset -dpms
xset s off

Первая отключает энергосбережение, а вторая – скринсейвер.

Share