linux
Тачскрин на Линуксе
Два последних дня ковырял по работе планшет фирмы «Дигма» — это китайское го… годное вполне за свои деньги изделие поставляется с ОС «Виндоуз». А наша задача была показать на нём один из отечественных дистрибутивов Линукса.
Линукс встал довольно легко, но вот проблема — прикосновения к экрану не давали никакого эффекта. Вот этим я героически два дня и боролся.
До конца не победил — тачскрин хоть и возвращает
Зато узнал немало интересного о том как устроен опрос датчика нажатия на экран в Линуксе. Всё я ещё не переварил, поэтому описывать не буду, но один интересный факт расскажу.
Представьте, что у вас есть готовый экран, на котором
Часть плёнки у нас оказалась под рамкой, так что ноль координат плёнки и экрана не совпадают, кроме того, разрешающая возможность тоже разная. Экран, например, 1366 пикселей шириной, а плёнка даёт 740. Как пересчитываются координаты нажатия на плёнку в экранные, чтобы операционная система поняла куда пользователь нажал?
Для этого в Линуксе задаётся трансформационная матрица («Coordinate Transformation Matrix»), на которую умножаются абсолютные координаты, в которых датчик экрана уловил нажатие. С её помощью можно сдвигать координаты, сжимать их и растягивать, а так же поворачивать на 90°, если датчик стоит так, что у него перепутаны оси — это вполне стандартная математика, которую многие могут помнить по школе.
Матрица эта, понятное дело, должна быть зашита внутри драйвера. Но когда у тебя Линукс, нельзя надеяться, что для всего оборудования найдётся драйвер.
Для той «Дигмы», которую мы получили, драйвера нет. В некоторых случаях есть способы, которые позволяют изготовить его на основе драйвера для «Виндоуза», но матрицу всё равно придётся вычислять самостоятельно.
Правда в нашем случае она не помогла — компенсировать «слепое пятно» она не в состоянии, для этого нужно чудо или более подходящий драйвер.
Linux 0.0.1
Оказывается совсем не сложно запустить первую функциональную версию Линукса под современной машиной, всё уже подготовлено энтузиастами. Надо только скачать образ и распаковать.
В архиве всё готово для «Винды», для «Мака» я поставил QEMU отдельно, для запуска сработала вот такая строчка:
qemu-system-i386 -nic none -L pc-bios -hda \
linux-0.11-devel-060625.qcow2 -no-reboot -m 16 -k en-usСтартует всё моментально, после запуска образа будет доступно меню выбора источника загрузки, там надо будет нажать 1, после чего появится командная строка.
Удивительно, но несмотря на то, что это версия 0.0.1, очень многое из привычного работает — есть файловая система, компилятор, bash, grep и awk. Правда у команд есть далеко не все ключи и я не обнаружил никакой справки ко внешним командам (для встроенных есть help).
В статье, где я нашёл ссылку для скачивания образа первого Линукса, есть любопытный факт — Линукс
ls -R / | awk -F: '/:/{dir=$1} ! /:/ && $1 {print dir"/"$1}' |
grep -v ^/dev | xargs -n1 strings | grep -i freaxСтрочка не нашлась, она
Я понимаю, что все эти утилиты писал не автор Линукса, но то, что это всё работает в операционной системе, код которой размером чуть больше восьми с половиной тысяч строк, меня лично восхищает.
Горячие клавиши на Toshiba AC100 в Ubuntu
В Лубунте (Lubuntu), которой я недавно ставил на Тошибу жены,
[Global]
# следим за событиями клавиатуры
listen = /dev/input/event0
# События крышки
listen = /dev/input/event4
[Keys]
# уменьшение яркости
META + F6 = echo $((`cat /sys/class/backlight/pwm-backlight/brightness` - 10)) > /sys/class/backlight/pwm-backlight/brightness
# увеличение яркости
META + F7 = echo $((`cat /sys/class/backlight/pwm-backlight/brightness` + 10)) > /sys/class/backlight/pwm-backlight/brightness
# включение/отключение радиомодулей (вайфай, блютуз)
META + F8 = rfkill $(rfkill list | fgrep -q yes && echo un)block all
# включение/выключение звука
META + F12 = a=$(amixer sget Master|fgrep -q '[off]'&&echo un)mute; for m in Master Speaker Headphone; do amixer -q sset "$m" $a; done
# показать/скрыть рабочий стол
MENU = wmctrl -k $(wmctrl -m|fgrep -q OFF&&echo on||echo off)
# уменьшить громкость
META + F10 = v=$((`amixer get Master|awk -F[\[%] '/[0-9]+%/ {print $2; exit}'`-10)); [ $v -lt 0 ] && v=0;amixer set Master $v%
# увеличить громкость
META + F11 = v=$((`amixer get Master|awk -F[\[%] '/[0-9]+%/ {print $2; exit}'`+10)); [ $v -gt 100 ] && v=100;amixer set Master $v%
# клавиша поиска теперь вызывает искалку
SEARCH = catfish &
# скриншот экрана на рабочий стол
META + SYSRQ = scrot 'screen-%Y-%m-%d_%s.png' -e 'chown "'$SUDO_USER'" "$f"; mv "$f" "/home/'$SUDO_USER'/Desktop"'
# Клавиша Delete, как в Маке
META + BACKSPACE = xdotool key Delete
[Switches]
# Сброс звуковой карты на подъём крышки
LID:0 = alsaucm -c tegraalc5632 resetВ качестве клавиши «Fn» выступает клавиша с «домиком», именно она опознаётся программой как «META». Последняя строка добавлена, что исправить глюк — у меня иногда после того, как устройство просыпается, звуковая плата из спячки не выходит.
Ошибка в Lubuntu 12.10 на Toshiba AC100
Я сегодня Линукс Лубунту поставил на Тошибу
"Couldn't find android boot partition on /dev/mmcblk0" and /etc/initramfs/post-update.d//flash-kernel exited with return code 1Расковырял пакет, который даёт эту ошибку и выяснил что ему нехватает утилиты abootimg, для того чтобы она появилась, нужно всего лишь установить пакет с тем же названием:
sudo apt-get install abootimgИ всё заработает.
Как заменить табы, используя sed
Утилита командной строки sed (это потоковый редактор),
Я немного поэксперементировал, оказалось, что sed вполне воспринимает этот символ как таковой, а все «магические выражения» не работают. Поскольку «таб» имеет специальное значение в командной строке, ввести его можно либо через комбинацию Ctrl+V, tab, либо Ctrl+V, Ctrl+I. Во многих шеллах (например, в bash, ksh, sh) сработает специальный синтаксис с долларом, как в примере ниже.
Например, если вам надо заменить последовательные «табы» на один, то это может выглядеть вот так:
sed $'s/\t\t*/\t/g' sample.txt # именно \t\t*, а не \t+
# или
sed -E $'s/\t+/\t/g' sample.txt # в Линуксе ключ „-r“Если вы знаете как в sed можно работать с tab проще, расскажите, пожалуйста, в комментариях.
Му!
bolk-dev ~ $ aptitude -v moo
There really are no Easter Eggs in this program.
bolk-dev ~ $ aptitude -vv moo
Didn't I already tell you that there are no Easter Eggs in this program?
bolk-dev ~ $ aptitude -vvv moo
Stop it!
bolk-dev ~ $ aptitude -vvvv moo
Okay, okay, if I give you an Easter Egg, will you go away?
bolk-dev ~ $ aptitude -vvvvv moo
All right, you win.
/----
-------/
/
/ |
-----------------/ --------
----------------------------------------------
bolk-dev ~ $ aptitude -vvvvvv moo
What is it? It's an elephant being eaten by a snake, of course.«Пасхальное яйцо» в aptitude.
Использование VRAM
Интересную статью обнаружил на просторах сети: «VRAM Storage Device — How to use the memory on GFX board in a different way». В статье показано как использовать лишнюю видеопамять под swap или как
В статье показано как «откусить» у видеокарты память, которую она всё равно не использует. Я, для интереса, попробовал на нашем
[root@hulk ~]# lspci -vv
...
02:01.0 VGA compatible controller: S3 Inc. ViRGE/DX or /GX (rev 01) (prog-if 00 [VGA])
Subsystem: S3 Inc. ViRGE/DX
...
Region 0: Memory at f4000000 (32-bit, non-prefetchable) [size=64M]
...
[root@hulk ~]# grep -i videoram /var/log/Xorg.0.log
(--) S3VIRGE(0): videoram: 2048kВ остальном, всё работает замечательно:
[root@hulk ~]# cat /proc/swaps
Filename Type Size Used Priority
/dev/sda2 partition 2096472 0 -1
/dev/mtdblock0 partition 1016 0 0Маленькая Казань
Уважаемые казанцы, знаете ли вы, что Казань — это не только столица республики Татарстан, но и маленький город в Слободском районе Кировской области.

