Linux: Podłączenie do wybranej sieci WiFi

2023-07-20

Przenosząc swój komputer między różnymi sieciami WiFi, chcesz czasami wyraźnie wskazać, do której sieci należy się podłączyć. Jeśli korzystasz z GUI, to nie ma z tym problemu. Co innego, jeśli pracujesz w linii komend. Oto krótka ściąga, co można zrobić w takim przypadku.

Włączanie i wyłączanie WiFi

Polecenie

wifi on

pozwala na włączenie lub wyłączenie WiFi. Istnieją też krewniacy tej komendy, jak np. bluetooth czy nfc:

Wyświetlenie zdefiniowanych połączeń WiFi

Komenda

nmcli connection

okazuje skonfigurowane na komputerze połączenia (sieci wifi, do których kiedyś tam nawiązano już połączenie). Aktualnie podłączona sieć jest zaznaczona kolorkiem i ma wartość w kolumnie DEVICE, wskazującą na urządzenie, przy pomocy którego zestawiono to połączenie.  Tutaj widać np. aktywne połączenie do sieci Taxi przy pomocy urządzenia/interfejsu wlp1s0:

Listowanie dostępnych sieci WiFi

Polecenie

nmcli device wifi list

wyświetla w tej chwili dostępne sieci WiFi. Tutaj widać, że najlepszym jakościowo dostępnym połączeniem jest Taxi, podczas gdy np. T-Mobile-B528-06DA ma gorszą jakość:

Podobne działanie ma komenda wlist. Pierwszy argument wskazuje na nazwę urządzenia/interfejsu, tak jak został on rozpoznany przez Linuxa:

iwlist wlp1s0 scanning

Przełączenie do innej sieci

Tutaj przyda się znowu polecenie nmcli, np. aby podłączyć się do sieci BURMISTRZ użyj:

sudo nmcli device wifi connect BURMISTRZ

Jeśli byłoby to pierwsze połączenie to można tu jeszcze dodać parametr password:

sudo nmcli device wifi connect BURMISTRZ password XXXXXX

Sprawdzenie, czy jesteśmy we właściwej sieci wykonasz komendą

nmcli connection

lub

nmcli device wifi list

Aktywne połączenie będzie oznaczone kolorem lub gwiazdką

Uwagi i wskazówki

Jeśli chcesz „zapomnieć” połączenie użyj komendy delete, np.:

sudo nmcli connection delete "Olympik Hotels"

Jeśli sieć WiFi nie jest pokazywana przy poleceniu listującym sieci, to możesz dodać parametr –rescan:

nmcli device wifi list --rescan yes
By Rafał Kraik in Linuxy

Git – tworzenie nowego repozytorium na GitHub

2023-07-17

Załóżmy, że masz już lokalnie, na swoim komputerze pliki projektu, które chcesz umieścić w nowym repozytorium na GitHub. W takim przypadku propnuję rozpocząć od utworzenia nowego repozytorium na GitHub, co jest proste, bo to klikanie myszką. Teraz jednak chcielibyśmy do tego repozytorium wysłać lokalne pliki. Można to zrobić tak:

1. Przejdź do katalogu, w którym masz swoje pliki:

cd my_project

2. Teraz zainicjuj tworzenie nowego repozytorium, które jednak powstanie lokalnie:

git init
Initialized empty Git repository in C:/temp/test_repo/.git/

3. Teraz jeśli chcesz, to umieść w tym katalogu odpowiedni plik .gitignore. Potem możesz dodać do wysłania na repo wszystkich kwalifikujących się do tego plików z lokalnego katalogu:

git add .

4. Już na tym etapie można sprawdzić, że nowe repozytorium zostało utworzone i jesteś aktualnie w branch master:

git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached ..." to unstage)
new file: app.py

5. Jeśli jeszcze wcześniej nie zostało to zrobione, to należy zaktualizować co najmniej dwie zmienne: user.email i user.name:

git config user.email email@domain.pl
git config user.name myusername

6. Wartości możesz wyświetlać używając parametru –get

git config --get user.email
email@domain.pl
git config --get user.name
myusername

7. Teraz trzeba jakoś połączyć ze sobą to lokalnie utworzone repozytorium, z tym zdalnym repozytorium, które znajduje się na GitHub:

git remote add origin https://github.com/username/test_repo

