My Computer

Depuis mes débuts de protoServer, je suis passé par plusieurs PC. Le dernier en date est OP3.2. Sur celui-ci, j’ai voulu tweaker un peu ce dernier pour me faire des raccourcis ou autre. On trouve dans la doc Hacking comment rajouter de nouvelles icônes dans la bare des tâches de GNOME.

Fond d’écran dynamique

Par défaut, Ubuntu ne gère pas grand chose pour rendre les fond d’écrans dynamique. Si l’on souhaite le faire, plusieurs méthodes :

Ces méthodes ont toutes l’inconvéniant de ne pas s’interfacer naturellement avec ce que l’on possède déjà sous Gnome. J’ai donc cherché un peu plus puis suis tombé sur une méthode avec un fichier XML. C’est celle-ci que je vais appliquer. J’ai gardé le script pour l’upgrade un peu.

Avec un script

Pour effectuer cela avec un script, il faut créer son script puis rajouter l’éxécution de ce dernier dans le .profile. On commence par le script, que l’on appellera .wallpaper-changer.sh et qui sera dans notre $HOME.

#!/bin/bash
if [[ -n $1 ]] ; then
    wallpaper_path=$1
else
    wallpaper_path=`cat /home/$USER/.config/user-dirs.dirs | grep XDG_PICTURES | cut -d '"' -f 2`
fi
if [[ -n $2 ]] ; then
    chrono=$2
else
    chrono="15"
