#tips


[TIPS] Rocketchat : désactiver SSL sans l'interface d'administration

C'est en testant le logiciel franz, un outil qui permet de centraliser les clients web de pas mal de services de messageries dont Skype, Messenger et surtout Rocketchat. Comme j'ai ma propre instance de rocket, j'ai directement ajouté mon adresse mais manque de bol, ma version n'était pas compatible. Alors je me suis empressé de récupérer un build récent et j'ai mis à jour tout ça ! D'ailleurs, c'est plutôt simple car je n'ai eu qu'à remplacer le code source…

Bref, ça fonctionnait :

Rocketchat deblan

Et en regardant toutes les nouveautés, j'ai par malheur forcé SSL alors que l'instance est derrière un proxy… Pourtant c'était écrit noir sur blanc mais je n'ai pas lu. Quoiqu'il en soit, impossible d'accéder à l'interface et j'ai du attaquer directement la base mongodb. J'ai lancé la commande mongo et je suis arrivé sur un shell.

> show dbs # Permet récupérer la liste des bases
> use rocketchat # J'indique dans quelle base de je veux travailler
# Je ne sais pas s'il y a plus sexy mais mongo est une première !
# Je passe simplement la valeur de l'option "Force_SSL" à false et j'enregistre
> db.rocketchat_settings.find({_id: "Force_SSL"}).forEach(function(o) { 
    o.value = false; 
    db.rocketchat_settings.save(o);
});

Une fois Rocketchat relancé, tout est rentré dans l'ordre !


Utiliser la console de débug sous Firefox mobile

La vue adaptative de Firefox est très intéressante mais je ne couvre pas tous les problèmes d'affichage d'un Firefox mobile. En effet, j'ai déjà rencontré des cas où Firefox mobile ne réagissait pas du tout pareil que sur la vue adaptative.

Il est possible d'utiliser la console de débug de votre Firefox PC pour inspecter votre Firefox mobile. Ça fonctionne à l'aide d'ADB. Ainsi, la première chose à faire est d'installer le SDK Android sur votre machine. Vous le trouverez ici et vous aurez simplement à décompresser l'archive quelque part.

Une fois le SDK disponible sur votre machine, activez le débogage USB sur votre terminal Android (Paramètre > Option de développement > Débogage USB). Branchez votre terminal sur votre machine et lancez Firefox mobile. Dans les paramètres, allez dans "Outils de développement" et cochez "Débogage distant".

Pour tester si l'Android est détecté, lancez cette commande :

Afficher/masquer le code
$ /chemin/vers/sdk/platform-tools/adb devices

La sortie devrait ressembler à ça :

Afficher/masquer le code
List of devices attached   
xxxxxxxxxxxxx	device

Ouvrez la console de débug et activez le débogage distant (à gauche de l'onglet "Console").

La dernière étape de configuration consiste à forwarder le port 6000 de votre machine vers le terminal Android :

Afficher/masquer le code
$ /chemin/vers/sdk/platform-tools/adb forward tcp:6000 tcp:6000

En plus de message de confirmation d'ADB, on pourra s'assurer que ça fonctionne avec netstat :

Afficher/masquer le code
$ netstat -nl | grep 6000
tcp        0      0 127.0.0.1:6000          0.0.0.0:*               LISTEN

Ouvrez une page sur votre Firefox mobile, puis, dans votre Firefox PC, allez dans Outils > Développeur Web > Se connecter. Une demande confirmation s'affichera sur votre terminal Android. Vous pouvez à présent débugger plus facilement vos sites web sur Firefox mobile :)


[Astuce] i3wm : liste des processus les plus actifs

Quand j'utilisais conky, l'un de mes objectifs était de connaître la liste des processus les plus actifs. En effet, il n'était pas rare (et ça continue aujourd'hui) qu'un programme s'affole un peu en mangeant un peu trop de ressources. Mon passage à i3-wm m'a légitiment fait abandonner conky puisque j'ai toujours une fenêtre affichée en plein écran. Du coup, j'ai décidé d'ajouter une barre qui s'affiche uniquement quand j’appuie sur une touche.

Voici un aperçu : i3-wm : barre de processus

Le code source du script est en shell :

Afficher/masquer le code
#!/bin/sh                                          

echo "{\"version\":1}"

INFO='#E9F1FF'
NORMAL='#B3FF6C'
WARNING='#FF6836'
CRITICAL='#FF474A'

echo "[[]"

