Accueil / Raspberry Pi / Commandes utiles pour configurer et utiliser son Raspberry Pi

Commandes utiles pour configurer et utiliser son Raspberry Pi

Le Raspberry Pi est un ordinateur qui fonctionne sous Linux. Même si beaucoup de choses peuvent se faire à l’aide de logiciels qui possèdent une interface graphique, le Terminal de commande reste omni présent pour configurer, mettre à jour, installer. A force de chercher les commandes sur internet, j’ai fini par écrire un petit article qui concentre pas mal de choses utiles au quotidien lorsqu’on travail s’amuse avec un Raspberry

Comment récupérer les caractéristiques du Raspberry Pi

La commande cat permet de récupérer de nombreuses caractéristiques du Raspberry Pi. Voici ce que vous allez pouvez savoir sur votre Raspberry :

  • cat /proc/cpuinfo : caractéristiques du microprocesseur, modèle, fréquence, numéro de version, nombre de coeurs…
  • cat /proc/meminfo : affiche les informations sur la mémoire du Raspberry Pi (mémoire totale, libre…)
  • cat /proc/partitions : pour connaitre la taille des partitions (y compris la taille de la carte SD)
  • cat /proc/version : version du linux installé

linux raspberry commande cat proc cpuinfo

Lister les appareils connectés en USB

Si vous faites un peu de domotique, il est parfois nécessaire de connaitre le port USB sur lequel est branché un appareil. Voici une liste de commandes bien utiles. Pour rédiger l’article, j’ai connecté un vieux clavier DELL ainsi qu’une Wemos D1 Mini qui me sert de Gateway MySensors.

Commençons tout simplement par lister les appareils connectés en USB avec la commande lsusb. On récupère tous les appareils connectés en USB. Dans mon cas, on retrouve donc le clavier DELL (qui peut aussi être un hub USB) et la Wemos qui est connectée sur le device 6. C’est intéressant de voir que l’adaptateur Ethernet et lui même connecté en USB au RPI.

linux raspberry commande lsusb
Liste des appareils connectés en USB (lsusb)

C’est bien beau mais on ne connais toujours pas le port tty sur lequel est mappé l’appareil USB. Il existe plusieurs solutions mais la plus simple que j’ai trouvé est celle-ci. Commencez par débrancher votre appareil puis retranché le. Ensuite exécutez la commande dmesg -s 1024. Cette commande permet de récupérer les derniers messages système. Voici ce que j’obtient lorsque je branche la Wemos sur le port USB.

linux raspberry commande dmesg s 1024

Si votre appareil communique via le port série (usb-serial) avec le Raspberry. C’est le cas pour de nombreux appareils domotique DIY (RFXCom, Gateway MySensors, Arduino…), vous pouvez vérifier grâce à la commande ls -l /sys/bus/usb-serial/devices.

pi@raspberrypi:/sys/class/tty/ttyUSB0 $ ls -l /sys/bus/usb-serial/devices
total 0
lrwxrwxrwx 1 root root 0 sep 16 07:42 ttyUSB0 -> ../../../devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0

On retrouve bien la Wemos connectée au port ttyUSB0.

Si vous voulez récupérer plus d’informations, faites utilisez la commande udevadm. Dans l’exemple ci-dessous, on récupère les infos sur le port /dev/ttyUSB0. Si aucun appareil n’est connecté, vous aurez le retour device node not found.

