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