Показаны сообщения с ярлыком боль. Показать все сообщения
Показаны сообщения с ярлыком боль. Показать все сообщения

суббота, 21 декабря 2024 г.

Короткий депрессивный пост про мотивацию

 Наткнулся на мысль, что современные управленческие идеи, пришедшие из культуры бигтеха по определению, ведут не то к депрессии, не то к шизофрении, выгоранию в общем :)

Базовая идея мотивации заключается в 100% вовлечении человека в работу, чтобы он прямо ей горел, всего себя ей отдавал. И это хорошо работает, если проект интересный и дела в нём идут замечательно, он выстреливает, растёт, а с проектом — и ценность сотрудника.

Проблемы начинаются с того момента, когда перспективы становятся неясными, что не всегда зависит от сотрудника и компании — есть конъюнктура рынка и другие внешние рамки, которые могут помешать выстрелить. И в этих условиях, когда человек никак не может изменить результат, есть два варианта: 100% гореть, что ведёт к депрессии (сколько ни копай, всё равно не выкопаешь), иначе хотя бы завести хобби. Во втором случае рано или поздно окажется, что проще работать формально и где-то забивать побольше. Очевидно, что второе для конечного индивидуума лучше — проект потом можно и новый начать, а вот расстройство от неудач ещё сто́ит пережить. Но идеи-то требуют противоположного!

В общем, такая себе проблема. Как по мне, идеального решения здесь нет.

воскресенье, 26 мая 2024 г.

devlog hrtp-demake: Optick и небольшое профилирование.

 


Вот как-то так Optick у меня и выглядел на одной из итераций профилирования

    Недавно решил побороться с производительностью своего пет-проекта - hrtp-demake, и пришёл к выводу, что мне нужен нормальный, заточенный под это профилировщик в движке. В своё время я больше возился с Very Sleepy и это ок, но, увы, семплирующий профилировщик не может показывать, что там жрёт время в кадре, а в семнадцатую студию ничего хорошего под это не завезли. В новой вроде бы должна быть какая-то поддержка flamegraph-визуализаций, но я не смотрел, и перелазить туда мне пока неохота.

четверг, 18 апреля 2024 г.

Про A Thousand Suns

 

(тысяча солнц жи!)

    Вчера по наводке из другого блога, посмотрел текущие вышедшие серии этого соперника "Любви, смерти и роботов" и, в итоге, напомнил этим почему не смотрю 99,5% современного кино.

воскресенье, 31 марта 2024 г.

Очередной девлог-апдейт по разработке hrtp-demake

 