pi@raspberrypi:~ $ udevadm info -a -p  $(udevadm info -q path -n /dev/ttyUSB0)

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0/tty/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0':
    KERNELS=="ttyUSB0"
    SUBSYSTEMS=="usb-serial"
    DRIVERS=="ch341-uart"
    ATTRS{port_number}=="0"

  looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0':
    KERNELS=="1-1.2:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="ch341"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceSubClass}=="01"
    ATTRS{bInterfaceProtocol}=="02"
    ATTRS{bNumEndpoints}=="03"
    ATTRS{authorized}=="1"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceNumber}=="00"

  looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2':
    KERNELS=="1-1.2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{devpath}=="1.2"
    ATTRS{idVendor}=="1a86"
    ATTRS{speed}=="12"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="8"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="6"
    ATTRS{configuration}==""
    ATTRS{bMaxPower}=="96mA"
    ATTRS{authorized}=="1"
    ATTRS{bmAttributes}=="80"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{maxchild}=="0"
    ATTRS{bcdDevice}=="0254"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{version}==" 1.10"
    ATTRS{urbnum}=="20"
    ATTRS{ltm_capable}=="no"
    ATTRS{removable}=="removable"
    ATTRS{idProduct}=="7523"
    ATTRS{bDeviceClass}=="ff"
    ATTRS{product}=="USB2.0-Serial"

  looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1':
    KERNELS=="1-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="02"
    ATTRS{devpath}=="1"
    ATTRS{idVendor}=="0424"
    ATTRS{speed}=="480"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="2"
    ATTRS{configuration}==""
    ATTRS{bMaxPower}=="2mA"
    ATTRS{authorized}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{maxchild}=="5"
    ATTRS{bcdDevice}=="0200"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{version}==" 2.00"
    ATTRS{urbnum}=="56"
    ATTRS{ltm_capable}=="no"
    ATTRS{removable}=="unknown"
    ATTRS{idProduct}=="9514"
    ATTRS{bDeviceClass}=="09"

  looking at parent device '/devices/platform/soc/3f980000.usb/usb1':
    KERNELS=="usb1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{devpath}=="0"
    ATTRS{idVendor}=="1d6b"
    ATTRS{speed}=="480"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{authorized_default}=="1"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="1"
    ATTRS{configuration}==""
    ATTRS{bMaxPower}=="0mA"
    ATTRS{authorized}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{maxchild}=="1"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{bcdDevice}=="0404"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{serial}=="3f980000.usb"
    ATTRS{version}==" 2.00"
    ATTRS{urbnum}=="25"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Linux 4.4.11-v7+ dwc_otg_hcd"
    ATTRS{removable}=="unknown"
    ATTRS{idProduct}=="0002"
    ATTRS{bDeviceClass}=="09"
    ATTRS{product}=="DWC OTG Controller"

  looking at parent device '/devices/platform/soc/3f980000.usb':
    KERNELS=="3f980000.usb"
    SUBSYSTEMS=="platform"
    DRIVERS=="dwc_otg"
    ATTRS{hnp}=="HstNegScs = 0x0"
    ATTRS{srp}=="SesReqScs = 0x1"
    ATTRS{regvalue}=="invalid offset"
    ATTRS{hsic_connect}=="HSIC Connect = 0x1"
    ATTRS{guid}=="GUID = 0x2708a000"
    ATTRS{mode}=="Mode = 0x1"
    ATTRS{srpcapable}=="SRPCapable = 0x1"
    ATTRS{regdump}=="Register Dump"
    ATTRS{gpvndctl}=="GPVNDCTL = 0x00000000"
    ATTRS{ggpio}=="GGPIO = 0x00000000"
    ATTRS{hprt0}=="HPRT0 = 0x00001005"
    ATTRS{wr_reg_test}=="Time to write GNPTXFSIZ reg 10000000 times: 380 msecs (38 jiffies)"
    ATTRS{driver_override}=="(null)"
    ATTRS{hcd_frrem}=="HCD Dump Frame Remaining"
    ATTRS{mode_ch_tim_en}=="Mode Change Ready Timer Enable = 0x0"
    ATTRS{gnptxfsiz}=="GNPTXFSIZ = 0x01000306"
    ATTRS{remote_wakeup}=="Remote Wakeup Sig = 0 Enabled = 0 LPM Remote Wakeup = 0"
    ATTRS{busconnected}=="Bus Connected = 0x1"
    ATTRS{hcddump}=="HCD Dump"
    ATTRS{gotgctl}=="GOTGCTL = 0x001c0001"
    ATTRS{spramdump}=="SPRAM Dump"
    ATTRS{grxfsiz}=="GRXFSIZ = 0x00000306"
    ATTRS{gsnpsid}=="GSNPSID = 0x4f54280a"
    ATTRS{gusbcfg}=="GUSBCFG = 0x20001700"
    ATTRS{hptxfsiz}=="HPTXFSIZ = 0x02000406"
    ATTRS{devspeed}=="Device Speed = 0x0"
    ATTRS{fr_interval}=="Frame Interval = 0x1d4c"
    ATTRS{rem_wakeup_pwrdn}==""
    ATTRS{bussuspend}=="Bus Suspend = 0x0"
    ATTRS{buspower}=="Bus Power = 0x1"
    ATTRS{hnpcapable}=="HNPCapable = 0x1"
    ATTRS{rd_reg_test}=="Time to read GNPTXFSIZ reg 10000000 times: 950 msecs (95 jiffies)"
    ATTRS{enumspeed}=="Device Enumeration Speed = 0x1"
    ATTRS{inv_sel_hsic}=="Invert Select HSIC = 0x0"
    ATTRS{regoffset}=="0xffffffff"

  looking at parent device '/devices/platform/soc':
    KERNELS=="soc"
    SUBSYSTEMS=="platform"
    DRIVERS==""
    ATTRS{driver_override}=="(null)"

  looking at parent device '/devices/platform':
    KERNELS=="platform"
    SUBSYSTEMS==""
    DRIVERS==""

En savoir encore plus avec la commande vcgencmd

La commande vcgencmd permet de récupérer de nombreuses informations sur le firmware du Raspberry. Exécutez la commande vcgencmd commands pour récupérer la liste complète des commandes disponible. La liste peut évoluer à chaque mise à jour du Firmware. Certaines commandes nécessitent un argument complémentaire. Pour connaître en détail le fonctionnement de chaque commande, allez visiter cette page.

