2019-05-05

праздник security и accessibility от Mozilla

5 мая, в 00:00, вероломно, без объявления войны Mozilla Firefox отключил пользователям все подписаные аддоны с всплывающим сообщением "could not be verified for use in Firefox and has been disabled".
 При этом нельзя ни их "вернуть", ни "переставить" - появляются ошибки "download failed. please check your connection" или "addon corrupt".

Причина проста как двери - кто-то забыл что аддоны "подписываются" сертификатом, а у сертификата есть срок действия.
И естественно его "забыли" продлить и включить в апдейты обновленный сертификат.

Итог - https://bugzilla.mozilla.org/show_bug.cgi?id=1548973
Самое забавное, что баг открыли досрочно, потому что нашлись пользователи, у которых 5 мая наступило на сутки раньше чем у большинства :)
С другой стороны, по той же причине тысячи пользователей на форумах сразу же принялись делится опытом что нужно оключить что бы все работало, например так: https://www.reddit.com/r/firefox/comments/bk54mu/addonsextensions_broken/

 Паралельно мозилла задеплоила фикс - Hotfix: Update XPI signing intermediate [Bug 1548973]
Конечно же для этого фикс нужно установить.
И конечно же миллионы пользователей сами это сделать не смогут.
И конечно же ради этого делать неплановый релиз, включающий фикс никто не стал.
К счастью это делать и не нужно - у мозиллы есть бекдор специально для таких случаев - Studies.
Но естественно оказалось что: не у всех он есть вообще, а многим не нравятся бекдоры, потому его отключили.
Соответственно те кто оказался "без фикса", и при том сумел проблему диагностировать и нагуглить может фикс скачать своими силами: https://storage.googleapis.com/moz-fx-normandy-prod-addons/extensions/hotfix-update-xpi-intermediate@mozilla.com-1.0.2-signed.xpi

Но очень многие при попытках диагностики проблемы отключили себе `xpinstall.signatures.required` в about:config.  И конечно же забудут включить обратно потом, когда проблема исправится.
 Но этого мало - все отключенные аддоны нужно вручную переставить что бы снять флаг проблемы подписи.
Это можно обойти если восстановить из бекапа "extensions.json" из профиля файрфокса (все ведь делают бекапы, верно?)
Ну или на крайняк исправить в этом файле для каждого аддона свойство "signedState" из значения -1 например в 2. И перезапустить файрфокс.

2019-04-13

реклама хороших библиотек для мини-веб-сервисов на питоне

Пришла рекламка бесплатного курса по библиотеке для мини-веб-сервисов на питоне - Responder, от Michael Kennedy(все видеокурсы Майкла всячески рекомендую)

Библиотечку я когда-то пробовал, потому что ее создатель - Kenneth Reitz - автор requests, record, pipenv, и много чего другого, легендарная в определенных кругах личность. Но втот момент она меня сильно расстроила, потому что несмотря на удобный для быстрого решения задач API, очень много вещей было недоделано

Тем не менее - решил для что для "разрядки" после нервной недели лучше посмототреть интересный курс от Майкла, чем чем-то ну уж совсем бесполезным :)

Начал паралельно с видео самостоятельно переписывать пример (естественно не на Responder:)), и понадобился файлик с данными для примера. И совершенно случайно, когда искал этот файлик movies.csv увидел у среди скачанных с гитхаба репозиториев - репозиторий самого responder (который я выкачивал когда пробовал под него писать), и вообще совершенно случайно решил заглянуть...

$ du -sh responder
32M     responder

Фигасе задался вопросом я, учитывая что проектик довольно новый, плюс в значительной части удобная обертка для других библиотек - что же там такого на 32МБ? Энциклопедия Британника? :)

$ du -sh *
4.0K    CHANGELOG.md
16M     docs
4.4M    ext
12M     .git
4.0K    .gitignore
4.0K    LICENSE
4.0K    MANIFEST.in
4.0K    Pipfile
32K     Pipfile.lock
4.0K    pytest.ini
8.0K    README.md
4.0K    readthedocs.yml
104K    responder
8.0K    setup.py
40K     tests
4.0K    .travis.yml

хммм.... 12МБ - данные гита (что как бы многовато на самом деле), но еще больше - 16МБ - доки... Это ведь наверное хорошо, когда много хорошей документации, правда?

сумма - 28МБ, т.е под 35% - служебные данные, под 45% доки... Но ведь блин! Кода самого проекта - 104КБ! Это ж блин 0.3%!

$ du -h docs/*
4.0K    docs/make.bat
4.0K    docs/Makefile
4.0K    docs/requirements.txt
20K     docs/source/_templates
15M     docs/source/_static/fonts
16M     docs/source/_static
16M     docs/source

ПЯТНАДЦАТЬ МЕГАБАЙТ ФОНТОВ

$ ls -s docs/source/_static/fonts/692185 | sort -nr
756 78DFDCB65B1F55769.css
724 EB335654CC32EEECB.css
664 D3FEA31F226436F7E.css
652 4BB5B4844BF0A1875.css
636 05C79D32FCC9C51A0.css
620 22F9BA1EA3A789050.css
572 FEF51E0A8EF01CA90.css
544 FA5D2C248B6AEC96E.css
492 96D5C750E04949CB8.css
468 BBFEE8CE0B4A78181.css
448 FBA2DF26930B5D39C.css
436 F3359BE670A39380E.css
420 4FC1B9C72E25ACB98.css
404 046446108A9C4012D.css

Причем шрифты в виде CSS-файлов(???).

$ head -c1000 docs/source/_static/fonts/692185/78DFDCB65B1F55769.css

/*
        Copyright (C) 2011-2018 Hoefler & Co.
        This software is the property of Hoefler & Co. (H&Co).
        Your right to access and use this software is subject to the
        applicable License Agreement, or Terms of Service, that exists
        between you and H&Co. If no such agreement exists, you may not
        access or use this software for any purpose.
        This software may only be hosted at the locations specified in
        the applicable License Agreement or Terms of Service, and only
        for the purposes expressly set forth therein. You may not copy,
        modify, convert, create derivative works from or distribute this
        software in any way, or make it accessible to any third party,
        without first obtaining the written permission of H&Co.
        For more information, please visit us at http://typography.com.
        148887-130097-20181011
*/

