Йа жжу

Windows 11. Меняем Проводник на старый от Windows 10

Через Insider Preview прилетело обновление на Windows 11. Поставил, поигрался. В целом визуально стало красивее, особенно всякие стандартные элементы управления в диалоговых окнах - типа кнопочек, чек- и радио-боксов и тыпы. В общем, надеюсь, когда-нибудь из MSFT  выгонят всех модных «дезигнеров» и винда вернется к интерфейсу Windows 7. Но пока до этого еще далеко и путь не близкий. И на этом пути MSFT снова пытается запрыгнуть на грабли подложенные в Windows 8 — а именно снова перелопатить меню Пуск и, самое главное, Панель задач.

Итак у нас есть новое меню Пуск, которое, слава богу, (пока?) через реестр переключается на старое. Кстати, зацените как MSFT элегантно кинула всех разработчиков динамических плиточек в Пуске — все, нет больше ваших динамических плиточек. Ну, наверное, теперь предложит пилить виджеты (которые у нас вроде в Vista появились под именем гаджетов). В общем Пуск пока можно вернуть человеческий вид, «накрайняк» поставить  Open Shell (бывший Classic Shell). Привет, Windows 8.

Панель задач тоже зацепили «улучшениями». MSFT кто-то рассказал что все любят как в MacOS, и они решили переделать панель в задач в DockBar (ну или как там эта хрень на яблоках называется посередине).

Collapse )
Йа жжу

GMOLO ML156Plus. Linux Mint 19. Wifi

Следующая проблема, с которой я столкнулся практически сразу — это нестабильная работа WiFi. Ноут сети видел, но не подключался — вместо стандартного WiFi-ного сектора в трее висело «кольцо». После перезагрузки мог подключиться, мог не подключиться, мог подключиться после выхода из длительного ждущего режима. Короче снова лотерея. В общем искал я довольно долго причины в итоге начал склоняться к тому, что для адаптера не подходят стандартные драйвера идущие с Mint19. В итоге нашел отличное описание, о том как поставить новые. В этом ноутбуке установлен чипсет Realtek RTL8723BU chipset (0bda:b720) — поэтому читаем с 5го пункта. Если с английским не дружите — просто выполняйте те команды, которые написаны синим — последнее это что что нужно будет добавить в открывшемся редакторе. После всего перезагружаете комп и WiFi должен заработать без особых проблем. Судя по описанию при установке нового ядра, драйвер слетит и все команды нужно будет повторить (ну разве что кроме клонирования репозитория, если вы его оставили, и sed)

Команды также сохранил на всякий случай здесь


Йа жжу

GMOLO ML156Plus. Linux Mint 19. Touchpad

Итак продолжаем мучать Linux на GMOLO ML156Plus. Вернее он продолжает мучать меня. Как я писал в предыдущем посте, вместо винды поставил на ноут Linux Mint 19,   после чего «искаропки» получил неработающий тачпад. Частично это вылечилось установкой ядра 4.19, вместо 4.15, идущего с 19м минтом, но осталось отваливание тачпада после выхода из ждущего режима. В предыдущем посте я писал, что если выходить из него кнопкой включения, то все работает, но оказалось это не так — выходила вообще лотерея, он мог заработать один раз при включении от пробела, при открытии крышки и не заработать в следующий от кнопки включения. Гугление в итоге вывело меня на 3 команды, которые  оживляли тачпад после пробуждения. Вот они:

sudo echo "on" > /sys/bus/i2c/devices/i2c-HTIX5288\:00/power/control
sudo rmmod i2c-hid
sudo modprobe i2c-hid

Конечно, можно вводить их каждый раз, но лучше записать в скрипт touchpad.sh и запускать его. А ещё лучше повесить запуск этого скрипта на сам факт пробуждения. Это можно сделать 2мя способами (хотя наверняка большим количеством). 

Вначале самый простой. Берете этот скрипт touchpad2.sh  (это немного доработанная версия с «отладочной» информацией, в принципе делает она тоже самое) и кладете его в /lib/systemd/system-sleep/ . Делаете скрипт запускаемым через chmod +x. Все.

