lundi 6 novembre 2023

Presse-papier dans linux mint

Il semblerait que beaucoup de personne se plaigne de l'absence d'un presse-papier dans Linux Mint Cinnamon.

Pourtant il existe l'applet gpaste rechargé qui nécessite évidemment que soit installé gpaste. Le problème est que l'applet continue à réclamer sont installation alors que gpaste est déjà installé. 

En fait il faut installer aussi gir1.2-gpaste et puis ça fonctionne.

Comme Linux Mint est basé sur Ubuntu, dans Ubuntu Cinnamon, ça se règle de la même façon.

Pour Fedora Cinnamon, pas de gir1.2-gpaste, mais on essaie quand même.

Catastrophe: Cinnamon se plante dès l'instant où on insère l'applet gpaste rechargé dans le tableau de bord. On tombe alors dans un mode de secours, où la possibilité est offerte de désactiver les applets. On refuse. Dans le mode de secours, le tableau de bord a disparu. On peut cependant faire apparaître des menus dans la partie supérieure gauche de l'écran. Il est alors possible de se déconnecter. A la reconnexion, miracle: tout fonctionne:



dimanche 5 novembre 2023

Disque externe bootable legacy et uefi

J'ai un disque dur externe usb que j'ai formaté de manière à ce qu'il puisse booter aussi bien de manière traditionnelle (legacy)  que en mode uefi:

toto@aldebaran:~$ sudo fdisk -l /dev/sda
[sudo] Mot de passe de toto: 
Disque /dev/sda : 447,13 GiB, 480103981056 octets, 937703088 secteurs
Disk model: 80G2G0A-00JH30  
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets
Type d'étiquette de disque : gpt
Identifiant de disque : 6B6A3B5A-81C8-479D-B261-B4733B4D0D70

Périphérique     Début       Fin  Secteurs Taille Type
/dev/sda1         2048      4095      2048     1M Amorçage BIOS
/dev/sda2         4096   2101247   2097152     1G Système EFI
/dev/sda3      2101248  18878463  16777216     8G Partition d'échange Linux
/dev/sda4     18878464 102764543  83886080    40G Système de fichiers Linux
/dev/sda5    102764544 186650623  83886080    40G Système de fichiers Linux
/dev/sda6    186650624 937701375 751050752 358,1G Système de fichiers Linux
michel@pc-linuxshop-A7K57UJU:~$ 

Grub s'installe dans sda1 dans le cas d'un amorçage en mode traditionnel, sda2 est monté dans /boot/efi pour un amorçage en mode UEFI.
J'ai installé un système linux (linux mint)  sur ce disque USB, à partir d'un laptop dont le boot est legacy.
Pas de souci lorsqu'il est branché sur un ordinateur qui s'amorce à l'ancienne. Par contre si ce disque dur externe est branché sur un ordinateur dont l'amorçage est UEFI, il n’apparaît pas dans la liste des périphériques sur les quels on peut booter.
Depuis un ordinateur UEFI où est installé Ubuntu (22.04), je lance les commandes suivantes:

sudo mount /dev/sda4 /mnt
sudo mount /dev/sda2 /mnt/boot/efi 
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt/$i; done  
sudo mount --bind /sys/firmware/efi/efivars /mnt/sys/firmware/efi/efivars
sudo chroot /mnt
grub-install 
update-grub
exit  
sudo umount /dev/sda2
sudo umount /dev/sda4

(/dev/sda4 contient la racine de linx mint avec lequel je veux démarrer mon disque USB.)
Mais déception: ça ne fonctionne pas.
Le disque possède le drapeau pmbr_boot, ce qui pose problème.
Il faut enlever ce drapeau:

toto@aldebaran:~$ sudo parted /dev/sda
(parted) disk_set pmbr_boot off
(parted) quit

Et voilà, le problème est résolu. 

vendredi 1 septembre 2023

Blscfg et Fedora

Fedora utilise par défaut BLSCFG (Boot Loader Specification Configuration) comme on peut le vérifier dans le fichier /etc/defaults/grub qui contient GRUB_ENABLE_BLSCFG=true. De ce fait /boot/grub2/grub.cfg ne contient aucune entrée menuentry pour Fedora, mais seulement des entrées pour les autres systèmes d'exploitation.

