i3wm - barre de status

Il y a quelques semaines, j'ai changé de gestionnaire de fenêtres sur ma Debian. De Fvwm-crystal (que je recommande beaucoup) à i3wm, j'ai un full tiling manager et c'est vraiement nickel.

J'ai fais quelques lignes de code pour modifier la barre de status et je vais les paratager.

i3wm status bar

Mais avant tout, on va configurer le minimum vital pour que ça fonctionne :

Dans le bloc bar { ... } de votre fichier de configuration, remplacez status_command i3status par status_command ~/.i3/i3status.sh.

~/.i3/i3status.sh doit contenir :

#!/bin/sh

php ~/.i3/i3status.php

i3status | while read LINE; do
	php ~/.i3/i3status.php
done

Vous l'aurez remarqué, j'ai décidé d'utiliser du php. Pour ceux que ça ne dérange pas et qui n'ont pas encore le nécessaire :

$ su -
# aptitude update
# aptitude install php5

Il ne reste plus que de placer dans ~/.i3/i3status.php le code suivant :

<?php
// J'ai des soucis d'encodage sur le blog, le code avec les caractères en utf8 sont dispos ici : http://wall.deblan.fr/x10a/php/1/

define('SEPARATOR', ' # ');

render(
	get_the_notification(), 
	get_ips(array('eth0', 'wlan0')), // indiquez les interfaces susceptibles d'être utilisées et dont vous voulez connaître les IP (si elles en ont)
	get_the_acpi(),
	get_the_date()
);


/**
 *
 * IP
 *
 */
function get_ips($ifaces=array()) {
	$ips = array();
	foreach($ifaces as $iface) {
		preg_match('`inet ([^\s]+)`', shell_exec('ip addr show '.escapeshellcmd($iface)), $inet);

		if($inet) {
			$ips[] = '['.$iface.'] '.$inet[1];
		}
	}

	return implode(SEPARATOR, $ips);;
}

function ips() {
	echo get_ips();
}


/**
 *
 * Notification
 *
 */
function get_the_notification() {
	$final = '';

	if(file_exists($file=getenv('HOME').'/.i3/notification')) {
		$info = json_decode(file_get_contents($file));

		if($info->count == 15) {
			unlink($file);
		}
		else {
			$info->count++;

			file_put_contents(
				$file, 
				json_encode($info)
			);

			$message = '['.$info->title.'] '.$info->message;

			$final.= $message;
		}
	}

	return $final;
}

function the_notification() {
	echo get_the_notification();
}


/**
 *
 * Date
 *
 */
function get_the_date() {
	return date('H:i:s'.SEPARATOR.'d/m/Y');
}

function the_date() {
	echo get_the_date();
}

/**
 *
 * Acpi
 *
 */
function get_the_acpi() {
	$acpi = shell_exec('acpi');

	if(!preg_match('`Discharging`', $acpi)) {
		preg_match('`([0-9]+%)`', $acpi, $values);

		if(!empty($values)) {
			$charging = $values[1];
			return $charging.'?';
		}

		return '';
	}
	
	preg_match('`([0-9]+%), ([0-9]+:[0-9]+)`', $acpi, $values);

	$charging = $values[1].'?';
	$times    = str_replace(':', 'h', $values[2]);

	return implode(' ', array($charging, $times));
}

function the_acpi() {
	echo get_the_acpi();
}


/**
 *
 * Render
 *
 */
function get_the_render($values) {
	foreach($values as $k => $v) {
		if(empty($v)) {
			unset($values[$k]);
		}
	}

	return implode(SEPARATOR, $values).SEPARATOR;
}

function render() {
	echo get_the_render(func_get_args());
}

J'ai un système de notification qui permet de faire ça :

i3wm status bar

Voici le script qui permet de générer la notification :

#!/usr/bin/php5
<?php

$file = getenv('HOME').'/.i3/notification';

$info = array(
	'title'   => $argv[1],
	'message' => $argv[2],
	'count'   => 0
);

file_put_contents(
	$file, 
	json_encode($info)
);
/chemin/vers/le/script titre "Je suis une notification"

Terminé :)

Sharepoint Office365 sur Linux : automatiser l'authentification (v2)

Sharepoint Office365 sur Linux : automatiser l'authentification (v2)

En septembre 2018, je publiais un article pour automatiser l'authentification sur Sharepoint…

Sharepoint Office365 sur Linux : automatiser l'authentification

Sharepoint Office365 sur Linux : automatiser l'authentification

Suite de l'aventure avec Sharepoint ! On a pu passer 2 étapes cruciales pour jouer avec Sha…

Sharepoint Office365 sur Linux (Webdav/Davfs) avec des fichiers accentués

Sharepoint Office365 sur Linux (Webdav/Davfs) avec des fichiers accentués

Suite de l'aventure avec Sharepoint ! Je me suis rendu compte que les répertoires et les fi…


Ajouter un commentaire

Votre commentaire - Vous pouvez utiliser du markdown

Renouveler