Быстродействие ФС
Прочитал статью «FreeBSD vs Linux: быстродействие файловых систем». Самые интересные выводы:
- файловая система freeBSD (UFS и UFS2) куда
медленнее файловых систем Linux (EXT2, EXT3, ReiserFS, XFS, JFS). - EXT2 рано выбрасывать на помойку, если вам хочется добиться максимальной
производительности. Но не забудьте купить UPS. - JFS лучше не ставить. В режиме по умолчанию она обеспечивает
наихудшую производительность, а в её настройках ещё нужно разобраться. - Возможно, следует приглядеться к ReiserFS.
- EXT3/writeback может быть и не быстрее EXT3/ordered.
Удивительно как с такой непроизводительной файловой системой freeBSD удерживает лидирующие позиции на рынке серверов?
Мобильный SSH
Кстати, занимаясь поиском интересных мидлетов, наткнулся на Floyd Telnet & SSH midlet и muTelnet midlet. Забавная штука. В принципе, через это можно выполнить
Незамениная штука для приходящих администраторов. Впрочем, с PDA это делать, конечно, куда проще и удобнее, чем с сотового телефона.
Проблема с c-client
Bug #29783 IMAP module problem.
Хозяйке на заметку: если под Linux RedHat у вас не собрался PHP с IMAP
Хардлинки в WinXP
Я очень часто начинаю разрабатывать проект под Windows и заканчиваю — под Linux или freeBSD. Конечно, даже на уровне PHP, между этими группами операционных систем есть существенные различия. Обычно, они легко преодолеваются. В последнем проекте мне более всего не хватало функции link.
Поэкспериментировав с w32api и ffi, я понял, что этот путь — тупиковый. Побродив по поисковикам, я выяснил, что простейший выход — использовать в качестве заглушки утилиту fsutil из Windows XP. У неё есть параметр «hardlink create», позволяющий создавать ссылки.
if (PHP_OS == 'WINNT' && file_exists($_ENV['windir'].'\system32\fsutil.exe'))
{
function link($target, $link)
{
$cmd = $_ENV['windir'].'\system32\fsutil.exe hardlink create';
exec ($cmd.' "'.$link.'" "'.$target, $out, $ret);
return !$ret;
}
}В случае, если вы будете использовать эту функцию в проекте, будьте осторожны — это всего лишь заглушка.
LANG
«Его пример — другим наука». Господа, если при попытки инсталляции модуля для Perl, вы встретите сообщение вида «Makefile:85: *** missing separator. Stop.», не отчаивайтесь, а посмотрите значение переменной LANG. Её значение должно быть «en_US». Скорее всего у вас там «UTF8», измените его на «en_US» (обычно «export LANG en_US») и попробуйте установить модуль ещё раз.
Нюансы qmail
Совет из недавно приобретённого мной опыта настройки
Если в логах Qmail на попытку отправить письмо вы видите ошибку
«Sorry,_I_wasn’t_able_to_establish_an_SMTP_connection._(#4.4.1)»
посмотрите — нет ли у вас файла «outgoungip» в controls qmail. Если есть, то скорее всего там стоит 127.0.0.1. Поменяйте его на внешний
О безопасности в Unix
О безопасности
Сегодня побывал в шкуре киношного кул хацкера, из тех, что подбирают пароли с третьего раза. Правда, попыток я сделал побольше, да и пароль не подобрал… в общем, все по порядку.
Сидел я у нашего постмастера Сергея, консультировался по поводу мультидоменной настройки sendmail. Примерно на середине разговора нас прервали — зашел его начальник, Сергей ушел с ним забрать
Примерно через 5—10 минут (я как раз вбивал
Теория о том, что совпала hash-сумма, или, что я нашел «инженерный» пароль, не подтвердилась. После прихода Сергея мы провели «следственный эксперимент» — он заблокировал консоль и ввел ту же комбинацию.
Так что единственное разумное объяснение, которое пришло мне в голову, заключается в следующем. Похоже разработчики включили в свой продукт одну недокументированную особенность — система пускает человека, который в течение долгого времени вводит парольные последовательности, некоторая часть которых совпадает по буквенному составу и/или длине с правильным паролем. «Cчитая», что хозяин забыл пароль.
Остается только догадываться, сколько еще таких «недокументированных возможностей» зашито в софт, которому мы привыкли доверять безопасность нашего компьютера.