8. Możemy przejść do utworzenia pierwszego „commita”:

git commit -m "initial"
[master (root-commit) ff6795c] initial
1 file changed, 1 insertion(+)
create mode 100644 app.py

9. Na tym etapie można już połączyć lokalny branch master ze zdalnym branchem master:

git push --set-upstream origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 200 bytes | 200.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/username/test_repo
* [new branch] master -> master
branch 'master' set up to track 'origin/master'.

W ten oto sposób pliki z katalogu lokalnego zostały wysłane na repozytorium na GitHub!

By Rafał Kraik in SQL

Python – Jupyter – uruchamianie w innym katalogu

2023-07-12

Zdarza się, że chesz, aby Jupyter startował w innym katalogu niż domyślny. Są na to metody polegające na zmianach w pliku konfiguracyjnym, ale nie wygląda na to aby to działało (przynajmniej pod Windows). Za to co pomogło:

  1. Wpisz w menu start Jupyter, a kiedy program zostanie znaleziony naciśnij go prawym przyciskiem myszy i wybierz „Otwórz lokalizację pliku”
  2. W katalogu, który został otworzony, znowu kliknij prawym przyciskiem myszy na ikonce odpowiadającej za Jupyter i wybierz „właściwości”
  3. Teraz w polu „Element docelowy” wykasuj znajdujący się na końcu wpis %USERPROFILE% i wpisz oczekiwaną ścieżkę. W moim przypadku wpisałem „e:/” (Uwaga na kierunek slasha)
  4. Zapisz zmiany klikając OK i gotowe

U mnie zadziałało od strzału!

By Rafał Kraik in Python

Linux: Raspberry Pi: sesja SSH zawiesza się po pytaniu o hasło

2023-06-11

Logujesz sie do raspberry pi przez ssh (np. Putty), a tu po pytaniu o nazwę użytkownika i hasło sesja się zawiesza. Ping wysyłany na adres komputera działa normalnie.

Oczywiście przyczyn może być wiele, ale w moim przypadku rozwiązanie było dość zagadkowe. Otóż w pliku /etc/ssh/sshd_config wystarczyło dopisać:

IPQoS cs0 cs0

Niektórzy twierdzą, że taką zmianę należy wykonać jeszcze w pliku /etc/ssh/ssh_config, ale u mnie nie trzeba było.

Ot – takie „czary mary”

https://forums.raspberrypi.com/viewtopic.php?t=183661

https://community.element14.com/products/raspberry-pi/f/forum/47549/b-ethernet-problem-ping-works-but-not-able-to-ssh

By Rafał Kraik in Linuxy

Linux: Raspberry pi: Interfejs sieciowy w statusie DORMANT. Wyłączenie trybu oszczędzania energii

2023-06-11

Czasami mam wrażenie, że producenci sprzętu mają konika na punkcie oszczędzania energii. Tak – oszczędność energii jest ważna, ale nie po to kupujemy drogi wydajny sprzęt, żeby potem korzystać z niego tylko na 50%, bo jesteśmy w trybie oszczędzania energii.

W Raspberry Pi tryb oszczędności można włączyć dla poszczególnych urządzeń osobno. W szczególności można to zrobić dla karty sieciowej. Dzięki temu karta włączy się dopiero wtedy, gdy będą spełnione inne warunki, które są konieczne do rozpoczęcia w pełni funkcjonalnej pracy. Dokładniej rzecz biorąc, karta sieciowa zacznie pracować z około 30 sekundowym, może 60 sekundowym opóźnieniem. Na tyle to mało, że energii w tym czasie wcale się dużo nie zużyje i na tyle dużo, żeby doprowadzić administratora do szewskiej pasji.

Jak wyłączyć oszczędzanie energii dla karty sieciowej? Wystarczy uruchomić polecenie:

/sbin/iwconfig wlan0 power off

Problem tylko w tym, że zmiana wprowadzana przez tą komendę jest zapamiętywana do kolejnego uruchomienia, a potem znowu oszczędzasz energię. No ale od czego jest plik /etc/rc.local? Ten plik, to skrypt, który zostanie uruchomiony po starcie systemu, można więc włożyć tę komendę właśnie tam, przed ostatnim poleceniem exit 0.

https://raspberrypi.stackexchange.com/questions/96606/make-iw-wlan0-set-power-save-off-permanent