@font-face{ font-family: "Mercury Text G1 A"; src: url(data:font/truetype;base64,AAEAAAASAQAABAAgR0RFRgAnALEAAGoYAAAAHkdQT1Mvk7+6AABqOAAAMkhHU1VC6g

чужих фонтов, включенных base64 блобами в css стилей для документации....

но ведь и это еще не днище! ведь интересно - какие же такие красивые шрифты?

$ grep  -R -o 'font-family: *"[^"]+";' docs/source/_static/fonts/ | head
docs/source/_static/fonts/692185/A4436C301A663F119.css:font-family: "Mercury Text G1 A";
docs/source/_static/fonts/692185/A4436C301A663F119.css:font-family: "Mercury Text G1 A";
docs/source/_static/fonts/692185/A4436C301A663F119.css:font-family: "Mercury Text G1 A";
docs/source/_static/fonts/692185/A4436C301A663F119.css:font-family: "Mercury Text G1 A";
docs/source/_static/fonts/692185/A4436C301A663F119.css:font-family: "Mercury Text G1 A";
docs/source/_static/fonts/692185/A4436C301A663F119.css:font-family: "Mercury Text G1 A";
docs/source/_static/fonts/692185/A4436C301A663F119.css:font-family: "Operator Mono SSm A";
docs/source/_static/fonts/692185/A4436C301A663F119.css:font-family: "Operator Mono SSm A";
docs/source/_static/fonts/692185/A4436C301A663F119.css:font-family: "Operator Mono SSm A";
docs/source/_static/fonts/692185/A4436C301A663F119.css:font-family: "Operator Mono SSm A";

Гм, да они же повторяются!

$ grep  -R -o 'font-family: *"[^"]+";' docs/source/_static/fonts/ | wc -l
620

ШЕСТСОТ ДВАДЦАТЬ ШРИФТОВ! Да у меня блин в системе столько шрифтов нет!

Стоп, но они ведь они еще и повторяются...

$ grep  -R -o 'font-family: *"[^"]+";' docs/source/_static/fonts/ | sort | uniq | wc -l
140

Ну так намного лучше! "Всего" 140 шрифтов, скопированых примерно по 5 раз каждый. Норм

Ведь мы, программисты, говна не делаем, и всегда тщательно и ответственно относимся к своему продукту.

Примечание: слова про говно в большей степени относятся к принятым в индустрии практикам собирать продукт из готовых костылей, и никогда не проверять что же за говно эти скажем библиотеки для сборки документации, вебпаки, бабели, глиммеры и прочее; никогда не задаваться вопросом почему файлик about.js "весит" 95% от всего проекта и т.д.

2019-01-07

Впечатления YouTube Premium

совершенно случайно взял под новый год 3 недели подписки на сабж за 14 грн.
продержался 3 дня, потом все нахрен отменил, удалил, но блин все равно не могу забыть и отпустить, потому попробую предать мысли перу мысли впечатления.

1) YouTube Music
То что на самом деле мог бы использовать (вместо Play Music который пользую сейчас). Но увы YouTube Music - говно на палке:
• нихера не работает без инета,
 - постоянно стучит большому брату что и как я хочу играть,
 - в результате даже офлайн-колекция нормально без инета не играет,
 - потому что задержки на "постучать"  при смене треков.
• на малейший чих - например таймаут соединения к большому брату - останавливается воспроизведение,
 - при этом ничего нельзя сделать, оно изображает что все ок, но кнопка play/pause неактивна,
 - надо или сделать prev/next, или открыть/закрыть,
 - иногда эта срань просто задрачивает остановкой плейбека каждые 10-30сек на нормальном вайфае.
• если где-то открыт play music,
 - или был открыт десять минут назад, но комп ушел в слип или отвалился,
 - (например когда взял ноут,  вышел из дому, и запустил плеер на телефоне),
 - говорит "ты сука заплатил только за 1 сеанс, потому хер тебе на воротник а не музыка",
 - и вместо того что отключить предыдущий плеер как делал PlayMusic - не дает играть пока не вернешься и не отключишь предыдущий сам (знать бы еще как).
• просто задрачивает русскоязычным мусором который я ни за какие деньги слушать не стану,
 - т.е. или нужно играть только то что я выбрал (без рандома, или общих "радио),
 - или хрен вычистишь от мнения ютуба что я должен обожать всю музыку написаную на територии СНГ.
• субьективно работает сильно медленнее чем play music,
 - может потому что качает видео клипов?
 - может просто потому что писали говноеды.

2) YouTube Originals
• вообще ни о чем, прям как "доступ к всем оригинальным видео мухосранской подростковой кинокружке при 12й школе",
 - самое интересное что нашел - cobra kai (поностальгировать по karate kid),
 - и brain field (потому что vsauce), но честно говоря  шоу очень слабым получилось: ощущение что главная цель шоу была 10-минутные сценарии vsauce растянуть на 40минут.
• ютуб вообще блять в принципе не умеет в звуковые дорожки,
 - потому если есть сраный originals на сраном испанском или сраном немецком - его никогда не будет даже на английском,
 - про русский вообще можно забыть.
• субтитры лучше чем для автоматические для рандомных видосиков на ютубе,
 - но скорее всего тот же автомат, только на лучшем качестве аудио,
 - и иногда минимальной редактурой.
• найти или подобрать шоу/сериал вообще нереально,
 - все шоу отображаются во всех категориях,
 - есть только название и кавер, нет ни тегов, ни описания, 
 - нет ни каких-либо фильтров, ни поиска (кроме общего который надет все трейлеры нетфликса)
 - потому ищи где-нить в википедии что есть в originals и потом открывай целенаправлено,
 - или забудь про эту сраную помойку.

3) Ad-free
наверное оно работает.
вот только я 100% видео смотрю на компе, где есть adblock, и из всей рекламы бесит меня только "интеграции" всяких казино и викингов, которые этот adfree вообще никак не убирает.
так что adblock это конечно хорошо, но мимо.

4) Download and go
• даже в голову не приходило это использовать.
• может это сработало бы для фильмов и originals - но тут ютуб никчемное дерьмо и качать просто нечего,
 - сериалы проще качать на рутрекере, с поиском, сортировкой, с нормальным звуком, субтитрами, переводом...
 - и играть нормальным плеером, который не жрет сраные 200% CPU!
• ах да, работает только под оригинальный клиент!
 - т.е. качать только на шваброид/хромос,
 - на компе как был youtube-dl, которому на "premium" просто посрать.
так что вообще мимо кассы.

4) Play in the background
просто никчемная антифича,
• кто бы блять продал разрабам фичу что бы сраный ютуб НЕ ИГРАЛ В ФОНЕ,
 - когда открывает броузер с сохраненными открытыми вкладками,
 - и там начинается сраный концерт с компрометирующими звуками посреди офиса,
 - на одной(слава богу если только одной!) из 100 открытых вкладок(увы их вчера было 473), удачи с поиском как его прикончить.

так что 100% не стоит тратить деньги на это говно.

