poniedziałek, 11 marca 2019

Divinity: Original Sin (GOG) nie działa

W pewnych konfiguracjach gra D:OS nie chce się uruchomić. Związane to jest z błędem w interpretacji informacji, które zwracają funkcje z bibliotek. Nie wdając się w szczegóły, rozwiązanie polega na zastąpieniu tych funkcji takimi, które zwracają wartości przewidywane przez grę.

Aby to zrobić, trzeba skompilować plik, z nowymi funkcjami [źródło].

Zapisujemy poniższy kod [źródło] do pliku divos-hack.c w katalogu z plikiem runner.sh:
/* * LD_PRELOAD shim which applies two patches necesary to get the game * Divinity: Original Sin Enhanded Edition for Linux to work with Mesa (12+) * * Build with: gcc -s -O2 -shared -fPIC -o divos-hack.{so,c} -ldl */ /* for RTLD_NEXT */#ifndef _GNU_SOURCE#define _GNU_SOURCE#endif#include <dlfcn.h>#include <GL/gl.h>#include <string.h> #define _GLX_PUBLIC /* * https://github.com/karolherbst/mesa/commit/aad2543bf6cfbd7df795d836e5ff4ec8686e4fdf * - allow env override of vendor string. I actually just hard-coded * ATI Technologies, Inc., since that appears to be what's needed */const GLubyte *GLAPIENTRY glGetString( GLenum name ){ static void *next = NULL; static const char *vendor = "ATI Technologies, Inc."; if(name == GL_VENDOR) return (const GLubyte *)vendor; if(!next) next = dlsym(RTLD_NEXT, "glGetString"); return ((const GLubyte *GLAPIENTRY (*)(GLenum))next)(name);} /* * https://gist.github.com/karolherbst/b279233f8b13c9db1f3e1e57c6ecfbd2 */_GLX_PUBLIC void (*glXGetProcAddressARB(const GLubyte * procName)) (void){ static void *next = NULL; if (strcmp((const char *) procName, "glNamedStringARB") == 0 || strcmp((const char *) procName, "glDeleteNamedStringARB") == 0 || strcmp((const char *) procName, "glCompileShaderIncludeARB") == 0 || strcmp((const char *) procName, "glIsNamedStringARB") == 0 || strcmp((const char *) procName, "glGetNamedStringARB") == 0 || strcmp((const char *) procName, "glGetNamedStringivARB") == 0) return NULL; if(!next) next = dlsym(RTLD_NEXT, "glXGetProcAddressARB"); return ((_GLX_PUBLIC void (*(*)(const GLubyte *))(void))next)(procName);}
Następnie plik ten należy skompilować, dobrze jest wcześniej zainstalować paczkę build-essencial.
sudo apt install build-essential
gcc -s -O2 -shared -fPIC -o divos-hack.so -ldl divos-hack.c
Następnie, plik runners.sh, należy przerobić na:
#!/bin/sh
export MESA_GL_VERSION_OVERRIDE=4.2 MESA_GLSL_VERSION_OVERRIDE=420
allow_glsl_extension_directive_midshader=true LD_PRELOAD=./divos-hack.so LD_LIBRARY_PATH="." ./EoCApp

Dell Inspiron 1501 nie restartuja ani nie wyłącza się

Znalazł się stary laptop, dla którego znalazło się zastosowanie. Jest to staruszek, ale na tyle sprawny, że poradzi sobie z Mintem KDE. Poza problemem ze sterownikami do karty sieciowej (sudo apt-get install firmware-b43-installer), laptop nie che się wyłączyć, gdy mu się to poleci - tak samo przy restartowaniu.
Rozwiązaniem [źródło] na to jest dodanie do domyślnej linii w GRUBIE idle=poll, by wyglądała tak:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash idle=poll"
Edycja grub, npt. tak:
nano /etc/default/grub
Żeby zmiany miały efekt, należy na samym końcu wykonać komendę sudo update-grub2.

sobota, 26 stycznia 2019

Java 11

Jakiś czas temu pojawiło się Play On Linux w wersji 5, w której dostępne są dystrybucje Wine 4.0. Próbowałem również Lucius'a, ale wydajność (testowane na NWN2) była znacząco niższa (też z Wine 4.0). Żeby skompilować Phoenicis (POL 5), potrzebna jest Java > 10 [źródło, źródło]:

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt update
sudo apt install openjdk-11-jdk