Collapse )
Йа жжу

GMOLO ML156Plus

На очередной распродаже в Китае прикупил себе сабж для мобильной работы. Конкретно тут, там же можно посмотреть характеристики, кому интересно. Все плюсы его там расписаны, ноут доставили SPSR. Коробка была слегка помята, но к счастью с той стороны где внутри проставка с зарядкой и кабелями, да и сам ноут в «воздушной» упаковке, так что с ним ничего не случилось. Дополнительно продавец, как и обещается, положил наклейки на клаву с русскими буквами (даже 2), переходник на европейскую (русскую) розетку и беспроводную мышку, убогую, но рабочую. В целом по товару все корректно — все соответствует описанию продавца. Но дальше начинаются тонкости.

Первое. У ноута по современной моде основными клавишами верхнего ряды сделаны всякие дополнительные функции типа изменения громкости и подсветки экрана, управления медиаплеером и тыпы, а  для F1-F12 надо зажимать дополнительную кнопку Fn рядом с левым Ctrl. В BIOS это не отключается. Нет такого параметра нигде. Кстати от BIOS я офигел — обычно он у ноутов убогий, но тут столько всяких разделов и параметров, что я столько на десктопных матерях не видел, большинство даже не знаю зачем. Но самого главного — переключения режима Fn — нет. 

Второе. Адаптер WiFi прямо скажем не фонтан. Рядом с роутером в 2х метрах в прямой видимости сигнал показывает половину полосок или даже меньше. Возможно проблемы с моим довольно стареньким и убогоньким роутером, будем посмотреть, но факт имеет место быть.

Collapse )
Йа жжу

Установка SAP Business One Studio Addon для Microsoft Visual Studio 2017 (Community Edition)

При установке SAP Business One Studio есть возможность поставить Addon  под MS Visual Studio. Для этого MS Visual Studio должна уже быть установлена. Причем на июль 2017 года SAP B1 позволяет внедряться только в версии 10,11 и 12 (это, соответственно, VS2010,VS2012 и VS2013). При том что Microsoft уже выпустила VS2015 (14) и VS2017(15). Но если у вас последние, установщик SAP B1 Studio addon не поставит (или не даст выбрать если Custom-установка)

При этом  такая же ерунда была и на предыдущих версиях B1, когда SAP поддерживал только VS2010. Люди обходили это путем временной смены версии  VS в реестре Windows на 10

Но с VS2017 это не прокатывает. Причина, скорее всего в том,что Microsoft не пишет при установке VS2017 путь до исполняемого файла. Во всяком случае не пишет его туда, куда раньше писала, а именно в HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\<версия>_Config\InstallDir

Установщик же SAP B1 Studio завязан на этот ключ реестра. В нем он берет каталог и ищет в этом каталоге файл devenv.exe (это как раз файл студии). И если не находит, то addon свой не ставит.

Collapse )
Йа жжу

Реанимация флешки Gerffins

Вдруг сдохла флешка Gerffins. Причем сдохла как-то оригинально, комп ее видит по при попытке открыть пишет "Вставьте диск в устройство X:". То есть, такое чувство что флешка превратилась в картридер. Что я пробовал

  • Вставлять в другой USB порт =) (картина та же)
  • Вставлять в другой комп (картина та же)
  • Форматировать виндой (не дает)
  • Создавать виндой раздел на ней (не дает)
  • Виндовый diskpart (устройство не готово)
  • flashnul (устройство ен отвечает или типа того)
  • HDD Low Level Format (по таймауту выходит с ошибкой)
  • Еще какой-то разный софтовый мусор, который как правило флэшку просто не видел

Короче, гугление уже склоняло меня к тому, что накрылось что-то физическое и виден только контроллер, а память нет, а значит пора отправлять флешку в утиль.
Пока я не наткнулся на JetFlash Online Recover, которая мне в итоге все реанимировала (данные конечно тютю но там ничего уникального не было). Несмотря на то что это вообще утилита от Transcend, на этом Gerffins она сработала.
Йа жжу

Коротенько про VirtualBox vs VMware.