2016-06-22

как собрать бинарник synergy

Есть(был) такой замечательный продукт - synergy.
Позволяет на одном рабочем месте использовать одну клаву+мышь для нескольких десктопов/ноутбуков.
Но увы, теперь он доступен по принципу "старье падающее от движения мышки" в дистрибутивах или "качай исходники и компиль сам" или "плати".

Потому даже есть в репозиториях для используемой ОС, лучше собрать самому.

Инструкция:


  • Устанавливаем зависимости:

apt-get install build-essential cmake xorg-dev libxtst-dev libxext-dev libqt4-dev libcurl4-openssl-dev libavahi-compat-libdnssd-dev libssl-dev



  • готовим среду для "быстрой" компиляции, качаем, патчим и распаковываем
mkdir BLD && mount -t tmpfs none BLD && cd BLD
git clone https://github.com/symless/synergy.git
cd synergy
patch -p1 < <(curl 'https://git.archlinux.org/svntogit/community.git/plain/trunk/fix-incompetence.patch?h=packages/synergy')
(cd ext; unzip gmock-1.6.0.zip -d gmock-1.6.0; unzip gtest-1.6.0.zip -d gtest-1.6.0)

  • конфигурируем и компилируем
./hm.sh conf -g1
cmake -DCMAKE_INSTALL_PREFIX=/usr .
make
./bin/unittests
  • собираем и забираем бинарный пакет, чистим мусор