https://pl.wikipedia.org/wiki/Rc.local

https://forums.raspberrypi.com/viewtopic.php?t=336276

Disable WIFI Power Save on Raspbian Jessie

  • Use iw wlan0 get power_save to see if the wifi power save feature is enabled or not
  • If you want to permantently disable it add this to the /etc/network/interfaces after the iface wlan0 line wireless-power off
  • Reboot and if you run iw wlan0 get power_save you should see that is off.

https://raspberrypi.stackexchange.com/questions/107463/raspberry-pi-3-b-with-buster-cant-be-pinged-wlan0-stuck-in-dormant

Wyjaśnienie trybu DORMANT z https://askubuntu.com/questions/1194048/what-does-mean-dormant-mode-in-ip-link-show-wlan0

Mode Type

The default mode type is called DEFAULT. When an interface is in DEFAULT mode, the interface state transitions to UP when the following condition is met:

Link is detected

There is also a mode type called DORMANT. When an interface is in DORMANT mode, there are additional criteria for the interface state to transition to UP. In DORMANT mode, the interface state transitions to UP when both of the following conditions are met:

Link is detected
MLAG has finished setting up everything for the bond

Link State

In the context of link state, DORMANT indicates the interface is not in a condition to pass packets but is instead in a pending state waiting for some external event. For an interface to be usable for forwarding, it should be in an UP state as it is in the output shown above.

By Rafał Kraik in Linuxy

Terraform: Błąd grpc: error while marshaling: string field contains invalid UTF-8

2023-06-10

Podczas wykonywania polecenia

terraform apply

pojawia się błąd

grpc: error while marshaling: string field contains invalid UTF-8

Nie jest on jako tako związany z kodem, który aktualnie ma być aplikowany. Spróbuj zaktualizować wersję AZ CLI. Zrobisz to poleceniem

az upgrade

 

By Rafał Kraik in Azure

Linux: uprawnienia w katalogu /tmp

2023-05-20

Czy wiesz o tym, że katalog /tmp w Linuxie ma w specjalny sposób zdefiniowane uprawnienia? Owszem każdy może w tym katalogu pisać, ale wzajemna modyfikacja plików przez użytkowników z tej samej grupy nie działa. W sumie ma to sens, bo gdyby w takim /tmp każdy mógł robić wszystko, to zrobiłby się niezły bałagan.

Najpierw przyjrzyjmy się jak to działa w „normalnych katalogach”:

rafal@fermat:~$ sudo mkdir /home/shared
rafal@fermat:~$ sudo chmod 777 /home/shared

Teraz „stajemy się użytkownikiem user2, który ma swoją własną grupę user2:

rafal@fermat:~$ sudo su - user2
$ id
uid=1002(user2) gid=1002(user2) groups=1002(user2)
$ cat >> /home/shared/test.txt
my test user2
$ ls -l /home/shared/test.txt
-rw-rw-r-- 1 user2 user2 14 maj 20 11:26 /home/shared/test.txt

Teraz spróbujemy ten plik zmodyfikować. Modyfikację wykona użytkownik user1, który jest też członkiem grupy user2:

rafal@fermat:~$ sudo su - user1
$ id
uid=1001(user1) gid=1001(user1) groups=1001(user1),1002(user2)
$ cat >> /home/shared/test.txt
my test user 1
$ ls -l /home/shared/test.txt    
-rw-rw-r-- 1 user2 user2 29 maj 20 11:27 /home/shared/test.txt

Jak widać zmiana się udała. To teraz zobaczmy jak to zadziała w katalogu tmp z ustawionym sticky bit. Do akcji wracza znowu user2:

rafal@fermat:~$ sudo su - user2
$ cat >> /tmp/test.txt
my test user2 
$ ls -l /tmp/test.txt
-rw-rw-r-- 1 user2 user2 14 maj 20 11:29 /tmp/test.txt
$ ls -ld /tmp
drwxrwxrwt 24 root root 12288 maj 20 11:29 /tmp

Teraz modyfikacje próbuje wykonać user 1 – bez sukcesu:

rafal@fermat:~$ sudo su - user1
$ cat >> /tmp/test.txt
-sh: 1: cannot create /tmp/test.txt: Permission denied
By Rafał Kraik in Linuxy