Я всегда пользовался VirtualBox'ом, еще когда он был Sun'овским. Пробовал и VMWare, но второй меня как-то "не впер", даже не помню почему. VB был поприятнее, попонятнее и как-то ближе. Но в VB всегда была проблема с поддержкой новых еще нерелизных версий Windows (типа Beta, RC, Preview и т.д.). Как правило это проявлялось в том, что разрешение экрана гостевой Windows не меняло размер автоматически под размер окна, в котором она запущена. Разработчики на форуме как правило отвечали, что мы "нерелизы" не поддерживаем. Потом выходил релиз, через некоторое время VB обновлялся, и все приходило в норму. Уж не знаю как там написан VB, что нельзя сделать универсальный видеодрайвер, а не допиливать его под каждую сборку винды одной версии. Да и вообще то он работал, только авторесайза не было. Ну вообще как-то с этим можно было жить.
Где-то год назад, тестируя предварительные сборки Windows 10 и столкнувшись с нересайзом на VirtualBox, я снова попробовал VMware. И она заработала как надо. Там тоже был глюк - надо было ставить в гостевой системе разрешение больше экрана хоста и потом ресайзить окно, но работало.

Сейчас я со стабильной версии Windows 10 переключился на Insider Preview. Это я уже про основную хост-систему. Но в ней некоторые старые вещи не работают вообще (например, старый Cisco VPN Client). Поэтому в виртуалке поставлена Windows 7.
И ситуация хоть и выглядит наоборот до боли повторяет предыдущую - Virtual Box не запускается в Windows 10 Insider Preview вообще. Даже ошибок не выдает при запуске. Просто курсор ненадолго показывает загруженность и все. Мелькнет в процессах и умирает. Я ставлю VMWare - и оно работает.

Тут на днях вышло какое-то обновление VirtualBox и он тоже заработал на пару дней. Но Microsoft выкатила очередную сборку 14238 и после обновления винды VB опять не запускается. А VMware работает.
Вот и все что я хотел сказать по этому поводу.
Йа жжу

Клиент "Облако Mail.Ru" самопроизвольно включает компьютер

После последнего обновления клиента Облако@Mail.RU (а именно до версии 15.06.00.65) ушедший в спящий режим компьютер, через минуту-другую самопроизвольно просыпается. Команда powercfg /lastwake показывает, что виновник cloud.exe от mail.ru :


Как видно из картинки, Облачный клиент называется Cloud.exe и лежит в папке %UserProfile%\AppData\Local\Mail.Ru\Cloud\15060065\Cloud.exe.

Если клиент закрыть, комп сам не включается. То есть виновник найден.
Я связался с поддержкой облака mail.ru, но пока они традиционно запрашивали логи работы, я провел свое "расследование". Ниже будет описан процесс расследования, для понимания надо немного понимать в программировании под Windows, знать assembler, ну и вообще =)

Итак, понятно что есть некий API чтобы будить комп. Погуглив (да - давненько не брал я в руки WinAPI..), я нашел, что в Windows это функции для работы с таймерами. Но не старые добрые SetTimer, а SetWaitableTimer и еще более новая SetWaitableTimerEx. Открыв cloud.exe в Lister в TotalCommander я тупо поискал упоминание этих функций как текст и нашел:

и


Убедившись, что я, похоже, на правильном пути, я стал изучать доки на сами функции ну и гуглить про них. Вначале про SetWaitableTimer. Чтобы таймер пробуждал компьютер от спячки в последнем параметре fResume нужно поставить TRUE. Пришла идея найти вызов этой функции в коде cloud.exe и если там передается что-то отличное от 0, поменять на 0.
Я открыл cloud.exe в старом добром (хотя последнее под вопросом) Hiew.exe, переключившись в режим дизассемблирования (F4 или по Enter), нажал F8 для перехода к заголовку и там нажал F7 для перехода к таблице импорта. Таблицу я отсортировал по имени (F4) и нашел SetWaitableTimer:


Нажатие Enter на этой функции привело меня к такому коду:


Вообще не очень понятно как это сработало и почему вместо места вызова SetWaitableTimer я напал на код, где используется адрес сроки 'SetWaitableTimerEx'. Наверное, в hiew какой-то более интеллектуальный поиск. Так или иначе это мне помогло.
В коде используется поиск адреса функции SetWaitableTimerEx и запоминается по адресу 01FFFCD4, если его еще там нет.
Я нажал F7 и стал искать упоминание этого адреса (заметьте, адрес это просто Int, на Intel'ах он хранится наоборот - вначале младший байт, значит и искать надо наоборот):


Продолжить поиск дальше можно через Shift+F7. Вначале нашелся, естественно, тот же код, где определялся адрес функции SetWaitableTimerEx. Потом еще один похожий, но посложнее, и сразу после него интересное место:


Обратите внимание на команду call ecx - это вызов кода по адресу, который лежит в регистре ECX. А выше как раз и идет загрузка адреса в ECX из ячейки памяти с адресом 01FFFCD4 (или снова поиск через GetProcAddress). Очевидно что это и есть вызов SetWaitableTimerEx. Выше call с помощью push-ей в стек кладутся параметры функции. Я пошел читать MSDN что там за параметры. А заодно гуглить что-нить интересное уже по SetWaitableTimerEx. И на StackOverflow нашел интересную тему, которая вывела меня на истоки проблемы.

Суть в том, что cloud.exe, похоже, написан с использованием сишной библиотеки boost. Тема со stackoverflow ведет на тикет в багтрекере буста. Так вот, проблема в том, что в boost начиная с версии 1.58 в файле thread.cpp при вызове SetWaitableTimerEx в качестве параметра WakeContext использовалась статическая переменная default_reason_context. При ее определении, кстати, используется строка 'generic' - эту строку (имя таймера) видно на первом скриншоте этого поста. Это сразу показатель - если какое-то другое приложение так же будит комп, проблема 99% в корявой версии boost. Так вот, если в WakeContext передается что-то отличное от NULL, винда как-то у себя там решает, что такому таймеру можно будить компьютер.
Эта проблема исправлена в этом коммите, исправление уже вошло в версию boost 1.60.

Мэилрушникам я отписался, но что делать пока они там разродятся новой версией?

Возвращаемся к нашему hiew. И начинаем считать параметры по push снизу вверх от call ecx.
push esi - это hTimer - хэндл созданного таймера. идем выше
push eax - это *lpDueTime - длительность. выше
push 0 - это lPeriod - периодичность, 1 раз. выше
push 0 - это pfnCompletionRoutine - судя по всему функция обратного вызова (вернее ее отсутствие). выше
push 0 - это lpArgToCompletionRoutine - аргументы функции (тоже нет). выше
push 001EF28C - а вот это наш искомый WakeContext. Цифры это адрес структуры REASON_CONTEXT.
Заменим-ка этот адресок на NULL. Переходим в hiew в режим правки (F3). Из самого клиента, конечно, нужно выйти предварительно. Ставим курсор на адрес 7F5285 (сразу после 68) и забиваем 4 байта нулями вот так:


Нажимаем F9 - все файл обновлен.
Запускаем клиент, усыпляем комп, наслаждаемся сном. =)

Для ленивых - уже патченный файл (повторю, версия 15.06.00.65). Не забываем про антивирус =)
Йа жжу

Запуск скриптов PowerShell с параметрами

Решил я тут небольшой скриптец написать на PowerShell. Не хотелось завязываться на установку всякой внешней лабуды типа перлов с питонами, а PS сейчас в каждой винде. Особо то я его ен знаю. Ну все-таки написал как-то, не суть. Скрипт на вход должен получать путь к каталогу, а если того нет, то работать с текущим.
В конце встал вопрос "а как его запускать?". По умолчанию в винде типа с целью безопасности запуск PS-скриптов не работает. При том же даблклике он открывается в редакторе. Чтобы его запустить надо в контекстном меню выбрать нужный пункт. Естественно это лишний геморрой и аргумент в такой запуск не подставишь. Можно, конечно, писать "powershell.exe bla bla bla", но нафиг совершать лишние никому не нужные действия и снижать ресурс клавиатуры =)?

