Co zrobić, jeśli nasz Linux nie umie otworzyć pustych plików?
Od pewnego czasu zapoznaję się z systemem PorteuX – jednym z wielu na bazie Linuksa (stopniowo zyskującego popularność). Urzekł mnie lekkością, minimalizmem i paroma nietypowymi rozwiązaniami.
Oprócz zalet PorteuX miał jednak swoje zadziory, które sprawiały, że był w moich oczach w tyle względem Minta, którego używam na co dzień.
W tym wpisie pokażę, jak wygładziłem jeden z takich zadziorów, którym było utrudnione otwieranie pustych plików.
Choć opisuję sprawę na przykładzie Porteuksa, informacje z tego wpisu powinny być łatwe do przeniesienia na inne Linuksy, gdyby pojawił się na nich ten sam problem (choć raczej się nie pojawi).
Opis i rozwiązanie problemu
Załóżmy, że chcę sobie stworzyć nowy plik tekstowy. Może notatki na jakiś temat, który mi przyszedł do głowy? Krótki opis plików umieszczonych w tym samym folderze? Skrypt?
Bez znaczenia. W każdym razie: klikam prawym przyciskiem myszy pulpit albo pustą przestrzeń wewnątrz przeglądarki plików, żeby przywołać menu kontekstowe. Wybieram z niego opcję Create Document, a potem Empty File. Nowy plik powstaje bez problemu.

Teraz dwukrotnie klikam ten plik, żeby go otworzyć i zacząć w nim pracować. Na większości znanych mi Linuksów (Mincie, Fedorze KDE, Zorinie…) w tym momencie otworzyłby się domyślny „Notatnik” (edytor tekstu), umożliwiając zapełnienie pustki jakąś treścią.
…Ale na Porteuksie wyskakuje zamiast tego błąd. Komunikat mówi, że nie mam odpowiedniego programu do pracy z pustymi plikami.

Czemu są traktowane jak osobna, niewspierana kategoria? Skoro tak łatwo je stworzyć?
Obstawiam niedopatrzenie twórców, bo z punktu widzenia używalności to mocny minus.
Na szczęście niedogodność nie będzie trwała długo, idą dwa sposoby na jej zażegnanie! Graficzny i konsolowy.
Choć zachowanie Porteuksa może budzić zdziwienie, wcale nie jest najgorszym systemem pod względem tworzenia nowych plików.
Niektóre Linuksy (również bardzo popularny Ubuntu, gdy ostatnio sprawdzałem) w ogóle nie dają opcji stworzenia nowego pliku przez menu kontekstowe! Obawiam się, że może to zniechęcić niejedną osobę przyzwyczajoną do Windowsa.
Rozwiązanie przez klikanie
Najpierw należy kliknąć świeżo utworzony plik prawym przyciskiem myszy i wybrać opcję Open With Other Application.

Pokaże się lista dostępnych programów (nie wszystkich, ale tych „kompletniejszych”, posiadających własne ikony). Na tej liście należy znaleźć edytor tekstowy; w przypadku Porteuksa MATE nazywał się Pluma.
Następnie należy się upewnić, że zaznaczona jest opcja zapamiętania aplikacji w dolnej części okna. Jeśli tak, to należy kliknąć przycisk Open. Od teraz puste pliki będą się otwierały w edytorze tekstu. Problem rozwiązany.