Par contre on y trouve: 

insmod

blscfg

La commande blscfg ajoute des entrées au menu en se basant sur le contenu du dossier /boot/loader/entries. Ici le dossier contient 4 fichiers:

[toto@fedora ~]$ sudo ls -1 /boot/loader/entries 
7753b84a2ac148e7894de73d56d9be39-0-rescue.conf
7753b84a2ac148e7894de73d56d9be39-6.4.11-200.fc38.x86_64.conf
7753b84a2ac148e7894de73d56d9be39-6.4.12-200.fc38.x86_64.conf
7753b84a2ac148e7894de73d56d9be39-6.4.9-200.fc38.x86_64.conf

J'examine le contenu d'un des fichiers:

[toto@fedora ~]$ sudo -i
[sudo] Mot de passe de toto : 
[root@fedora ~]# cd /boot/loader/entries
[root@fedora entries]# cat 7753b84a2ac148e7894de73d56d9be39-6.4.12-200.fc38.x86_64.conf 
title Fedora Linux (6.4.12-200.fc38.x86_64) 38 (Workstation Edition)
version 6.4.12-200.fc38.x86_64
linux /boot/vmlinuz-6.4.12-200.fc38.x86_64
initrd /boot/initramfs-6.4.12-200.fc38.x86_64.img
options root=UUID=a7465ac8-7427-4c7b-a2f4-3b6dcb9fcfae ro resume=UUID=f17ebeb2-0767-4f7c-ba74-5ba3ed6acb92 rhgb quiet 
grub_users $grub_users
grub_arg --unrestricted
grub_class fedora
[root@fedora entries]# 

Pour une raison ou une autre, je veux ne pas utiliser blscfg. Donc dans /etc/defaults/grub je mets:

GRUB_ENABLE_BLSCFG=false

Ensuite je regénère grub.cfg avec la commande