Короче. В Реестре по пути HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Microsoft.PowerShellScript.1\Shell\ есть несколько подразделов. По умолчанию там должны быть 0, Edit и Open. В самом Shell значением по умолчанию стоит Open. А вот для запуска используется ничем не примечательный 0. Поэтому первым делом в Shell в значение по умолчанию вместо Open пишем 0. После этого ps1-файлы будут запускаться по даблклику или по имени в консоли/Far/TC.

Но остается проблема с аргументами - они в скрипт не передаются. Смотрим что напиисано в значении по умолчанию по пути HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Microsoft.PowerShellScript.1\Shell\0\Command. Вообще в разных виндах там может быть разное. В Windows 7 там, например, стоит "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-file" "%1" .  А в Windows 10 - "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'" (именно так с кавычками)

Но смысл в любом случае в том, что передается только 1й аргумент (%1) - в данном случае это имя самого ps1-файла передается в powershell.exe.
Соответственно, после %1 дописываем %* - что означает все аргументы. Для Win10  должно стать в итоге
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1' '%*' "

Причем для меня пока осталось непонятным, что в скрипт вроде как при таком написании должны передаваться все изначальные аргументы - то есть имя самого скрипта первым. Но этого не происходит. То есть при запуске script.ps1 test - в $args[0] будет именно test, как мы ожидаем при нормальном запуске. 
Йа жжу

D-link 615 и OpenWRT

Поставил на роутер D-link 615 E4 не стандартную прошивку, а именно OpenWRT
Версии 15.05. Файл брал этот http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/openwrt-15.05-ar71xx-generic-dir-615-e4-squashfs-factory.bin (не спешите качать - читайте дальше)

Самое прикольное - вначале почитал как ставить, всякие танцы с бубнами, но потом попробовал прошиться из стандартной прошивки (5.11 вроде была), подсунул ей OpenWRT-шный файл и оно прошилось!
Слетел MAC. В инет не выходило - только внутрення сеть была. Ну в настройках прописал MAC от компа - и заработало. Ну это понятно - у провайдера то MAC от компа зареген.

Также не хотел ставится пароль. Все время вверху в Web-интерфейсе маячило, что пароль не установлен. Через сам Web не ставилось. Пришлось зайти telnet'ом на 192.168.1.1 и командой passwd поставить. После этого в Web предупреждение пропало. Также при этом telnet на роутере вырубается. Теперь надо заходить через SSH (например через Putty). Причем сразу после установки пароля не пускает  - надо пару минут подождать. В это время роутер генерит SSH ключи.

На роутер можно также зайти через WinSCP. Протокол передачи ставить SCP.

Занятно, но изначально в прошивке не включен WiFi. Вернее судя по всему вообще ничего для него нет - ни пакетов ни настроек. Я попробовал поустанавливать какие-то пакеты, например, kmod-ath9k. Но это ничего не изменило.
В итоге я на 4PDA вышел на обсуждение Dir-615. Там люди тоже столкнулись с тем же. Из советов  - ставить предыдущую версиюю (BB). Но один хороший человек выложил свою сборку на базе 15.05 с внедренным туда wifi - вот ссылка на пост http://4pda.ru/forum/index.php?s=&showtopic=446257&view=findpost&p=44918648. Что-то он правда выкинул. Но ИМХО ничего нужного. Его версия лежит тут https://yadi.sk/d/vCeasWrkkqhUF . После того как ее прошил, смог включить и настроить WiFi из Web-интерфейса.

Вообще от роутера мне много не надо было. Просто не знаю по каким причинам, но на стандартной прошивке он периодически терял интернет. Причем спасала только перезагрузка. Причем только жесткая - с выдергиванеим провода питания. Судя по всему кнопка Reboot в Web-интерфейсе  тупо не работала. И мне нужно было чтобы роутер периодически ребутился. Например в 5 утра каждый день. В стандартной прошивке таких настроек нет. А в OpenWRT можно настроить задачу по расписанию. Но в доработанной прошвке с WiFi есть способ ее лучше - WatchCat. Эта штука может ребутить роутер не только периодически, но и пропадании интернета (пингуется заданный хост). Еще один аргумент чтобы ее поставить.