while true; do
	(
		echo -n ",["
		
		ps ux --sort -%cpu | head -n 30 | sed 's/\s\{2,\}/ /g' | cut -d" " -f3,11 | uniq | grep -v uniq | egrep -v '^0.0' | egrep '^[0-9.]* [a-z]' | while read cpu bin; do
			if [ $(echo "if (${cpu} < 3 ) 1 else 0" | bc) -eq 1 ]; then
				COLOR=$INFO
			elif [ $(echo "if (${cpu} < 40.0 ) 1 else 0" | bc) -eq 1 ]; then
				COLOR=$NORMAL
			elif [ $(echo "if (${cpu} < 70.0 ) 1 else 0" | bc) -eq 1 ]; then
				COLOR=$WARNING
			else
				COLOR=$CRITICAL
			fi
			echo -n "{\"full_text\": \" $bin ($cpu%) \", \"color\": \"$COLOR\"}," 
		done
		
		echo "]"
	) | sed 's/,\]/]/'
		
	sleep 5
done

Au niveau de la conf de i3, voila comment j'ai procédé :

Afficher/masquer le code
bar {
    status_command /chemin/vers/le/script
    workspace_buttons yes
    position top
    tray_output none
    mode hide
    modifier mod1

    /* d'autres confs */    
}

That's all folks!


[Astuce] i3wm : Switcher entre les fenêtres d'un container

Le script que je vais vous donné a été écrit il y a quelques mois déjà. Il permet de switcher entre les fenêtres* d'un container. Si dans un container j'ai 3 fenêtres, alors je pourrai focus la première via alt+F2, la seconde via alt+F2 et la dernière via alt+F3. Si un container contient un autre container, le script détectera quel est celui focused et quelles fenêtres lui appartiennent.

Si des fenêtres et des containers appartiennent au même container, alors chacun des containers sera interprété comme une fenêtre.

* : une fenêtre est une application (terminal, navigateur, client mail, etc.)

Le script est une nouvelle fois écrit en PHP et les binds gèrent 6 windows. Pour pouvez bien sûr en ajouter.

Dans ~/bin/i3_switch_focus_container.php (ne pas oublier de faire un chmod u+x dessus) :

Afficher/masquer le code
#!/usr/bin/php5
<?php

function getTree()
{
    return json_decode(shell_exec('i3-msg -t get_tree'));
}

function getFocusedWindowContainer($tree)
{
    if (empty($tree->nodes)) {
        return null;
    }

    foreach ($tree->nodes as $k => $container) {
        if (true === $container->focused) {
            return $tree->nodes;
        }

        if (null !== $container = getFocusedWindowContainer($container)) {
            return $container;
        }
    }

    return null;
}

function getFocusWindowNumber($default, $max)
{
    global $argv;

    if (!isset($argv[1])) {
        $argv[1] = $default;
    }

    return min($max, max(1, $argv[1])) - 1;
}

function getDefaultFocusWindowNumber($container)
{
    foreach ($container as $k => $v) {
        if ($v->focused) {
            return $k + 1;
        }
    }
}

function setFocusToWindow($window)
{
	shell_exec(sprintf("i3-msg '[con_id=\"%s\"] focus'", $window->id));
}

$container = getFocusedWindowContainer(getTree());

if ($container !== null) {
    $number = getFocusWindowNumber(getDefaultFocusWindowNumber($container), count($container));
    
	foreach ($container as $k => $window) {
        if ($k == $number) {
            setFocusToWindow($window);
        }
    }
}

Dans votre fichier de configuration i3 :

Afficher/masquer le code
bindsym $mod+F1 exec ~/bin/i3_switch_focus_container.php 1
bindsym $mod+F2 exec ~/bin/i3_switch_focus_container.php 2
bindsym $mod+F3 exec ~/bin/i3_switch_focus_container.php 3
bindsym $mod+F4 exec ~/bin/i3_switch_focus_container.php 4
bindsym $mod+F5 exec ~/bin/i3_switch_focus_container.php 5
bindsym $mod+F6 exec ~/bin/i3_switch_focus_container.php 6

[Astuce] i3wm : Switcher entre 2 moniteurs

On est capable de déplacer le focus vers un workspace donné mais je n'ai pas encore trouver comment basculer d'un moniteur à l'autre dans i3 (sans indiquer le nom du workspace cible).

J'ai écrit un script qui reçoit deux paramètres : la largeur (en pixels) du premier moniteur et celle du second. Par le biais de xdotool, je récupère la position en X du pointeur et je déduis le moniteur à atteindre.

Note : il est nécessaire d'installer xdotool et bc.

Afficher/masquer le code
#!/bin/sh

MONITOR1_WIDTH=$1
MONITOR2_WIDTH=$2

getMouseX() {
	xdotool getmouselocation 2>/dev/null | awk '{ print $1 }' | cut -d: -f2
}

getMouveNextX() {
	if [ $(getMouseX) -lt $MONITOR1_WIDTH ]; then
		echo "$MONITOR1_WIDTH+$MONITOR2_WIDTH/2" | bc
	else
		echo "$MONITOR1_WIDTH/2" | bc
	fi
}

moveTo() {
	xdotool mousemove $1 540
}

moveTo $(getMouveNextX)

Il suffit maintenant de mapper une combinaison de touches pour exécuter le script. Par exemple :

bindsym $mod+c exec ~/bin/i3_switch_monitor.sh 1920 1920