pi@raspberrypi:/sys/class/tty/ttyUSB0 $ vcgencmd commands
commands="vcos, ap_output_control, ap_output_post_processing, vchi_test_init, vchi_test_exit, pm_set_policy, pm_get_status, pm_show_stats, pm_start_logging, pm_stop_logging, version, commands, set_vll_dir, set_backlight, set_logging, get_lcd_info, arbiter, cache_flush, otp_dump, test_result, codec_enabled, get_camera, get_mem, measure_clock, measure_volts, scaling_kernel, scaling_sharpness, get_hvs_asserts, get_throttled, measure_temp, get_config, hdmi_ntsc_freqs, hdmi_adjust_clock, hdmi_status_show, hvs_update_fields, pwm_speedup, force_audio, hdmi_stream_channels, hdmi_channel_map, display_power, read_ring_osc, memtest, dispmanx_list, get_rsts, schmoo, render_bar, disk_notify, inuse_notify, sus_suspend, sus_status, sus_is_enabled, sus_stop_test_thread, egl_platform_switch, mem_validate, mem_oom, mem_reloc_stats, file, vctest_memmap, vctest_start, vctest_stop, vctest_set, vctest_get"

Faisons quelques tests.

Connaître la température du microprocesseur, vcgencmd measure_temp

vcgencmd-measure_temp

La résolution de l’écran branché au Raspberry,  vcgencmd get_lcd_info

vcgencmd-get_lcd_info

Se connecter à distance à l’aide de SSH

Pour tout savoir, lisez cet article précédent plus complet. Sinon en résumé, après avoir activé la connexion SSH depuis raspi-config, utilisez Putty (sous Windows) ou ouvrez le Terminal de commande sous Mac et Linux et exécutez

ssh pi@ADRESSE_IP_RPI

ou avec la distribution Raspbian

ssh pi@raspberrypi.local

le mot de passe par défaut est raspberry.

Autres commandes utiles en vrac

Connaitre l’état de fonctionnement des services

Un service est un programme qui fonctionne en tâche de fond et qui se lance au démarrage du système (Raspbian ou toute autre distribution Linux). La commande sudo service --status-all permet de lister les services lancés.

raspbian sudo --service-all mongodb runing

D’autres commandes utiles

sudo service <NOM_DU_SERVICE> status Etat du service
sudo service <NOM_DU_SERVICE> start Démarrer le service
sudo service <NOM_DU_SERVICE> stop Arrêter le service
sudo service <NOM_DU_SERVICE> restart Redémarre le service (après une modification d’un fichier de configuration par exemple)

Eteindre le Raspberry

Ca manque un bouton pour arrêter son Raspberry ! Voici plusieurs commandes bien utiles pour arrêter le Raspberry proprement. N’oublions pas qu’il est impératif d’éteindre le Raspberry avant de le débrancher son peine de détruire la carte SD. Ce serait vraiment dommage de devoir tout réinstaller.

La commande la plus rapide est sudo poweroff qui va arrêter immédiatement le RPI. L’équivalent de poweroff est sudo shutdown now.

sudo poweroff

Si vous avez envie de programmer un arrêt, par exemple à 22h00 avant d’aller vous coucher, utilisez la commande shutdown -h. Par exemple

sudo shutdown –h 22:00

Pour annuler l’heure d’arrêt programmée, sudo shutdown -c.

Empêcher l’écran noir de Raspbian Jessie

La mise en veille de l’écran vous agace, voici comment l’empêcher très simplement. Par contre, pensez à la planète, n’oubliez pas d’appuyer sur le bouton de mise sous tension pour arrêter votre écran. Il en a un lui au moins !

Exécutez la commande suivante pour éditer le fichier cmdline.txt et ajoutez consoleblank=0 à la fin de la ligne

sudo nano /boot/cmdline.txt

Redémarrez le Raspberry pour prendre en compte le nouveau paramètre.

Activer le clavier numérique Num Lock dès le démarrage de Raspbian

Chose étrange, le clavier numérique n’est pas activé par défaut au démarrage de Raspbian. Comme il n’y a aucun réglage dans raspi-config pour configurer cela, on va devoir le faire à la main. Ouvrez le fichier configuration du clavier qui se trouve dans le répertoire /etc/kbd/config

sudo nano /etc/kbd/config

Allez presque à la fin du fichier et retirez le # devant LEDS=+num.

Petite astuce au passage, vous pouvez activer l’affichage de l’heure dans le coin supérieur droit de la console en retirant le # devant DO_VCSTIME=yes.

Sauvegardez et redémarrez Raspbian (sudo reboot) pour prendre en compte les nouveaux réglages.

raspbian activer numlock vcstime

Mettre à jour de Linux (et Raspbian)

Il existe deux commandes pour mettre à jour le système. La première apt-get update pour mettre à jour les packages de la version actuelle (fichiers de traduction…)

sudo apt-get update

Si on veut mettre à niveau les paquets vers la version la plus récente, on exécute la commande apt-get upgrade. Cette commande permet de mettre à jour le firmware du Raspberry Pi par exemple.

sudo apt-get upgrade

Enfin pour mettre à jour la distribution, à chaque mise à jour de Raspbian par exemple. Par contre il faudra peut être aussi mettre à jour certains composants Python manuellement.

sudo apt-get dist-upgrade

 

Voilà, j’espère que toutes ces astuces vous seront utiles. Si vous en avez d’autres à partager, les commentaires sont là pour ça.

Mises à jour :

  • 3/11/2016 : connaître l’état des services