[toto@fedora ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Tout va bien jusqu'au prochain changement de noyau:
catastrophe: kernel panic
Il faut alors booter sur le noyau précédent pour réparer les dégâts. Si j’examine grub.cfg, je constate que dans la commande linux qui permet de booter sur le nouveau noyau se trouve:
root=/dev/sdb5 (dans mon cas) au lieu de root=UUID=.....
Pour régler le problème, il suffit de régénérer grub.cfg comme précédemment. Il n'est même pas nécessaire de rebooter: on peut procéder dès que l'update est terminé.


jeudi 24 février 2022

Substitution de variables d'environnement

Il existe un utilitaire qui permet la substitution de variables d'environnement: il s'agit de envsubst. Franchement, je ne connaissais pas cet utilitaire jusqu'à ce que je me heurte au problème suivant: substitution de variables dans une commande sed, lorsque le script avec les instructions de sed est un fichier (voir article précédent)

Expérimentons cet utilitaire. Tout d'abord je crée des variables d'environnement (dans un terminal):

export var1=Titine var2=Toto var3=Riri

Le mot export est nécessaire ou sinon on crée des variables du shell.

Ensuite je lance l'utilitaire en tapant envsubst suivi d'un appui sur ENTER.

Le curseur n'est pas après l'invite de commande: le système attend une action de ma part car envsubst renvoie vers la sortie standard (stdout), après traitement, le texte qui lui est fourni en entrée. Et rien ne lui est fourni. 

Allons-y! L'entrée standard est dans notre cas le clavier.

Je tape le texte 

$var2 aime $var1

suivi de ENTER pour envoyer. Aussitôt le retour apparaît à l'écran:


Je peux continuer à procéder, puis terminer avec CTRL-D, ce qui ramène le curseur après l'invite de commande:


Ce que j'ai tapé à l'écran je peux aussi le mettre dans un fichier appelé avant et lancer la commande:

envsubst < avant



Ici l'entée standard n'est plus le clavier, elle a été redirigée vers le fichier avant qui contient

$var2 aime $var1

mais $var3 aime aussi $var1

Je peux aussi créer le fichier après comme ceci:

envsubst < avant > après

Rien n’apparaît à l'écran puisque la sorte standard a été redirigée vers le fichier après.

Je peux aussi indiquer quelles sont les variables à considérer:


Cette fois var3 est ignoré.
Les variables à traiter peuvent même se trouver au sein d'un texte (appelé shell-format si on se réfère à man envsubst):


Ce texte peut se trouver dans un fichier.
Si le fichier sf-file contient par exemple

$var1 joue avec $var2

$var1 va au restaurant


la commande

envsubst "$(cat sf-file)" < avant

donnera le résultat escompté:


Avec l'option -v, envsubst donne la liste des variables qui seront retenues suite à l'utilisation d'un shell-format. L'entrée standard est ignorée. 
Exemple:



Avec cette commande:

envsubst -v "$(env | grep '^var' | sed 's/^/\$/')"

seules seront retenues les variables définies au début de ce billet:



dimanche 13 février 2022

sed et substitution

 Je considère le fichier toto:

Je m'appelle Toto.

Je vais à l'école avec Tata

Nous allons à pied car ce n'est pas loin.

Elle m'aime et ça c'est cool!

Et oui Tata aime Toto et Toto aime Tata.

La vie est belle car Tata habite près de Toto.

Ils se voient tous les jours!


Je voudrais y remplacer Tata par Titine (les amours sont changeantes), ce qui peut se faire aisément (en linux, dans un terminal) avec la commande sed:

sed -n 's/Tata/Titine/gp' toto
Je vais à l'école avec Titine
Et oui Titine aime Toto et Toto aime Titine.
La vie est belle car Titine habite près de Toto.

L'option -n de la commande sed empêche l'impression automatique. Le flag g provoque le remplacement de Tata par Titine pour toutes les occurrences de Tata. Le flag p provoque l'impression des lignes modifiées.
Pour des explications plus complètes voir ici.
Un problème se pose si le nom de la nouvelle copine est dans une variable:

export var=Titine
sed -n 's/Tata/$var/gp' toto
Je vais à l'école avec $var
Et oui $var aime Toto et Toto aime $var.
La vie est belle car $var habite près de Toto.

La substitution ne s'effectue pas !
La solution est toute simple: il suffit d'entourer le script avec des guillemets:

sed -n "s/Tata/$var/gp" toto
Je vais à l'école avec Titine
Et oui Titine aime Toto et Toto aime Titine.
La vie est belle car Titine habite près de Toto.

Autre solution:

sed -n 's/Tata/'$var'/gp' toto
Je vais à l'école avec Titine
Et oui Titine aime Toto et Toto aime Titine.
La vie est belle car Titine habite près de Toto.

La substitution de variable n'est plus empêchée car la première zone ouverte avec un apostrophe est ensuite refermée avant la variable

Si la variable contient le caractère "/" qui sert de séparateur dans sed, ce caractère doit alors être échappé.
Exemple:

export var='Titine\/02'
sed -n "s/Tata/$var/gp" toto
Je vais à l'école avec Titine/02
Et oui Titine/02 aime Toto et Toto aime Titine/02.
La vie est belle car Titine/02 habite près de Toto.

Une autre possibilité est d'utiliser un autre séparateur:

export var=Titine/02
sed -n "s:Tata:$var:gp" toto
Je vais à l'école avec Titine/02
Et oui Titine/02 aime Toto et Toto aime Titine/02.
La vie est belle car Titine/02 habite près de Toto.

Il reste à traiter le cas où l'instruction sed se trouve dans un fichier script, que je vais appeler totofile.
Donc le fichier totofile contient:

s/Tata/$var/gp

Allons y

export var=Titine
sed -n -f totofile toto
Je vais à l'école avec $var
Et oui $var aime Toto et Toto aime $var.
La vie est belle car $var habite près de Toto.

La substitution ne s'effectue pas de nouveau !
La seule solution que j'ai trouvée consiste à utiliser envsubst:

export var=Titine
sed -n -f <(envsubst < totofile) toto
Je vais à l'école avec Titine
Et oui Titine aime Toto et Toto aime Titine.
La vie est belle car Titine habite près de Toto.

jeudi 8 juillet 2021

Imprimante HP et openSUSE

J'ai eu quelques petits soucis lors de l'installation de mon imprimante HP dans openSUSE15.3 (kde)

Aussi je vais tout reprendre dans cet article;

En premier j'installe hplip. En ligne de commande: 

sudo zypper install hplip

Pour moi c'est le plus rapide et le plus facile. Mais on peut aussi procéder via une interface graphique

Choisir Yast software dans le menu:


puis effectuer une recherche sur hplip:


sélectionner hplip, clic droit et dans le menu contextuel qui surgit, prendre 'Installer' (évidemment sur l'image hplip est déjà noté comme étant installé). 

Ensuite dans le menu j'ouvre Yast (administration du système, en fait c'est yast2). Dans la section 'Imprimante', j'appuie sur 'Ajouter une imprimante'. Aucune imprimante n'est trouvée, mais je peux maintenant lancer hp-setup:


J'ai déjà connecté mon imprimante au réseau via mon smartphone et je connais son adresse ip, et j'ai coché et entré les informations qui conviennent  dans l'écran suivant:


Si j’avais coché comme type de connextion wifi (ce qui est pourtant le cas) j'aurais du établir une connexion usb temporaire entre l'imprimante et un ordinateur.

Je termine l'installation, puis j'ai accès au gestionnaire de l'imprimante soit via le menu:



soit en cliquant doit sur l'icone hp dans la systray:


soit en lançant la commande hp-toolbox.

Je peux vérifier les niveaux d'encre:


définir la taille du papier (A4) et sélectionner une impression recto verso. Ce genre d'impression s'effectue sans aucune manipulation de papier. Je peux prendre comme charnière virtuelle soit bord long, soit bord court.

Les soucis ont commencés lorsque j'ai voulu utiliser le scanner. L'installation d'un plugin est requise.

Hélas:


Pour en sortir, j'ai téléchargé ici les fichiers hplip-3.20.11-plugin.run et hplip-3.20.11-plugin.run.asc .

Ensuite j'ai lancé la commande

sudo sed -i 's/pool.sks-keyservers.net/keyserver.ubuntu.com/g' /usr/share/hplip/base/validation.py

qui remplace dans le fichier /usr/share/hplip/base/validation.py, pool.sks-keyservers.net par keyserver.ubuntu.com.

Bien sûr on pourrait procéder autrement: ouvrir le Gestionnaire de fichier en mode super utilisateur,


naviguer jusqu’au fichier validation.py, l'ouvrir avec un éditeur puis effectuer le remplacement. Mais un copier-coller de la commande indiquée est quand même plus rapide.

Cette fois l’installation du plugin réussit en prenant le choix qui convient:

L'installation du plugin peut se demander avec la commande hp-plugin.
Si je veux rester en mode texte la commande est

hp-plugin --plugin=~/Téléchargements -i


jeudi 20 mai 2021

Hypnotix et wayland

Wayland est devenu le protocole d’affichage par défaut pour la nouvelle version (21.04) d'Ubuntu, à la place de Xorg.

Certes il est toujours possible de choisir Xorg dans la fenêtre de connexion (en bas à droite) .

Pour vérifier ce qui est utilisé, il suffit de lancer la commande:

inxi -G


Hypnotix, le lecteur de TV développé pour Linux Mint, peut s'installer facilement dans Ubuntu (voir par exemple ici).

Il fonctionne directement sans problème avec Xorg, mais pas avec Wayland: quelques petits ajustements sont nécessaires.

Dans les préférences d'hypnotix



ajouter vo=x11 dans les options MPV


Il reste alors à lancer hypnotix avec la commande

GDK_BACKEND=x11 hypnotix

Je désire ne plus passer par la ligne de commande, mais cliquer sur une icone du menu. Ces icônes sont liées à des fichiers desktop qui se trouvent dans

/usr/share/applications

Il faut alors modifier le fichier desktop qui convient, remplacer dans la clause Exec 'hypnotix' par 'env GDK_BACKEND=x11 hypnotix'

Je peux par exemple lancer la commande

sudo sed '/Exec/s/hypnotix/env GDK_BACKEND=x11 hypnotix/' /usr/share/applications/hypnotix.desktop

ou procéder avec 

sudo gedit /usr/share/applications/hypnotix.desktop

(suite à un problème 'Editer en tant que root' ne fonctionne  actuellement pas avec Ubuntu 21.04)

Pour être certain que le menu utilise le bon fichier desktop, il reste à copier celui que l'on vient de modifier dans le répertoire personnel de l'utilisateur:

cp  /usr/share/applications/hypnotix.desktop ~/.local/share/applications/