czwartek, 27 grudnia 2018

Arduino MIDI jako wejście dla Hydrogen

Hydrogen to elektroniczna perkusja - darmowa i wszystko super. Arduino może być urządzeniem wysyłającym komendy MIDI. Niestety, tak na prawdę nie udaje urządzenia MIDI, a wyłącznie wysyła informacje w standardzie (oczywiście odpowiedni program itd., itd.).

Żeby Hydrogen odbierał te komendy, trzeba stworzyć coś, co będzie tłumaczyło je ALSie lub JACKowi tak, żeby docierało to do Hydrogen. Takim programem jest ttymidi.

Jednakże ten nie chce się skompilować na najnowszym Mincie, aby go do tego zmusić należy dodać w linii gcc w pliku Makefile "-lpthread", w ów czas plik wygląda tak:
all: gcc src/ttymidi.c -lpthread -o ttymidi -lasoundclean: rm ttymidiinstall: install -m 0755 ttymidi /usr/local/binuninstall: rm /usr/local/bin/ttymidi
Potem make install i uruchomienie np. tak: 
ttymidi -s /dev/ttyUSB0
Można już uruchomić Hydrogen, a tam w ustawieniacjh systemu MIDI, wybrać Wejście jako MIDI out.

środa, 5 grudnia 2018

Unity na linuksa

Wchodząc na stronę Unity (silnik gier) ciężko znaleźć instalator (na Mac'a i Windowsa są). Trzeba trochę pogrzebać. Jak się to zrobi, trafia się na forum, gdzie, na ostatniej stronie jest najaktualniejsza wersja instalatora: np. tu.
Pobieramy, chmod +x, odpalamy i już.

piątek, 23 listopada 2018

Wyświetlacz w skali szarości

Odkryłem możliwość ustawienia wyświetlacza w telefonie na skalę szarości (w ustawieniach programistycznych "symuluj przestrzeń kolorów"). Po co? Jak się okazuje nie jest to szczególnie nowy pomysł - małe poszukiwania w Google i od razu widać, że kilka osób już o tym pisało. Zwracają oni jednak głównie uwagę na fakt, że przestawienie telefonu może pomóc w walce z uzależnieniem od telefonu - kolor przyciąga uwagę i ciężej jest nam się oderwać [źródło].
Mi przyświecał inny cel - kiedyś byłem w studio TV, oprowadzający zwrócił nam uwagę na wyświetlacz kamerzysty - w skali szarości. Czemu - dla zdrowia oka.
Kiedyś już próbowałem zrobić to dla wyświetlacza w moim komputerze, były to jeszcze czasy Compiz'a. Nie udało się, ale dziś, wraz z pojawieniem się bodaj 5'tej wersji KDE, jest to o wiele łatwiejsze.

Ściągamy paczkę link [źródło].
Rozpakowujemy i uruchamiamy w folderze konsolę i wykonujemy komendy:
sudo cp -r kwin4_effect_grayscale /usr/share/kwin/effectssudo cp kwin4_effect_grayscale.desktop /usr/share/kservices5/kwin
Wchodzimy do ustawień efektów pulpitu. Wyłączamy i włączamy wtyczkę, zastosuj i włala.

Żeby szybko wyłączać sam efekt, dodałem sobie do menu programów komendę
qdbus org.kde.KWin /Effects org.kde.kwin.Effects.toggleEffect kwin4_effect_grayscale

środa, 21 listopada 2018

Wyciągnięcie dźwięku z pliku wideo

Ściągnąłem z YT audiobooka. Nie potrzebuję do niego obrazu (szczególnie jak chcę go wrzucić na odtwarzacz muzyki). Potrzebuję więc wyciąć sam dźwięk - najlepiej bez konwertowania.

1. Trzeba sprawdzić jaki format jest oryginalny [źródło]:
mediainfo input.mkv
2. Wiedząc jaki format audio mamy, wybieramy odpowiednie rozszerzenie i kopiujemy dźwięk do samodzielnego pliku [źródło]:

avconv -i MyVideoFile.mp4 -vn -acodec copy MyAudioFile.aac