# store all the image file names in wallpapers array
wallpapers=(
    $wallpaper_path/*.jpg
    $wallpaper_path/*.jpeg
    $wallpaper_path/*.png
    $wallpaper_path/*.bmp
    $wallpaper_path/*.svg
)
# get array size
wallpapers_size=${#wallpapers[*]}

# set random wallpapers
# In order to time-based change the wallpaper, remove the ##. Otherwise, the wallpaper will change on each logon (.profile).
## while true
## do
    random_index=$(($RANDOM % $wallpapers_size))
    theme=`gsettings get org.gnome.desktop.interface gtk-theme`
    if [[ $theme == *"dark" ]]; then
        gsettings set org.gnome.desktop.background picture-uri-dark ${wallpapers[$random_index]}
    else
        gsettings set org.gnome.desktop.background picture-uri ${wallpapers[$random_index]}
    fi
    # keep the wallpaper for the specified time
    ## sleep ${chrono}m
## done

Et à la fin du .profile :

if [ -f "$HOME/.wallpaper-changer.sh" ] ; then
    bash $HOME/.wallpaper-changer.sh $HOME/Images/Wallpaper &
fi

Avec un xml

Pour faire la même chose avec un fichier XML, deux fichiers sont en réalité nécessaires … Le premier va faire la liste de fonds d’écrans à afficher quand le second lui va expliquer à Gnome comment les afficher (comprendre en plein écran). J’ai scripté tout ça pour que ça soit plus simple, il suffit de lancer les commandes dans un terminal. Seul les 2 premières variables peuvent être modifiées. N.B : S’il y a un espace dans le nom du fichier, c’est foutu :) Donc penser à enlever vos espaces !

wallpaper_path="$HOME/Images/Wallpaper"
duration="1795.0"

mkdir -p ~/.local/share/backgrounds
mkdir -p ~/.local/share/gnome-background-properties

cat <<EOF > $HOME/.local/share/backgrounds/`basename $wallpaper_path`.xml
<background>
  <starttime>
    <year>2009</year>
    <month>08</month>
    <day>04</day>
    <hour>00</hour>
    <minute>00</minute>
    <second>00</second>
  </starttime>
<!-- This animation will start at midnight. -->
EOF

for file in `ls $wallpaper_path | shuf` ; do
    if [[ -n $previous_wallpaper ]] ; then
        echo "  <transition>
    <duration>5.0</duration>
    <from>$wallpaper_path/$previous_wallpaper</from>
    <to>$wallpaper_path/$file</to>
  </transition>" >> $HOME/.local/share/backgrounds/`basename $wallpaper_path`.xml
    else
    first_wallpaper=$file
    fi
    echo "  <static>
    <duration>$duration</duration>
    <file>$wallpaper_path/$file</file>
  </static>">> $HOME/.local/share/backgrounds/`basename $wallpaper_path`.xml
previous_wallpaper=$file
done
    echo "  <transition>
    <duration>5.0</duration>
    <from>$wallpaper_path/$previous_wallpaper</from>
    <to>$wallpaper_path/$first_wallpaper</to>
  </transition>
</background>" >> $HOME/.local/share/backgrounds/`basename $wallpaper_path`.xml

cat << EOF >  $HOME/.local/share/gnome-background-properties/`basename $wallpaper_path`.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wallpapers SYSTEM "gnome-wp-list.dtd">
<wallpapers>
  <wallpaper>
    <name>My Wallpaper Rotation</name>
    <filename>$HOME/.local/share/backgrounds/`basename $wallpaper_path`.xml</filename>
    <options>zoom</options>
    <pcolor>#2c001e</pcolor>
    <scolor>#2c001e</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>
</wallpapers>
EOF

Configuration de l’éditeur par défaut

Je me suis dit que j’allais commencer à travailler un peu plus proprement et arrêter les sudo su ou les sudo vi comme je fais quasiment tout le temps. J’ai donc fait un sudoedit. Quel ne fut pas ma surprise quand je me suis retrouvé nez à nez avec nano ! Voici la ligne pour reconfigurer vim par defaut :

sudo update-alternatives --set editor /usr/bin/vim.basic #Applique l'éditeur choisi.
sudo update-alternatives --config editor #Permet de choisir son éditeur de façon interactive.

Raccourcis Ubuntu

Repris de ma documentation hacking. Ça commençait à me souler de devoir à chaque fois ouvrir virtual box pour lancer ma Kali. Alors je me suis fait un raccourci. Ci-joint le petit script pour tout faire propre :

VMName="Kali"
VIRTUALBOXVM=`which virtualboxvm`
Icon="kali-menu"
IconSize="256x256"
IconUrl="https://gitlab.com/kalilinux/packages/kali-menu/-/raw/kali/master/menu-icons/${IconSize}/apps/${Icon}.png"
IconPath="$HOME/.local/share/icons/hicolor/${IconSize}/apps/"
mkdir -p $IconPath
wget -O ${IconPath}/${Icon}.png ${IconUrl} -o /dev/null
echo "[Desktop Entry]
Name=${VMName} VM
Comment=Launch the VM of ${VMName}
Exec=$VIRTUALBOXVM --startvm ${VMName}
Icon=$IconPath/${Icon}.png
Terminal=false
Type=Application
Categories=Emulator;System;Utility;
">$HOME/.local/share/applications/${VMName}.desktop
chmod 0400 $HOME/.local/share/applications/${VMName}.desktop

Reste plus qu’à le rajouter à ton dock et c’est gagné.

Stoper le keyring ssh

VOus en avez marre d’avoir constamment vos connexions ssh qui drope parce que ssh-agent essaie trop de clé ? Moi oui en tout cas. Donc plutôt que de kill le ssh-agent, on va juste lui dire de ne pas se lancer :

echo "X-GNOME-Autostart-enabled=false" | sudo /etc/xdg/autostart/gnome-keyring-ssh.desktop

Un reboot et ça devrait faire l’affaire.

Gestions des réseaux en cli

L’usage est plus pour mes raspberry pi, mais peut-être généralisé au PC clients. Je souhaite de façon générale créer un premier réseau qui est en DHCP. Si le DHCP ne marche pas, alors je veux me connecter avec une addresse statique de fallback. En plus, je veux créer un nouveau réseaux WiFi. Pour cela, je vais utiliser NetworkManager.

Attention, après chaque modification des fichiers de NetworkManager, il faut relancer le service à l’aide de systemctl restart NetworkManager. De plus,

Un réseau DHCP

Le premier réseau est le plus simple, utiliser l’interface 1 en tant que simple connexion avec configuration automatique.
Le plus important ici est bien de préciser que la machine doit se connecter d’abord avec ces paramètres. Pour ça, on utilise la valeur d”autoconnect-priority. Plus élevé = plus prioritaire donc on metra elle à dix et l’autre à 1.

NAME=DHCP-filiaire
INTERFACE='eth0'
cat<<EOF>/etc/NetworkManager/system-connections/${NAME}.nmconnection

[connection]
id=$NAME
uuid=$(uuid)
type=ethernet
autoconnect-priority=10
interface-name=$INTERFACE

[ethernet]

[ipv4]
method=auto

[ipv6]
addr-gen-mode=stable-privacy
method=auto

[proxy]

Un réseau statique

Le réseau statique doit prendre le relais quand le DHCP n’est pas disponible.


Un réseau Wifi

Le réseau Wifi peut être ouvert en permanence, donc pas de stress là dessus.

LEMOTDEPASSE='xxx'
NAME=Hidden
INTERFACE='wlan0'
cat<<EOF>/etc/NetworkManager/system-connections/${NAME}.nmconnection
[connection]
id=$NAME
uuid=$(uuid)
type=wifi
interface-name=${INTERFACE}

[wifi]
mode=infrastructure
ssid=$NAME

[wifi-security]
auth-alg=open
key-mgmt=wpa-psk
psk=$LEMOTDEPASSE

[ipv4]
method=auto

[ipv6]
addr-gen-mode=stable-privacy
method=auto

[proxy]

EOF

Un hotspot wifi

ToDo

Un réseau bluetooth

Ok, celui-là, il vient de loin. J’avais pas encore ma box, donc j’ai mis mon portable en partage de co 4G via bluetooth sur le raspberry pi … J’ai pas mal galéré. Au final, c’est plus un PoC qu’autre chose … Le débit comme le ping est abérrant, c’est inutilisable en prod. La faute à la carte BT du raspberry qui serait plus optimisée pour du BLE ? A retester …

Connexion en bluetooth sur le téléphone

Première interrogation, j’ai l’impression qu’il faille forcément un serveur audio sur le poste pour que le bluetooth se connecte. Donc on doit en installer un.

apt install pulseaudio pulseaudio-module-bluetooth

Ensuite, on est parti pour l’appairage avec le téléphone :

lucas@pi2:~$ bluetoothctl
[bluetooth]# scan on
Discovery started
[NEW] Device 88:88:88:66:66:66 NothingLu

[bluetooth]# scan off
Discovery stopped

[bluetooth]# pair 88:88:88:66:66:66
Attempting to pair with 88:88:88:66:66:66
[CHG] Device 88:88:88:66:66:66 Connected: yes
Request confirmation
[agent] Confirm passkey 832755 (yes/no): yes
[CHG] Device 88:88:88:66:66:66 Modalias: bluetooth:v001Dp1200d1436
[CHG] Device 88:88:88:66:66:66 UUIDs: 00001105-0000-1000-8000-00805f9b34fb
[.....]
[CHG] Device 88:88:88:66:66:66 UUIDs: 185f3df4-3268-4e3f-9fca-d4d5059915bd
[CHG] Device 88:88:88:66:66:66 ServicesResolved: yes
[CHG] Device 88:88:88:66:66:66 Paired: yes
Pairing successful

[NothingLu]# connect 88:88:88:66:66:66
Attempting to connect to 88:88:88:66:66:66
[NEW] Endpoint /org/bluez/hci0/dev_88_88_88_66_66_66/sep1
[NEW] Endpoint /org/bluez/hci0/dev_88_88_88_66_66_66/sep3
[NEW] Endpoint /org/bluez/hci0/dev_88_88_88_66_66_66/sep4
[NEW] Transport /org/bluez/hci0/dev_88_88_88_66_66_66/sep4/fd7
Connection successful
[NEW] Player /org/bluez/hci0/dev_88_88_88_66_66_66/player0 [default]
[...]
[CHG] Player /org/bluez/hci0/dev_88_88_88_66_66_66/player0 Position: 0x00000000 (0)

[NothingLu]# trust 88:88:88:66:66:66
[CHG] Device 88:88:88:66:66:66 Trusted: yes
Changing 88:88:88:66:66:66 trust succeeded
[NothingLu]# exit

Evidemment, penser à activer/valider la connexion sur le téléphone en parrallèle.

Création de l’interface réseau

Si tout va bien jusqu’ici, on peut créer l’interface pour se connecter au bluetooth.

root@pi2:/home/lucas# nmcli con edit type bluetooth con-name NothingLuBT

===| nmcli interactive connection editor |===

Adding a new 'bluetooth' connection

Type 'help' or '?' for available commands.
Type 'print' to show all the connection properties.
Type 'describe [<setting>.<prop>]' for detailed property description.

You may edit the following settings: connection, bluetooth, bridge, gsm, cdma, match, ipv4, ipv6, hostname, tc, proxy
nmcli> set connection.autoconnect yes
nmcli> set ipv4.method auto
nmcli> set bluetooth.bdaddr 88:88:88:66:66:66
nmcli> set bluetooth.type panu
nmcli> set proxy.method none
nmcli> save persistent
Saving the connection with 'autoconnect=yes'. That might result in an immediate activation of the connection.
Do you still want to save? (yes/no) [yes] yes
Connection 'test' (53ead7d5-35b9-4283-84c1-eafc01e3e73b) successfully saved.
nmcli> quit
nmcli con up test

Et si tout est bon, vous avez votre interface de fonctionnel ! A vous les 1500 ms de ping et les 120ko/s !

Journalisation des commandes

Petit bout de code pour journaliser les commandes effectuées sur le système, et surtout conserver l’utilisateur qui les a effectué :

if [[ -v SUDO_USER ]] ; then
	export PROMPT_COMMAND='logger -t $SUDO_USER -i -p local6.debug "$(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) as $USER"'
else
	export PROMPT_COMMAND='logger -i -p local6.debug "$(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" )"'
fi