(взято отсюда: https://vk.com/wall-143107500_73606)
    Я уже давно не писал ничего на эту тему в первую очередь, потому что был сильно занят на основной работе. Но прогресс по задаче есть: в принципе, все пункты из поста сделаны. Игра на довольно мощной машине грузится не 13с, а 3-5, а то и меньше, памяти отъедает в пике не более 400 Мб, в принципе жить можно. Тесты прошли на основном компе тоже хорошо, особых проблем нет.

    Казалось бы - вперёд, выкладывай и кайфуй. Но, увы, пока сильно радоваться не приходится из-за некоторых технических проблем. Производительность на слабых машинах оставляет желать лучшего, но это не фатально - есть ощущение, что если собрать, наконец, полноценный релизный билд со всеми жёсткими оптимизациями и протестировать его, можно в принципе забить. Это не значит, что профилировать не придётся, но я, скорее всего, отложу такое на будущее. Хочется всё же идти вперёд, а то разглядывать текущий контент, откровенно говоря, задолбало и демотивирует. Ещё последний тест на Windows XP показал странные графические артефакты - возможно, у старья, конечно, отваливается древняя встроенная видеокарта, возможно просто что-то с мипами. Игра при этом работает хорошо, геймплей это не блокирует. Но, скорее всего, и это отложу на потом, хоть мне их и хочется отладить побыстрее и такие проблемы самого раздражают. Юмор ситуации заключается в том, что именно релизный билд с оптимизацией на древнем слабеньком компе с допотопной виндой показывает скорость получше, чем на сравнительно свежем без. В общем - поле для исследования есть, найти бы на это время, как и на планируемую интеграцию Optick для профилирования.

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

  • Небольшой рефакторинг, на уровне полутора классов
  • Нужно немного поправить контент: пара спрайтов не нравится и  перерисовать будет хорошо
  • Нужно ещё добавить одно мелкое изображение для конца игры. Это давно было запланировано, но увы, руки доходят только сейчас.
  • Немного поправить тему в конце игры, возможно, даже как-то более серьёзно
  • Ну и немного начать делать по третьей части (это хочется сделать до выкладывания, но, может, и отложу).
  • Стейджинговые скрипты (уже почти что готово, но надо довести до ума).

  Ну и хоть на паре локальных машин посмотреть, насколько всё в релизной сборке работоспособно. Должно быть хорошо - на Windows XP, по сути, она и тестировалась, но неясно являются ли проблемы выше чисто местным колоритом или это что-то иное.

    После чего я, наверное, выложу текущий билд как есть, иначе, если править всё — то в силу того, что приходится делать это всё в одиночку, оно может и до конца года растянуться. А так - хоть что-то.


пятница, 19 января 2024 г.

UMaterial, UMaterialInstanceDynamic, UMaterialInstanceConstant и UpdateStaticPermutation в UE5.2+

    Недавно столкнулся со странностями в архитектуре UE 5.2+. В данном случае – с устройством материалов в движке. Материал, как уже известно, в анриле может быт много чем, но меня интересовала первичное его назначение – когда он работает как эдакий шейдер+ с биндингами переменных. Основной проблемой было то, что материалы странно вели себя при рендеринге из коммандлета, который запускался из консоли – в одну из веток поступали какие-то некорректные данные и, увы, это пока не удалось отладить. Частично из-за того, что нет простой прямой связи между объектами рендеринга и материалами. А ещё RenderDoc упорно не хотел показывать никаких вызовов графического API, хотя рендеринг явно происходил. В итоге принял решение сбросить определённый флажок, который имел вид Static Parameter Switch в наследуемом инстансе материала  и должен был решить проблему за счёт убирания глючащей ветки.

    И вот здесь позволю себе отступления, что вообще во время исполнения EG рекомендуют использовать UMaterialInstanceDynamic, который по идее позволяет избежать лишней компиляции материалов и вообще весь шустрый. В принципе, почему бы и нет? Все нужные методы у него есть, хорошо же? Я говорю, само собой, об условном UpdateStaticPermutation, аж в трёх вариантах, который по идее должен давать возможность переопределять статические параметры.

    А вот нет, ни разу. Перегрузка может не триггерить  повторную компиляцию материала. Беглый поиск по редактору и движку, показал, что там чаще используется вот эта перегрузка. Но самое смешное – это если дёрнуть метод на UMaterialInstanceDynamic, то оно счастливо упадёт с ассертом о том, что лишь UMaterialInstanceConstant можно менять такие флаги. В документации ограничения нет, отсюда и пост.

    То есть мы можем использовать в таком случае только UMaterialInstanceConstant. Замечу, что я здесь рассматриваю код, исполняемый, по сути, на этапе ещё не собранной игры, в конечном билде это может не работать.

    Справедливости ради создать UMaterialInstanceConstant в рантайме, вполне можно есть вот такой пример. Однако здесь его кидают в ассет, а это не обязательно всё же делать. Зато, кроме переопределения статических параметров, было нужно ещё и копирование настроек из определённого «предыдущего» материала.

    В итоге получилось что-то такое. Это  далеко не оптимальный код, есть ощущение, что если покопаться ещё, то можно ещё отрезать ненужные действия.


UMaterialInstanceConstantFactoryNew* MaterialFactory = 
	NewObject<UMaterialInstanceConstantFactoryNew>();
// Это совсем базовый материал, а вот Material – это инстанс, который хочется копировать. 
// Замечу, что BaseMaterial должен по идее быть UMaterial
UMaterialInterface* BaseMaterial = Material->GetBaseMaterial();
MaterialFactory->InitialParent = BaseMaterial;
const FName MatName = FName(TEXT("REPLACE_WITH_OWN_MAT_NAME"));
// В данном случае нам не интересен пакет, т.к. мы не планируем из этого делать ассет
UMaterialInstanceConstant* Instance = CastChecked<UMaterialInstanceConstant>(
	MaterialFactory->FactoryCreateNew(
    	UMaterialInstanceConstant::StaticClass(), 
        this, 
        MatName, 
        RF_Standalone | RF_Public, 
        nullptr, 
        GWarn
   )
);

// Это обычно делают перед обновлением свойств в редакторе, не стал менять
Instance->PreEditChange(nullptr); 

// Копирование исходных параметров. Замечу, что если родителем Material является 
// другой инстанс, то его тоже стоит скопировать 
Instance->CopyMaterialUniformParametersEditorOnly(Material, true);

// Далее меняем Static Parameter Switch
FStaticParameterSet Set;
// Важно использовать именно эту перегрузку, другая не возвращает базовые свитчи
Instance->GetStaticParameterValues(Set); 
for (auto& Switch : Set.StaticSwitchParameters)
{
     if (Switch.ParameterInfo.Name.ToString() == TEXT("SWITCH_NAME"))
	{
		Switch.Value = <новое значение>;
		Switch.bOverride = true;
	}
}
Instance->UpdateStaticPermutation(Set, Instance->BasePropertyOverrides, true);

// Тут документация недоговаривает, эта принудительная компиляция прекрасно работает 
// и вне FMaterialUpdateContext. 
// Возможно, в будущем всё изменится, но пока это так.
Instance->InitStaticPermutation();  

    Дополнительно можно подёргать всякие сбросы кешей, чтобы сработало, но, по идее, это не обязательно:


Instance->RecacheUniformExpressions(true);
// UPD: 02.03.2024 Вот это вообще на 5.3.2+ начало крашить при рендеринге - причины непонятны, увы
// Впрочем код выше работает и без этого.
Instance->RecacheAllMaterialUniformExpressions(true);
FPropertyChangedEvent Evt(nullptr, EPropertyChangeType::ValueSet);
Instance->PostEditChangeProperty(Evt);
Instance->PostEditChange();

    Как-то так. Это опять же, способ, который я отыскал сам ковырянием в движке и редакторе, но если у кого-то есть более простой и красивый вариант – я буду рад узнать о нём.

пятница, 29 декабря 2023 г.

Итоги? Какие итоги? 2023

Я думал всё же делать итоги 2023, но в итоге пришёл к выводу, того, что их явно рано делать. Слишком много всего выглядит как в процессе, слишком невнятно выходит. Так, что в этом году без итогов. Думаю, авось в следующем удастся вырулить на что-то более логичное..

среда, 6 сентября 2023 г.

FProperty::HasMetaData в Unreal тоже выпиливается в финальной сборке

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

понедельник, 10 июля 2023 г.

UTextureRenderTarget2D и UTexture2D

 Сегодня узнал что UTextureRenderTarget2D::ConstructTexture2D и UTextureRenderTarget2D::UpdateTexture2D  работают только из редактора. Естественно в документации про это ни слова.

... Потихоньку пора брать свои слова о Bitrix обратно. Тут уж явно не они такие - лучшие практики в области составлении документации в действии.

среда, 28 июня 2023 г.

Если появляется странная лишняя сфера в Unreal

 Вот тут пишут что это может быть из-за некорректных настроек и отсутствия Player Start в сцене. Увы, стоит учесть.


четверг, 22 июня 2023 г.

Маленькая заметка по Cook в Unreal Engine

Cook занимается редактор в специальном режиме.  Для отладки лучше всего сразу лезть сначала в UCookerSettings, потом в класс UCookCommandlet. Как правило, основной работой занимается UCookOnTheFlyServer и его метод TickCookByTheBook, который дёргается, если кукается всё.

четверг, 19 января 2023 г.

+1 наблюдение о разработке hrtp-demake

Поймал себя на мысли, что механики, которые я использую в игре во многом взяты из условного Ricochet Extreme. Честно говоря, эта игра довольно объёмиста (и весьма отлично играется) и трудно сказать чего там нет. Но, пожалуй, волей-неволей придётся что-то такое придумать; не хочется быть его полуклоном - так или иначе существенная часть геймплея перекликается, в силу арканоидной природы. 

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

Как-то даже печально - надо будет подумать и придумать того, чего в ней нет. Само собой, трудных в реализации.

Если что - принимаю идеи.

пятница, 18 ноября 2022 г.

Про Blender и Cloth Simulation

Я часто вижу хвалебные оды Blender, да и сам, несмотря на всё, его в какой-то степени люблю.

Одна из особо заметных фич в нём - встроенная физика. Вот про неё как увидишь ролики - ну по ним волей-неволей думаешь: царская вещь, тут тебе и симуляция тканей (cloth simulation) и жидкостей и мягких тел, и чего только нет; сейчас налегке сделаю и всё будет отлично, смоделирую и побегу дальше.

И, как обычно водится, после этого на полном ходу влетаешь в проблемы. На сей раз оказалось что cloth simulation не умеет при крайней степени натяжения порвать условную ткань. Ну вот так, просто не реализовано это. В моём случае это особенно издевательски выглядело: шар пролетал сквозь ткань, натягивал её, прорывался и ткань сохраняла все части на месте.Легко это не чинилось - условный Knife+Edge Split в месте разрыва просто рушил ткань и она крошилась при старте анимации. 

И я бы посетовал, на сам Blender  (и сетую! какого чёрта этого нет в документации!), но казалось бы - полезь в исходники, найди там код этой симуляции и сделай, чтобы при достижении некоторого порога деформации, сдвинутые вершины и грани просто удалялись. Но опыт подсказывает другое: это придётся ковырять чужой код, где документации мало или вообще нет, потенциально писать мейнтейнерам, страдать от того, что абсолютно непонятно как это реализуется, не говоря уже о том, что, по-хорошему я FEM-модели не ковырял уже сто лет, и, что хуже, не хочется тратить, в лучшем случае, две недели на это всё. И с этого как-то печально - вот вроде бы разбирался-разбирался в программированию, а эту задачу нет ощущения, что потяну из-за сложности и разбора чужого кода. То есть может быть и потяну - но не хочется ни тратить время, ни нет удовлетворения от решения сложной задачи.

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

Такие дела.

воскресенье, 16 октября 2022 г.

C++ и кодировки

 Я недавно поругался в микроблоге на ужасную работу с кодировками в C++, а тут подоспел более серьёзный разбор текущего состояния дел.

Надеюсь предложение в язык примут - ад с codecvt вообще выглядит позорным для серьёзного языка. Ну а пока лучше использовать то, что есть в разборе.


среда, 27 июля 2022 г.

И снова про Raspberry Pi 3B+

В прошлый раз рассказал о дурацкой проблеме, возникшей в процессе сборки своего мегадевайса. Покопавшись, таки удалось решить проблему, не взяв в руки паяльник и мультиметр.

Помог вот такой сорт шнура. По сути это Micro-USB на Micro-USB шнур с выключателем. Это ни разу, не супер реализация, так как подключать приходится через переходник USB-male - USB-male , а потом преобразовывать USB в Micro-USB . Соединение при этом хлипковато, нет ощущения прочности. Но, тем не менее, это работает under-voltage не возникает.

Остаётся только поместить это всё в корпус.

Такие дела.

воскресенье, 26 июня 2022 г.

Про Raspberry Pi 3B+ и его мобильность

Мне неожиданно захотелось собрать портабельную консоль на том же Raspberry Pi 3B, так как многие, не без причин, хвалят "малинку" за удобство и полезность. 

Сказано - сделано. Взял PowerBank RAVPower Power Bank 26800mAh PD 30W, зарядил, подключил - работает, система не показывает undervoltage, живи и радуйся. А вот нет же. 

Захотелось чтобы выключение было красивым - через тумблеры включать и выключать экран и сам одноплатник. Взял себе два USB-кабеля с переключателями  и тут - облом - undervoltage, напряжения в системе стало не хватать. Некритичный, появляется, в моменты нагрузки ни к чему, кроме отображения на экране не приводит. Ну и скорее всего просадки по производительности, но тут, в силу тяжести самих приложений  и общей неторопливости Raspberry, без инструментации не измерить.

Я сначала подумал, что дело в дополнительном переходнике USB - mini-USB который сильно длинный.  Попробовал взять вариант с тумблером, но USB-mini-USB напрямую. Это не изменило ситуацию, и я подумал, что шнур опять длинный (хотя во всех случаях совместимость с "малиной" гарантировалась).

Попробовал собрать более короткий вариант, но уже с двумя переходниками и это не помогло, всё так же при нагрузке возникает under-voltage. Вроде бы все заявляют о совместимости с Raspberry, которая на деле оказывается какой-то совместимостью в вакууме. 

В итоге, пока принял решение забить и, либо выдергивать шнур руками (не нравится, ибо некрасиво и неэргономично), либо жить с недостатком напряжения.

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

UPD 1.07.22: Попробовал на аккумуляторе помощнее - Harper PB-0030. Дело всё же в шнурах, результат не изменился.


воскресенье, 25 июля 2021 г.

extern "C" и namespaces в C/C++ или как я подгорел на выходных

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

TL;DR никогда ни за что, не мешайте extern "C" и пространства имён в определениях функций. Это не работает нормально ни в одном компиляторе и, как обычно, это описано только где-то в дебрях stackoverflow, хоть и разрешено в компиляторах MinGW и MSVC . 

Замечу, что эта проверка есть в SonarSource но почему-то в виденных мной учебниках плюсов это правило отсутствует, что принципиально неправильно.

среда, 9 декабря 2020 г.

Про Unity и ачивки на Android

Решил от скуки поковырять ачивки на андроиде под Unity, и, честно говоря, разочарован. 

Исходный вариант выглядит как-то очень тяжело, и больно, и выполнен в лучших традициях российской бюрократии (даром, что это не российская бюрократия): приложение в Google Play создай, keystore подпиши, проект в google console создай, OAuth сделай и чуть что - всё не работает. 

Возможно, я сильно заморочился и можно как-то проще. Есть, например, статья в которой всё как-то доступно объясняется, но отлаживать это - ужасная боль. Интерфейсы гугл плея при этом вызывают недоумение (одно только выделение кнопки получения ресурсов серым в противоположность другим кнопкам чего стоит). 

Хочется просто дропнуть всё это, по быстрому сделать их сохранение где-то локально (или отправку на свой сервер) и забить. Так пока и поступлю, возможно в будущем вернусь к этому. Пока есть более интересные вещи.

среда, 4 ноября 2020 г.

Про ввод в Unity

Разбираюсь со вводом в одной демке Unity 2019.4 LTS. И там с целью расширения всё сделано через условные виртуальные оси. Ладно, ок, наконец у нас большой спектр устройств для ввода, действительно стоит как-то абстрагироваться. Но в UI тут дичь мимо которой мне трудно пройти. Вот выдержка из документации:

Как это выглядит в редакторе в пресловутой демке:
Итого: две оси с одинаковым названием, одна из которых отвечает за геймпад, а другая за клавиатуру.  Это какая-то жесть: смотреть неудобно и разбираться тяжело. 

Но главное на первом скрине. Как добавить новую ось? Ну ты номер поменяй, это же так логично. И неотменяемые действия - это вообще замечательно. Ошибся? Перенабирай заново! И это не какой-то nightly build, не бета, это LTS версия Речь идёт, к тому же, о де-факто стандарте в индустрии. Так и живём.

 


понедельник, 13 августа 2018 г.

Skype и его история сообщений

Немногие знают, что у меня постоянно висит в Скайпе диалог  с неким К., которого я уже давно знаю и с которым у меня часто происходят довольно примечательные диалоги. Их иногда довольно здорово, спустя полгода-год перечитать, потому что это уже отпечаток истории, как старый фотоальбом или записки пятилетней давности. Но скроллить мессенджер вверх, чтобы почитать всё в хронологическом порядке неудобно, т.к. там полноценный браузер и он тупит и тормозит из-за бесконечных подгрузок через AJAX. И недавно, я задумался об экспорте истории в удобочитаемый вид.  На поверку оказалось, что самый лучший способ экспортировать полностью историю из Скайпа - это, судя по всему, устроиться в NSA. Почему?  Да потому что, как обычно, развитие продукта отломало всё что можно.

Вот, например, есть ссылка на FAQ.  Вроде бы всё адекватно написано. Но нет: во-первых в новом Skype для Windows 10 экспорт истории найти невозможно. Я искал минут пятнадцать, но его нет.  В других местах, естественно говорят о том, что-де юзайте Skype Classic. Так вот  - там эта кнопка открывает пустое окно. В Skype API этого тоже нет, там вообще кроме interviews и ботов ничего и нет. Шиш вам с маслом, а не история, ишь чего захотели.

Если говорить серьёзно, то  в этом есть какая-то логика: что если я взломал чей-то аккаунт и захотел слить историю? Но тогда какой смысл вообще говорить об экспорте истории, какой смысл вообще в централизованном сервере скайпа? 

Однако, в конечном итоге, историю удалось достать из файла C:\Users\<имя пользователя>\AppData\Roaming\Skype\<имя аккаунта Skype>\main.db .  И то, по сути из-за того, что использовалась старая версия скайпа и там сообщения судя по всему, грузились до бесконечности. В итоге удалось достать сообщения, которые были отправлены 5 лет назад.  А вот, если вы поставили скайп заново хоть какой - то дальше месяца назад по времени не улетите, как бы ни хотелось. По крайней мере, у меня не вышло. 

Изнутри этот файл - тупо БД SQLite3, можно сходу выбрать все нужные сообщения через несложный код вида:

SELECT 
    `id`, 
    `timestamp`, 
    `from_dispname`, 
    `body_xml`  
FROM  Messages 
WHERE 
    `convo_id` = <ID чата в таблице Conversations> 
ORDER BY 
    `timestamp` ASC; 

timestamp здесь - время отправки, from_dispname - имя автора, отображаемое в чате, body_xml - по большому счету HTML сообщения в чате. В принципе, это единственное место, где я был доволен ситуацией, ибо обрабатывай - не хочу, хотя и не секурненько. Также в этой таблице, есть ещё другие флаги и поля, которые хранят важную информацию, но мне пока хватило и этих.

Каких-то особых выводов в этой истории нет и быть не может т.к. всё соответствует трём максимам:
  1. Всё что не сохранено локально в двух экземплярах можно считать удалённым
  2. Всё что хранится в облаке можно считать удалённым.
  3. Единственный хороший мессенджер  - это тот, который вы написали и хостите сами.  По крайней мере, если в нём чего-то не будет - то вы сами виноваты.







суббота, 11 ноября 2017 г.

Ubuntu 17.10, VNC и автологин

Неожиданно в новой убунте перестал работать tightvncserver, который дает возможность . Тупо падает с "No VNC extension on ..." и всё. Правки из гугла не помогли, более того - непонятно почему раньше этой проблемы не было.

Перестал работать автологин в LightDM. При этом, как узнал потом, теперь, вместо единого файла /etc/lightdm/lightdm.conf, есть целых три файла:
  • /etc/lightdm/lightdm.conf
  • /etc/lightdm/lightdm.conf.d/
  • /usr/share/lightdm/lightdm.conf.d/
В сумме там 10 замечательных файлов, каждый из которых может поменять конфигурацию, при этом у трех в одной папке ещё и приоритеты совпадают. Отладить это немыслимо. Хорошо хоть логи есть. У меня такое ощущение, что я пропустил момент, когда такой бардак стал нормой. Раньше был едва-едва один файл конфигурации у приложения и админить такой зоопарк было как-то проще. И автологин работал.

В итоге, к черту выпилил стандартный greeter, заменив его на тупейший скрипт - и, о чудо, всё заработало, автологин пошел. tightvncserver тупо заменил на Vino в автозагрузке, который заработал сразу.

Обидно как-то, 2017-й год на дворе, а апдейты софта в Linux как были русской рулеткой с пятью патронами, так и остались.