cp bin/usynergy bin/synergy
./hm.sh package deb
mv bin/*deb ~/
cd .. && umount BLD
  • устанавливаем
dpkg -i ~/synergy*deb

2016-02-24

история одного обновления

Я очень давно ненавижу тот путь, по которому движется разработка софта, в частности KDE (plasma).

И сегодня я вам расскажу одну из слезливых историй "почему".

После очередного незаметного обновления в очередной раз "поломался" sddm и kscreensaver:
после lock screen при попытке unlock мой пароль не принимается, а после 4х попыток ввода пароля получаю сообщение:


The screen locker is broken and unlocking is not possible anymore.
In order to unlock switch to a virtual terminal (e.g. Ctrl+Alt+F2),
log in and execute the command:
loginctl unlock-sessions
Afterwards switch back to the running session (Ctrl+Alt+F%1).



Гугл нашел эту "фичу" - у кого-то при краше greeter (окна входа) система делает crash loop, и это "пофиксили".

Еще гугл находит что проблема связана (!!!) с OpenGL, с драйверами NVidia и Intel Haswell ucode.

Естественно это все не мой случай :) - быстрое применение всех фиксов проблему не решает.
Значит надо копать.


Расскажу кратко КАК я ИСКАЛ причину, может алгоритм кому-то еще пригодится.

1. Найти точную причину и ключевые слова для гугла поможет backtrace.
Теперь, в эру systemd это Б***Ь непросто!
В логах этот сраный systemd даже не пишет что именно покрашилось:


Feb 24 17:47:40 archy systemd[1]: Started Process Core Dump (PID 3840/UID 0).
Feb 24 17:47:40 archy kdeinit5[1489]: QDBusAbstractAdaptor: Cannot relay signal KDEDModule::moduleDeleted(KDEDModule*): Pointers are not supported: KDEDModule*
Feb 24 17:47:40 archy systemd-coredump[3842]: Coredump file descriptor missing.
Feb 24 17:47:40 archy kdeinit5[1489]: The X11 connection broke: I/O error (code 1)
Feb 24 17:47:40 archy drkonqi[3836]: The X11 connection broke: I/O error (code 1)
Feb 24 17:47:40 archy systemd[1]: Started Process Core Dump (PID 3847/UID 0).
Feb 24 17:47:40 archy systemd-coredump[3848]: Coredump file descriptor missing.

т.е. предполагается, что по PID я сам угадаю какой процесс пару минут назад был запущен. Да и вообще между строк прочитаю всю информацию о креше.

но ладно, найдем корки:


#ls -la /var/lib/systemd/coredump 
-rw-r-----+ 1 root root 3427883 Feb 24 13:42 core.drkonqi.1000.a053e839a290482a902aea45b03ad468.1348.1456314160000000000000.lz4
-rw-r-----+ 1 root root 3678241 Feb 24 12:52 core.drkonqi.1000.ca67dc2d7ad64c77996b6e6d43ec7f45.3502.1456311160000000000000.lz4

-rw-r-----+ 1 root root 4229665 Feb 24 14:56 core.klipper.1000.a053e839a290482a902aea45b03ad468.2159.1456318565000000000000.lz4
-rw-r-----+ 1 root root 3313889 Feb 24 17:45 core.klipper.1000.a053e839a290482a902aea45b03ad468.2181.1456328750000000000000.lz4
-rw-r-----+ 1 root root 4757578 Feb 24 13:58 core.systemsettings5.1000.a053e839a290482a902aea45b03ad468.1754.1456315120000000000000.lz4


drkonqi - это графическая уведомлялка "ой, что-то покрашилось. отправить отчет ган^Wразработчикам?"
klipper - удобный менеджер буфера обмена. к входу в систему точно отношения не имеет.
systemsettings - утилита настройки обоев рабочего стола.
Странно что нет ни sddm, ни kscreensaver - но надо посмотреть на то что есть.

2. анализ дампа
* распаковываем core: unlz4  
* ищем исходный бинарник: file


govno: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from '/usr/lib/drkonqi --appname drkonqi --apppath /usr/lib --signal 8 --pid 3500 --s'


 * открываем отладчик:


# gdb /usr/lib/drkonqi
/var/lib/systemd/coredump/
core.drkonqi.1000.a053e839a290482a902aea45b03ad468.1348.1456314160000000000000

...
Reading symbols from /usr/lib/drkonqi...(no debugging symbols found)...done.
[New LWP 3502]

warning: Could not load shared library symbols for linux-vdso.so.1.
Do you need "set solib-search-path" or "set sysroot"?
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
Core was generated by `/usr/lib/drkonqi --appname drkonqi --apppath /usr/lib --signal 8 --pid 3500 --s'.
Program terminated with signal SIGFPE, Arithmetic exception.
#0  0x00007f75971772a8 in raise () from /usr/lib/libc.so.6
 


тут видим что креш по SIGFPE , а у всех нагугленых проблем SIGSEGV, т.е. источник проблемы другой чем у "умных" форумчан которые трейс показывали.
Но может совпасть с проблемой "тупых" форумчан, который кроме "ой, все, ниче не работает" ничего о своей проблеме не написали.

* смотрим бектрейс: bt


(gdb) bt
#0  0x00007f75971772a8 in raise () from /usr/lib/libc.so.6
#1  0x00007f7599f16e97 in KCrash::defaultCrashHandler(int) () from /usr/lib/libKF5Crash.so.5
#2 
#3  0x00007f75958b4c19 in pthread_barrier_destroy () from /usr/lib/libpthread.so.0
#4  0x00007f757d4a796f in ?? () from /usr/lib/xorg/modules/dri/swrast_dri.so
#5  0x00007f757d4b3441 in ?? () from /usr/lib/xorg/modules/dri/swrast_dri.so
#6  0x00007f757d15254f in ?? () from /usr/lib/xorg/modules/dri/swrast_dri.so
#7  0x00007f757d1525f5 in ?? () from /usr/lib/xorg/modules/dri/swrast_dri.so
#8  0x00007f757d150a2f in ?? () from /usr/lib/xorg/modules/dri/swrast_dri.so
#9  0x00007f75945d9522 in ?? () from /usr/lib/libGL.so.1
#10 0x00007f75945b5506 in ?? () from /usr/lib/libGL.so.1
#11 0x00007f75945b5589 in ?? () from /usr/lib/libGL.so.1
#12 0x00007f75945b56de in ?? () from /usr/lib/libGL.so.1
#13 0x00007f7595fefc52 in XCloseDisplay () from /usr/lib/libX11.so.6
#14 0x00007f758caf20a6 in QXcbConnection::~QXcbConnection() () from /usr/lib/libQt5XcbQpa.so.5
#15 0x00007f758caf2409 in QXcbConnection::~QXcbConnection() () from /usr/lib/libQt5XcbQpa.so.5
#16 0x00007f758caf3ea6 in QXcbIntegration::~QXcbIntegration() () from /usr/lib/libQt5XcbQpa.so.5
#17 0x00007f758caf3fb9 in QXcbIntegration::~QXcbIntegration() () from /usr/lib/libQt5XcbQpa.so.5
#18 0x00007f7597e24d43 in QGuiApplicationPrivate::~QGuiApplicationPrivate() () from /usr/lib/libQt5Gui.so.5
#19 0x00007f75983dba09 in QApplicationPrivate::~QApplicationPrivate() () from /usr/lib/libQt5Widgets.so.5
#20 0x00007f7597b24618 in QObject::~QObject() () from /usr/lib/libQt5Core.so.5
#21 0x00007f75983dd7f9 in QApplication::~QApplication() () from /usr/lib/libQt5Widgets.so.5
#22 0x0000000000433f5d in main ()

Рассмотрим основные:
* все креши идут из-за рендеринга libX11 и libGL (т.е. проблема может быть и в дровах видео,
* но есть swrast_dri.so - т.е. сейчас нет аппаратной акселерации и потому nvidia и intel не при чем.


3. проверяем по логам обновлений какие пакеты обновлялись, и тут сюрприз - обновился именно libc:
 upgraded binutils (2.25.1-3 -> 2.26-1)
 upgraded gcc-libs (5.3.0-4 -> 5.3.0-5)
 upgraded gcc (5.3.0-4 -> 5.3.0-5)
 upgraded lib32-glibc (2.22-4 -> 2.23-1)
 upgraded lib32-gcc-libs (5.3.0-4 -> 5.3.0-5)
 upgraded lib32-sqlite (3.10.1-1 -> 3.11.0-1)
 upgraded lib32-systemd (228-1 -> 229-1)
 upgraded libfbclient (2.5.4.26856-3 -> 2.5.5.26952-1)
 upgraded xorg-xrandr (1.4.3-1 -> 1.5.0-1)
так как ни libGL, ни библиотеки X11, ни DRI последние несколько месяцев не обновлялись - можем пока их исключить.
даунгрейдим libc до предыдущей версии, той где все еще присутствует критическая уязвимость CVE-2015-7547 :-D

делаем ребут (libc увы используется почти всей системой, потому для эфекта нужно перезапустить буквально все) - и все работает.

4. Для профилактики CVE-2015-7547 перепроверяем что у нас весь dns идет через закрытый dns forwarder(ключевое слово dnsmasq).

4. Благодарим гребаных "програмистов" за "хорошую" работу.

2014-04-30

вышла новая уебанта, продолжение: немного о радостях жизни...

Продолжая рассказ о прелестях современного говнософтостроения.

за несколько дней пользования к всем проблемам старой уебанты (а ни одна из них не исчезла), добавились новые:

1. автоматически отключается запуск скринсейвера по бездействию пользователя.
т.е. при каждом перезапуске системы нужно идти в настройки скринсейвера и вручную включать запуск по 5мин бездействия.

2. при запуске скринсейвера X залипает.
# dmesg:
 kernel: detected fb_set_par error, error code: -22
При этом процесс kded4 уходит в uninterruptible sleep, если его кильнуть, система возвращается к жизни.

3. всплывающие меню kmix (возможно и других аплетов) появляются всегда на левом мониторе. если primary при этом правый монитор, то после клика на иконку в трее, до меню нужно елозить мышкой через весь full-hd экран.

4. где-то в системных скриптах какая-то куйня, в системе постепенно нарастает кучка зомби-шеллов:
  574 root      20   0       0      0      0 Z   0.0  0.0   0:00.00 1 [sh]
  604 root      20   0       0      0      0 Z   0.0  0.0   0:00.00 1 [sh]
  628 root      20   0       0      0      0 Z   0.0  0.0   0:00.00 0 [sh]
  703 root      20   0       0      0      0 Z   0.0  0.0   0:00.00 0 [sh]

5. еще на правах анекдота. угадайте, какой процесс самый прожорливый? думаете файрфокс с 283 вкладками?
# ps -eo pid,rss,ucmd | awk '{ rss[$3]+=$2; count[$3]++ } END { for(i in rss){ print i,"(",count[i],")",rss[i] } }' | column -t | sort -rnk5 | head -n 10
krunner          (  1   )  2021956
firefox          (  1   )  1108360
okular           (  10  )  588012
Xorg             (  1   )  217296
dropbox          (  1   )  130212
plasma-desktop   (  1   )  120832
plugin-containe  (  2   )  104972
python           (  2   )  102428
ktorrent         (  1   )  87616
psi-plus         (  1   )  76680
т.е. 1 файрфокс (283 вкладки) - 1.1Гб резидентной памяти, 10шт мега-прожорливого окуляра - 0.6Гб, а ланчер krunner - 2Гб резидентной памяти в одно хлебало!

и общие впечатления.

7. намного больше утечек памяти. я думал 16Гб оперативы в ноуте избавят меня от забот о памяти. но блин, когда вдруг замечаешь что выюзано не просто все 16Гб оперативы, а еще и 6Гб свопа впридачу, это блин немного наприятно!

8. swapoff -a работает годами.
зачем он мне нужен? подчистив проблемы пункта 7 - хочется освободить своп, не перетруждать ssd на котором своп, и узнать кто столько выжирает - приложения в свопе не считаются в rss (см. скрипт из жалобы номер 6).
так вот, вычистить 3Гб из свопа, при 10Гб свободной оперативы занимает около 4 часов. и это с ssd в оперативу. КАК?

9. драйвер xhci это инфернальный звиздец.
за неделю 3 тотальных зависания системы с OOPS в этом драйвере.
так как зависло в логах OOPS не зафиксирован, жалею что не сфоткал на экране.

10. драйвер xhci это инфернальный звиздец.
если усыпить систему с чем-то подключенным к usb - при пробуждении пишет "not enough bandwidth" и usb не работает.

2014-04-21

kubuntu 14.04 released!

Свершился очередной праздник-торжество инноваций - вышел новый релиз Kуебанты 14.04!

Жизнь пользователя с каждым релизом становится все уебантей и уебантей!

Глядя на релиз-ноутс сразу понятно - проблем и недостатков в системе нет, и уже давно работа идет только над созданием принципиально новых и инновационных нанофич:
  • новый kde 4.13 (примерно такой же как в предыдущей куебанте, но естественно намного лучше!),
  • новая уникальная мозилла 28, пусть вас не обманывает номер версии 28, это вовсе не та мозилла что стоит на всех компах уже пол-года, это совершенно новая уебантная мозилла!
  • новый Muon Discover, для того что бы можно было получать в два раза больше оргазмов от установки пакетов, ведь все знают что настоящие уебантоиды целыми днями ставят и переставляют пакеты!
  • новый менеджер драйверов, нужно же чем-то себя занять когда надоело ставить пакеты через новый Muon,
  • установщик плагинов для Gwenview (и таки да, оказывается для гвенвью бывают плагины - http://extragear.kde.org/apps/kipi/ и может даже через пару-тройку десят лет появяться полезные),
  • управлялка тачпадом (осталось только что б эта срань определяла тачпад как тачпад, а не PS/2 мышку, иначе управлять в принципе нечем),
  • kde telepathy 0.8 (обязательно надо попробовать, может за 6 лет эта штука доросла до хоть чего-то?),
  • новая конфигурация локализации,
  • новый мега-супер-ахрененный генератор оргаз нетворк-менеджер,
  • новый sdk,
  • новая апликуха для создания загрузочных установочных дисков уебанты на usb-флешках, что бы было проще заражать уебантой других пользователей,
  • KDE Connect для интеграции эм... в общем что-то для переключения треков в плеере андроида с компа, если я правильно понял,
  • автоматический креш ропорт, абсолютно идентичный оному в всех дистрибутивах с kde4 за последние 6 лет, но понятное дело намного лучше, и вы сможете им наслаждаться намного чаще!
  • новый, инновационный и революционный клиент IRC - Quassel 0.10! теперь потребляет еще меньше сетевого трафика! новая версия 0.10 как бы намекает что это вовсе не beta-quality software,
  • новые уникальные уведомления в трее, которые будут сообщать о том что можно по-устанавливать новые пакеты и драйвера, и вы теперь не упустите возможность насладится новыми установщиками пакетов и драйверов!
  • и сразу же сообщение что мега-установщик muon при обновлении скорее всего не сможет обновить систему - software updater can close unexpectedly in very specific complicated update scenarios (Bug #1295437 and #1295440.

Согласитесь, список фундаментальный, в корне меняющий смысл жизни пользователя, и грех не испытать на себе все эти инновации!

Подождав неделю с момента релиза (обычно первую неделю после релиза обновление не возможно выполнить по причине избытка багов), пробую:
W: Failed to fetch gzip:/var/lib/apt/lists/partial/ua.archive.ubuntu.com_ubuntu_dists_trusty_main_binary-amd64_Packages  Hash Sum mismatch
W: Failed to fetch gzip:/var/lib/apt/lists/partial/ua.archive.ubuntu.com_ubuntu_dists_trusty_universe_binary-i386_Packages  Hash Sum mismatch
E: Some index files failed to download. They have been ignored, or old ones used instead.

удивительно, списки пакетов на украинском зеркале битые. даже подождать неделю после релиза, дав возможность исправить очевидные бока не помогло :(
ну ничего, меняем вручную ua на us и  пробуем - списки пакетов целы.

первая радость - инсталяционные скрипты пакета yardradius(когда-то ставил как максимально простой aaa сервер), уже не работавшие при обновлении 12.10 до 13.04, и все еще не работавшие при обновлении 13.04 до 13.10, в новой уебанте по-прежнему не работают! стабильность достойная похвалы!
достаем текстовый редактор, и правим init скрипты...

вторая радость - проблема несовместимости зависимостей openjdk. сносим, обновляем дальше. ставим взад.

третья радость - все обновленные демоны автоматом стартуют, даже если init скрипты отключены. попытка это исправить сразу же дарует нам новую радость

четвертая радость - в системе теперь ЧЕТЫРЕ СИСТЕМЫ СТАРТОВЫХ СКРИПТОВ.
да-да, вы не ослышались! их теперь четыре:
1. скрипты старого доброго sysvinit в /etc/init.d и /etc/rc?.d,
2. новый охуенны upstart с конфигами в /etc/init,
3. какой-то сраный странный runit, непонятно откуда он вообще взялся,
4. и нано-инновационный systemd c конфигами в /etc/systemd

и если раньше любой демон можно было запустить/остановить с помощью /etc/init.d/XXX start|stop, или командами start|stop то теперь это не работает.
например vsftpd:
# /etc/init.d/vsftpd start
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service vsftpd start

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the start(8) utility, e.g. start vsftpd
и если раньше при этом vsftpd стартовал - теперь болт!
# pidof vsftpd
#
зато работает start:
# start vsftpd
vsftpd start/running, process 20431
# pidof vsftpd
20431
#
но если вы думаете что теперь start работает для всех сервисов, то вы ошибаетесь! для 80% всех сервисов start дает ничего:
# start ntp
start: Unknown job: ntp

пока не знаю, насколько ситуация стала хуже вследствии появления systemd, но все и так хреново.

пятая радость - система по-прежнему заботливо снабжает меня локалями и языками народов африки, юго-восточной азии и океании:
# cat /var/lib/locales/supported.d/en
en_HK.UTF-8 UTF-8
en_DK.UTF-8 UTF-8
en_IN UTF-8
en_ZM UTF-8
en_ZW.UTF-8 UTF-8
en_NZ.UTF-8 UTF-8
en_PH.UTF-8 UTF-8
en_NG UTF-8
en_US.UTF-8 UTF-8
en_GB.UTF-8 UTF-8
en_AU.UTF-8 UTF-8
en_SG.UTF-8 UTF-8
en_BW.UTF-8 UTF-8
en_AG UTF-8
en_ZA.UTF-8 UTF-8
en_CA.UTF-8 UTF-8
en_IE.UTF-8 UTF-8
и более того, эти локали автоматом генерятся наново каждые 10 пакетов инсталляции. заботливо удаляем.

шестая радость - верный традициям apt/dpkg каждый раз стоит отойти от компа начинает спрашивать какую-то херню, типа "я очень умный, я вижу ты настраивал пакет Х, давай я похерю этот конфиг [Y/N/D/A/V/C]?" и замирает пока не вернешься, и не пошлешь его нахрен. благодаря этому обновление занимает много часов.

седьмая радость - джекпот!!! - после обновления в систему невозможно зайти ни через kdm, ни через lightdm - после ввода пароля после секундного раздумия система возвращает обратно к окошку входа. а все почему? да потому что при обновлении пакет kde-workspace снесло как ненужный, и в системе осталось НОЛЬ профилей сессий для login-manager. заходим через консоль и доставляем: apt-get install kde-standard

в общем и целом, за три часа удалось и обновить систему, и более-менее вернуть все в первозданный вид.

что можно сказать о иновациях из релиз ноутс?
  • новый kde 4.13 - ноль отличий от того 4.11/4.13 что был в 13.10.
  • мозилла 28 - ноль отличий от той мозиллы 28 что была в 13.10.
  • Muon не установился, как оказалось я его еще несколько версий назад удалил. и слава богу.
  • менеджер драйверов - у меня уже сто лет как все драйвера либо есть в ядре, либо одно из двух. а те драйвера atl и хитрый вайфай с которыми у меня были проблемы - все равно придется ставить по-старинке, потому что эта срань их не умеет.
  • установщик плагинов для Gwenview - спецом полез смотреть - спросило пароль, пять минут тупило, скачало список плагинов. но ничего интересного для себя в плагинах не нашел.
  • управлялка тачпадом - система опять определила тачпад  как PS/2 мышку. бесполезно.
  • kde telepathy 0.8 - удивлен, но оно сумело законектится в googletalk (в 13.10 конектилось в 1 случае из 3), и даже сумело отправить и получить сообщение. но выглядит как говно. и назойливо сыпет все сообщения в system notification. в топку.
  • новая конфигурация локализации - ноль отличий.
  • нетворк-менеджер - сто лет в биореакторе, без шансов на реабилитацию.
  • sdk - бесполезно.
  • апликуха для создания загрузочных установочных дисков - не нашел.
  • KDE Connect - какой-то пердимонокль. из настроек только кнопка ok. элементов управления и того меньше. как работает - хз.
  • автоматический креш ропорт - ноль отличий (и таки да - я уже успел с ним встретиться :))
  • клиент IRC - устанавливать не стал, ведь нужно придумать ЗАЧЕМ? :)
  • новые уникальные уведомления в трее - сразу почувствовал. посыпало кучу говна, пока не нашел как отключить.

что уже/по-прежнему не работает:
1. индикатор раскладки.
эти сраные уебаны его поломали еще при штатном обновлении кде в 13.10. индикатор при запуске кде не появляется. нужно в каждой сессии идти в настройки и его вручную включать взад.
2. window special settin/gs.
эти сраные уебаны его поломали еще при штатном обновлении кде в 13.10. настройки перестают применятся при большинстве событий системы (например suspend/resume). что бы они заработали, нужно каждый раз при входе/resume зайти в настройки и нажать "применить".
3. восстановление сессии.
теперь firefox (а может и другие программы) теперь не запускается при восстанавлении сессии. нужно запускать вручную.
4. опять кодеки mp3 не работают.
теперь новый инновационный подход - ставить стотысяч одинаковых кодеков, каждому плееру - свой!
уже были установлены:
gstreamer0.10-plugins-ugly
libk3b6-extracodecs
chromium-codecs-ffmpeg-extra
oxideqt-codecs-extra
libk3b6-extracodecs
kubuntu-restricted-extras
и еще пришлось ставить
gstreamer1.0-plugins-ugly
скорее всего, по мере использования придется ставить еще.

продолжение следует.

2013-02-12

L2 туннели на убунте

я тут думал взгромоздить на уеб**нту vxlan для того что б прокинуть вланы с виртуалками через ip сеть, но нужно ядро 3.7+ и iproute2 3.7+, и если для первого есть полу-официальные пакеты, то для второго надо собирать из исходников чего совсем не хочется.

искал альтернативу, и решил сделать интересный эксперимент:
на openvpn соединении создаем влан:
 
ip link add link tap-vpn1 name tap-vpn1.11 type vlan id 11
ip link set tap-inwifi.11 up


вешаем айпишник и делаем пинг:
 
ip address add 1.1.1.1/30 dev tap-vpn1.11
ping 1.1.1.2

на другой стороне openvpn туннеля смотрим на результат:
 
# tcpdump -i tap0 -n -e
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tap0, link-type EN10MB (Ethernet), capture size 65535 bytes

13:06:04.918001 42:b9:dd:ac:ff:50 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 11, p 0, ethertype ARP, Request who-has 1.1.1.2 tell 1.1.1.1, length 28

есть заголовок 802.1q и метка влана :)
вот и решение как без огорода можно исхитрится соединить L2 домены ;)

2013-01-29

сетевику на заметку

Для того что б сделать с линухи IGMP Report на группу, можно воспользоватся... iperf!

# iperf -s -u -B 233.33.33.33

-s что б просто ждал
-u потому что по tcp проблематично ждать мультикаст
-B на какой адрес повесится

в зависимости от версии ядра будет слатся либо IGMPv2 либо IGMPv3.
если хотим конкретную версию - меняем sysctl:

# sysctl -w net.ipv4.conf.eth0.force_igmp_version=2

проверяем tcpdump:

# tcpdump -i eth0 proto 2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:33:30.866220 IP 192.168.208.78 > 233.33.33.33: igmp v2 report 233.33.33.33

меняем версию на 3:

# sysctl -w net.ipv4.conf.eth0.force_igmp_version=3
 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:34:07.555048 IP 192.168.208.27 > igmp.mcast.net: igmp v3 report, 1 group

ну а если нужно просто зарегистрировать на сетевухе мультикаст мак, то поможет iproute2:
ip maddr add 233.33.33.33 dev eth0

2013-01-09

без комментариев

 

root@t00l ~ # free -m
             total       used       free     shared    buffers     cached
Mem:          7855       7733        121          0          1        125
-/+ buffers/cache:       7607        247
Swap:         7811       4058       3753

root@t00l ~ # pkill -9 firefox

root@t00l ~ # free -m
             total       used       free     shared    buffers     cached
Mem:          7855       1123       6731          0         10        345
-/+ buffers/cache:        767       7087
Swap:         7811       1851       5960

2012-11-29

как можно ограничить число устройств у абонента?

     эта проблема давно беспокоит всяких жадных провайдеров, ведь клиенты очень любят интернет использовать не просто на своем ноутбуке, но и на телефоне, на телевизоре, медиацентре, на виртуальных машинах, да и просто не привязывать себя к столу проводом а использовать вай-фай.
естественно провайдеру хочется что б клиент в этом случае платил за свои 2Мбит интернета за каждое "подключение" отдельно.

1. традиционное решение проблемы - привязка мак-адресов.
для абонента такой фильтр это даже не проблема - любое устройство позволяет этот мак подменить, а домашние вайфай роутеры это делают почти автоматом.
не проблема для абонента.

2. следующий шаг - использование аутентификации.
например - 802.1x или PPPoE/PPTP доступ в сеть.
решение - выполнять аутентификацию на роутере и с него же поднимать туннель.
не проблема для абонента.

3. тяжелая артиллерия - фильтрация по TTL :)
вешать на клиента список доступа, принимающие пакеты ровно с TTL=128(венда) или TTL=64(unix/linux/macos).
здесь все становится немного сложнее.
не все роутеры умеют такое бороть, но если роутер использует прошивку на линуксе (dd-wrt/openwrt/и т.д.), то там все решается предельно просто:
iptables -t mangle -A POSTROUTING -o -j TTL --ttl-set 128
большинство прошивок могут такую команду добавить а автозапуск.

4. сверх-тяжелая артелерия и приз зрительских симпатий - УСТАНОВКА TTL!
роутер провайдера на все пакеты идующие в сторону клиента ставит TTL=1.
если абонент подключил маршрутизатор, то он при пересылке пакета внутрь на проводную ил беспроводную либо даже виртуальную сеть уменшает TTL на единицу, и тут - упс, TTL=0, пакет нужно отбросить и отправить TTL exceeded!
на линуксе (dd-wrt/openwrt/и т.д.) все решается предельно просто, как и в прошлом варианте, только теперь на трафик полученный на wan интерфейсе:
iptables -t mangle -A PREROUTING -i -j TTL --ttl-set 128
большинство прошивок могут такую команду добавить а автозапуск.

если вы можете список дополнить - буду благодарен :)

2012-11-06

управление тачпадом из коммандной строки

У меня забавная проблема с отключением тачпада в убунте.
Конечно же оно не работает :)
Но на самом деле проблема не в том что кнопка отключения не работает. Она-то как раз в норме. Вот проверка xev'ом:
KeyPress event, serial 40, synthetic NO, window 0x4600001,
    root 0xd8, subw 0x0, time 26256081, (598,673), root:(601,696),
    state 0x0, keycode 199 (keysym 0x1008ffa9, XF86TouchpadToggle), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 40, synthetic NO, window 0x4600001,
    root 0xd8, subw 0x0, time 26256156, (598,673), root:(601,696),
    state 0x0, keycode 199 (keysym 0x1008ffa9, XF86TouchpadToggle), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False
Проблема в том что у меня оказывается нет тачпада:
#  xinput
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ PS/2 Generic Mouse                        id=12   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Sleep Button                              id=9    [slave  keyboard (3)]
    ↳ Laptop_Integrated_Webcam_HD               id=10   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                          id=13   [slave  keyboard (3)]
Вот та хрень PS/2 Generic Mouse и есть мой тачпад :(
Модель ALPS воткнутая долбаным делом не существует, и дров на нее не бывает, как и прокрутки и малтитача.

Но вопрос по отключению, и здесь все просто: xinput enable 12 и xinput disable 12 (12 это айди из вывода xinput).

Но это не интересно, нужно написать скрипт touchpad-toggle!
#!/bin/bash
TOUCHPAD=12
if [[ $(xinput list ${TOUCHPAD} | grep "This device is") =~ disabled ]]; then
        echo "Enabling touchpad"
        xinput enable ${TOUCHPAD}
else
        echo "Disabling touchpad"
        xinput disable ${TOUCHPAD}
fi
Теперь можно было бы попробовать повесить этот скрипт на кнопку XF86TouchpadToggle но, к сожалению, КДЕ не позволяет именно на эту кнопку вешать скрипты :(

А вас раздражает когда ноут просыпается от открытия крышки?

Лично меня - да.
Я обычно предпочитаю его открыть поставить в дальний угол стола, подключить все мониторы, сетевой кабель, usb-хаб, и только потом нажать кнопку power.
Но - не судьба. Под убунтой он просыпается от открытия крышки :(

Не беда! Это можно полечить.
Разгадка этой проблемы в /proc/acpi/wakeup:
# cat /proc/acpi/wakeup
Device  S-state   Status   Sysfs node
P0P1      S4    *disabled 
EHC1      S4    *enabled   pci:0000:00:1d.0
EHC2      S4    *enabled   pci:0000:00:1a.0
XHC       S4    *enabled   pci:0000:00:14.0
RP01      S4    *disabled  pci:0000:00:1c.0
PXSX      S4    *disabled  pci:0000:01:00.0
RP05      S4    *disabled  pci:0000:00:1c.4
PXSX      S4    *disabled  pci:0000:02:00.0
RP06      S4    *disabled 
PXSX      S4    *disabled 
PEG0      S4    *disabled 
LID0      S3    *enabled  
Это список устройств которые могут будить систему из разных уровней сна(S3=suspend to ram, S4=hibernate to disk), и то разрешено им это делать или нет(enabled/disabled).
Что за pci устройства можно проверить относительно просто:
# lspci -s  0000:00:1d.0
00:1d.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 (rev 04)
Но меня интересует последняя строка - LID0.
Отключить - просто:
echo -n LID0 > /proc/acpi/wakeup
cat  /proc/acpi/wakeup
Device  S-state   Status   Sysfs node
P0P1      S4    *disabled 
EHC1      S4    *enabled   pci:0000:00:1d.0
EHC2      S4    *enabled   pci:0000:00:1a.0
XHC       S4    *enabled   pci:0000:00:14.0
RP01      S4    *disabled  pci:0000:00:1c.0
PXSX      S4    *disabled  pci:0000:01:00.0
RP05      S4    *disabled  pci:0000:00:1c.4
PXSX      S4    *disabled  pci:0000:02:00.0
RP06      S4    *disabled 
PXSX      S4    *disabled 
PEG0      S4    *disabled 
LID0      S3    *disabled 
 Осталось сделать это умолчанием. Можно это положить где-то в /etc/pm/sleep.d, что б оно применялось при выходе из сна(на случай если потеряется например при хибернейте), или в /etc/rc.local.

P.S. Сначала написал пост, потом нагуглил точно такой же :)
P.P.S. Осталась только одна маааленькая проблемака. Это не работает :(

И вновь про криворуких программистов

Есть еще одна милая проблема которая не дает мне спокойно жить.
Она состоит в том что мониторов у меня не два, а ТРИ.
Но. На самом деле, видеокарта одновременно может аппаратно обрабатывать ровно столько мониторов, сколько в ней есть CRTC, которых в большинстве случаев два.
Потому я использую два внешних(подключенных к VGA и HDMI), а третий - дисплей ноута отключаю.
Но. Люди Творящие Добро сделали так, что X-сервер автомагически при запуске пытается включить ВСЕ мониторы. И это заканчивается либо Тремя Черными Экранами Не Реагирующими Ни На Что, либо (если повезет), консолью с сообщением
[drm:drm_crtc_helper_set_config] *ERROR* failed to set mode on [CRTC:7]
Решение - отключить механически один из мониторов, затем с телефона зайти по ssh на ноут, и сделать /etc/init.d/?dm restart
Круто, правда? Чистый юзабилити, мать его так...

Вчера не мог себя заставить занятся делом, и потратил на траблшутинг этой херни два часа.
Идея простая: написать кусок конфига X-сервера, в котором запретить включать любые мониторы кроме встроеного (для начала хотя бы так, дальше буду думать как удобнее).

Проблема первая: Ведь теперь нет xorg.conf! где X-сервер хранит свой конфиг???
Все очень просто -
mkdir -p /etc/X11/xorg.conf.d
^mkdir^cd^
vim 10-monitor.conf
Section "Monitor"
        Identifier "LVDS1"
        Option "Primary" "true"
        Option "Enable" "true"
EndSection

Section "Monitor"
        Identifier "HDMI1"
        Option "Enable" "false"
EndSection

Section "Monitor"
        Identifier "VGA1"
        Option "Enable" "false"
EndSection
Думаете заработало? Хрен!

1) для привязки мониторам к видеовыходам нужно добавить настройку видеокарты:
Section "Device"
        Identifier "vcard"
        Driver     "intel"
        Option "Monitor-LVDS1" "LVDS1"
        Option "Monitor-VGA1" "VGA1"
        Option "Monitor-HDMI1" "HDMI1"
        Option "Monitor-DP1" "DP1"
EndSection
2) Опция Enable, несмотря на то что описана в документации, оказывается не работает! И нет, NOTABUG!!!
Ок, добавляем кроме Enable false еще и Disable true.
работает? Конечно же НЕТ!

Не смотря на то что теперь конфиг правильный (проверяем по логам иксов):
 (II) intel(0): Output LVDS1 enabled by config file
 (II) intel(0): Output VGA1 disabled by config file
 (II) intel(0): Output HDMI1 disabled by config file
Проблема на месте, и дальше в логе мы видим:
 (WW) intel(0): Option "Primary" is not used
 (WW) intel(0): Option "Enable" is not used
Т.е. интеловский драйвер просто ложит болт на опцию Enable?

3) Есть еще мега-опция "Ignore" "true"
Но если ее повесить на выход, он становится полностью недоступным, т.е. даже исчезает из xrandr.
Но это плюс, ведь xrandr мне еще светит неведомого зверя под именем DP1, повод исправить! Добавляю в 10-monitor.conf
Section "Monitor"
        Identifier "DP1"
        Option "Ignore" "true"
EndSection
Итог: проблема осталась на месте. Я ненавижу разработчиков Xorg. Я ненавижу разработчиков Intel. При включении ноута надо не забыть отключить внешние мониторы :(

Еще один камень в сторону криворуких программеров

Еще одна веселая проблема.
Проявляется во многих "кросс-платфоменных" ява-приложениях, но больнее всего меня поразила в такой штуке как NX.
Мне приходится постоянно с ним работать в удаленных лабах.
Вот так он должен выглядеть:
В конфигурации терминальной сессии для удобства вшито разрешение 1024х768, это удобно, его хватает (разрешение можно поменять на сервере лаб, и оно опять таки вшивается в настройки сессии NX).
Все бы супер, но, все работает нормально только если у меня подключен один монитор. Как только мониторов два, картинка становится такой:
Как вам такое?
Вы можете подумать что у меня два огромных 40" монитора, но фиг там! Это окошко по ширине "почти" помещается на два монитора!
И долбаный NX плюет с колокольни на то что в сессию вшито разрешение экрана(при одном мониторе эти опции работают идеально):

И внутри терминальной сессии сменить разрешение невозможно.

Решение нашел здесь
Написать библиотеку подменяющую функции Xinerama возвращающие размер дисплея и перезагрузить ее с помощью LD_PRELOAD!!!
ОФИГЕТЬ

Причина очень проста - программисты в NoMachine неправильно использовали функцию получения размера дисплея, т.е. получали разрешение правильно, но не обрабатывали мульти-мониторную конфигурацию, хотя как это делать описано даже в официальной документации.

Теперь воркараунд.
1) скрипт nestify, запускающий одну программу под Xephyr:
#!/bin/bash
RESOLUTION="1024x768"
while [[ $1 =~ - ]]; do
        case $1 in
                -r)
                        RESOLUTION=$2
                        shift 2
                        ;;
        esac
done
for i in `seq 30`; do
        [[ -a /tmp/.X$i-lock ]] && continue
        Xephyr -ac -screen ${RESOLUTION} -br :$i > /tmp/xephyr.$PID.out 2>&1 &
        export DISPLAY=:$i
        sleep 1
        exec $*
        exit
done
Большая часть скрипта - грязный хак перебирающий свободные десктопы что б можно было запустить одновременно несколько таких сессий.
2) скрипт-оболочка для nxclient:
#!/bin/bash
nestify -r "1024x768" /usr/NX/bin/nxclient $*

Теперь вместо порнографии со второго скриншота у меня получается такая картинка:
Есть конечно недостатки: пока не придумал как изменить заголовок окна на более информативный, но намеки нашел здесь, но патчить и пересобирать ради этого не готов :(

P.S. За моральную и техническую помощь спасибо Илье :)