Metoda alternatywna (użycie szablonów)
Gdyby ktoś się zawziął, że nie zmieni domyślnych programów, ale nadal chce tworzyć nowe pliki przez menu kontekstowe i je szybko otwierać, to widzę pewne obejście.
Należy naszykować plik tekstowy z minimalną treścią; może być dosłownie jedna literka.
Następnie trzeba go skopiować do folderu Templates (po polsku Szablony) w folderze domowym – tam, gdzie są foldery takie jak Music, Videos itd.
Od teraz w menu kontekstowym pod opcją tworzenia pustego pliku pojawi się również opcja stworzenia kopii tego, który dodaliśmy do szablonów.
Będzie go można otworzyć zwykłym dwuklikiem, bo w oczach systemu jest plikiem tekstowym, a nie pustym.
Czy warto bawić się w takie obejścia, zamiast zmieniać domyślny program? Niekoniecznie
Ale szablony tak czy siak się przydają, więc równie dobrze można się z nimi oswoić w taki właśnie sposób.
Sposób konsolowy
Zmiana domyślnego programu nie zajmuje zbyt wiele czasu. Ale i tak może być utrapieniem, zwłaszcza jeśli często ładujemy świeże sesje Porteuksa. W takim przypadku bardzo by pomógł jakiś skrypt, który będzie ustawiał za nas potrzebne rzeczy.
Najpierw robiłem wszystko metodą przez klikanie, ale z czasem odkryłem, gdzie system zapisuje przyporządkowania różnych plików do programów otwierających. A zapisuje je do pliku:
~/.config/mimeapps.list
Tylda oznacza tu folder domowy, kropka na początku nazwy .config wskazuje folder ukryty, zaś mimeapps.list to plik tekstowy (ściślej rzecz biorąc: konfiguracyjny, o określonej budowie).
W jaki sposób znalazłem plik konfiguracyjny?
Uniwersalnym sposobem, który polecam każdemu, kto chce ustalić kulisy działania swojego Linuksa:
- włączyłem przez menu kontekstowe okno pozwalające wybrać domyślny program (ale jeszcze nic nie kliknąłem);
- w osobnym oknie uruchomiłem konsolę;
- przez tę konsolę wywołałem program
xprop(domyślnie zainstalowany na Porteuksie) i kliknąłem okno, żeby poznać różne informacje na jego temat (takie jak PID, czyli numer powiązanego procesu systemowego). -
następnie wywowłałem przez konsolę program
strace(na Porteuksie musiałem go najpierw zainstalować), każąc mu obserwować powyższy proces i zapisywać wyniki do pliku:sudo strace -f -p NR_PROCESU -o PLIK.txt - w oknie wyboru programu zaznaczyłem edytor tekstowy i kliknąłem OK, zamykając w ten sposób okno i kończąc monitorowanie;
-
przeanalizowałem zapisy strace’a, szukając w szczególności interakcji z plikami.
grep openat PLIK.txt - znalazłem informację, że jednym ze zmienianych plików był wspomniany wyżej
mimeapps.list; - następnym razem, na świeżym systemie, porównałem wygląd tego konkretnego pliku przed i po ustawieniu domyślnego programu.
Jeśli kogoś interesują takie metody poznawania systemu, to mam na ten temat więcej miniwpisów, takich jak ten o kulisach zmiany układu klawiatury.
Zaobserwowałem, co pojawia się w tym pliku po klikaniu opisanym na początku wpisu. Dodając identyczne linijki tekstu własnym skryptem, miałbym gotową automatyzację.
Ostatecznie zdecydowałem się to zrobić przez skrypt Pythona, bo łatwiej mi było go uodpornić na przypadki, gdy ktoś np. zmienia plik, w którym już ma własne ustawienia.
Oto cała zawartość skryptu:
from pathlib import Path
import configparser
cfgp = configparser.ConfigParser()
openers_list = Path.home() / '.config/mimeapps.list'
cfgp.read( openers_list )
for sec in ('Default Applications', 'Added Associations'):
try: cfgp[sec]['application/x-zerosize'] = 'pluma.desktop'
except KeyError:
cfgp.add_section( sec )
cfgp[sec]['application/x-zerosize'] = 'pluma.desktop'
with open(openers_list,'w') as cfile:
cfgp.write( cfile )
Skrypt jest dopasowany do edytora tekstowego Pluma, obecnego na Porteuksie MATE; jeśli na naszym komputerze jest inny edytor, to należy ustalić, jaki wywoływacz mu odpowiada, i wstawić go wszędzie zamiast pluma.desktop.
Skrypt można sobie zapisać na tego samego pendrive’a, na którym jest PorteuX, do jakiegoś pliku umilacz.py, a następnie uruchamiać rutynowo po załadowaniu świeżego systemu (python umilacz.py). Z czasem można całkiem zapomnieć o tym, że wstępne ustawienia były jakkolwiek irytujące.
Osobiście uczyniłem ten skrypt częścią większego, który „zmienia Porteuksa w Minta” (np. przenosząc pasek zadań z góry na dół ekranu). Nie ma sensu rezygnować z fajnego systemu przez drobne zadziory, kiedy Linux daje tyle możliwości ich oszlifowania.
Takiego dopasowania Linuksa pod siebie i komfortowego korzystania z niego życzę również Wam, drodzy czytelnicy! Oby do zobaczenia w kolejnych wpisach ![]()