Affichage des articles dont le libellé est configuration. Afficher tous les articles
Affichage des articles dont le libellé est configuration. Afficher tous les articles

vendredi 3 novembre 2017

installer une imprimante en ligne de commande

Mise à jour du 01/01/2018 Ajouté comment supprimer une imprimante et comment trouver une URI, en particulier pour une imprimantte usb.

AntiX

Je viens d'installer linux AntiX 17 (pour amd64) sur une de mes machines. AntiX est une distribution dérivée de debian sans systemd et c'est pourquoi j'ai voulu la tester. De nouveau, car un vieil essai précédent ne mm'avait pas tellement convaincu. Mais là je suis sous le charme !

D'abord, antiX connaît le clavier bépo au niveau de son CD d'installation. Celui-ci est un live CD, qui se charge très vite (j'utilise une clé USB 2.0 pour ce test). Je ne dirai rien pour le wifi et le bluetooth car ma machine en était dépourvue, mais les deux écrans sont gérés d'office dans leur meilleure résolution, et pas en mode cloné. Ce sont deux écrans physiquement identiques.

L'installation avec partitionnement manuel (mon choix -- toujours) est particulièrement rapide. Bon, ça n'installe pas de gros trucs comme gnome ou mate, alors ça aide. Pour installer mate, j'ai installé tasksel puis j'ai installé mate avec tasksel. Pas de gros problème. Faites attention au gestionnaire d'écran choisi pour la session la première fois, car celui sélectionné par défaut est un peu court (pas possible d'ouvrir un terminal -- je suis passé par l'édition d'un texte avec vi pour lancer bash depuis vi -- mais j'aurai dû choisir un autre gestionnaire de fenêtres).

Tout allait pour le mieux jusqu'à ce que je décide d'installer une imprimante.

installer une imprimante à la main

En effet, la boîte de dialogue de gestion des imprimantes n''apparaît pas (sous mate). Rien à faire. Je me suis donc hissé à un niveau de geekitude supérieur et j'ai utilisé lpadmin. Aucune difficulté de syntaxe particulière. Mais il ne faut pas se tromper avec l'URI de l'imprimante sinon la communication n'aura jamais lieu et une commande lpstat -p myprinter -R indiquera que la dite imprimante myprinter « is not responding » . Au fait, il faut aussi rendre l'imprimante disponible avec lpadmin -p myprinter -E et on peut en faire l'imprimante par défaut avec lpadmin -d myprinter. On peut combiner tout ça en une seule commande comme par exemple :

sudo lpadmin -p myprinter -v socket://myprinter.chez.moi.com:9100 \
  -P ~/drivers/modele-de-mon-imprimante.ppd -E -d myprinter

Pour l'URI d'une imprimante réseau, on peut donc avoir socket://...:9100 et c'est le seul truc qui marchait pour moi. Sinon on peut aussi essayer ipp://.../ipp ou ipps://.../ipp entre autres.

Pour une imprimante usb, il faut trouver la bonne URI aussi. En ligne de commande, le plus simple est d'utiliser lpinfo -v | grep usb:. Si lpinfo n'est pas reconnu, essayez /usr/sbin/lpinfo -v. Pensez à installer cups-bsd au besoin (voir un peu plus loin). Par exemple, pour mon imprimante Samsung M2026W j'obtiens :

/usr/sbin/lpinfo -v | grep usb:
direct usb://Samsung/M2020%20Series?serial=08HYB8GG5E00H9Y

Ici, l'URI à recopier est usb://Samsung/M2020%20Series?serial=08HYB8GG5E00H9Y tout simplement ;-)

Une autre possibilité est d'utiliser le frontal web de cups situé par défaut à http://localhost:631/ qui permet d'imprimer une page de test. Mais qui ne vous donnera pas le bon schéma d'URI à utiliser : là enccore, il faut deviner. Un petit truc sous cette interface : si votre imprimante y apparaît comme raw printer bien que vous ayez fourni un fichier ppd pour le pilote, il est à peu près certain que le l'URI utilisée n'est pas la bonne !

lpq

Si vous voulez utiliser lpq au lieu de lpstat en ligne de commande, ou encore lpinfo, il faut l'installer avec sudo apt-get install cups-bsd car c'est en effet une commande BSD. L'avantage de lpq, c''est qu'il suffit de taper lpq pour voir la file de l'imprimante par défaut. Et en prime on aura lprm qui peut aussi servir de temmps en temps. Surtout pour moi tant que je n'aurai pas récupéré l'interface graphique normale de gestion des imprimantes !

Pour supprimer une imprimante, utilisez lpadmin -x myprinter.

vendredi 14 octobre 2016

Accéder à son serveur mysql distant en java

Tout n'est pas cousu d'avance

Quand on veut accéder depuis une application écrite en java à un serveur mysql situé sur un autre ordinateur, il va falloir faire attention à quelques détails indispensables :

  • vérifier le pare feu de chaque machine !
  • autoriser la connexion du serveur java sur le serveur mysql dans /etc/hosts.allow
  • autoriser vos utilisateurs à se connecter sur le serveur mysql depuis la machine java dans la table mysql.user
  • si vous utilisez ssh pour cette connexion, configurez correctement votre serveur de clés d'authentification

Je ne décrirai pas le dernier point car c'est (encore) hors de ma compétence. Mais je vais détailler les autres points. Tout est à réaliser avec les droits root !

pare-feu

configuration du pare-feu sur le serveur java
iptables -A INPUT -s 192.168.0.42/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT
iptables save

connexion tcp/ip

Éventuellement, il faudra modifier /etc/hosts.allow sur le serveur mysql en ajoutant une ligne comme :

ligne à ajouter dans /etc/hosts.allow
mysqld: ALL : ACCEPT

Ensuite il faut modifier /etc/mysql/my.cnf sur le serveur mysql pour autoriser la connexion depuis une autre machine. Pour cela il faut mettre en commentaire la directive skip-networking, mais dans un serveur récent, elle n'est plus utilisée. À la place on a bind-address = 127.0.0.1 et en fait on va créer ou modifier bind-address pour y mettre l'adresse du serveur java (ici, 192.168.0.42), ou bien 0.0.0.0 si on veut autoriser tous les serveurs :

modification de bind-address dans /etc/mysql/my.cnf
bind-address = 192.168.0.42

utilisateurs mysql

Créez ou modifiez votre utilisateur avec "%" dans le champ Host de la table user de la base de données nommée mysql . On peut réduire la portée en mettant 192.168.0.% à la place de % par exemple, ou encore avec l'adresse IP du seul serveur depuis lequel la connexion est autorisée.

Attention avec phpmyadmin

Si vous avez mis une portée de Host comme 192.168.0.% par exemple, alors vous ne pourrez plus vous connecter avec cet utilisateur avec phpmyadmin. Si ça vous ennuie, il faudra créer un autre profil de l'utilisateur avec localhost comme valorisation du champ Host et le doter des mêmes privilèges. Le code ci-après montre comment créer les deux pour un utilisateur connext.

commandes sql pour avoir la connexion distante restreinte et la connexion mysql
flush privileges;
create user 'connext'@'localhost' identified by 'password';
create user 'connext'@'192.168.0.%' identified by 'password';
grant create, drop, delete, insert, select, update, alter, index on *.* to 'connext'@'localhost';
grant create, drop, delete, insert, select, update, alter, index on *.* to 'connext'@'192.168.0.%';
flush privileges;

Avec une portée comme %, vous pouvez aussi vous connecter via phpmyadmin car % inclut localhost.

vendredi 4 décembre 2015

un peu d'historique et de tenue

À la suite de la lecture de cet article, j'ai été amené à modifier mes fichiers .bashrc et .vimrc pour les rendre plus sympas. J'ai regardé un peu d'autres ressources et voilà finalement ce que j'ai ajouté à mon .bashrc

# no duplicate in history
export HISTCONTROL=ignoreboth:erasedups

# do not make noise. Also visible can cause delays.
set bell-style none

# Don't echo ^C etc (new in bash 4.1)
# Note this only works for the command line itself,
# not if already running a command.
set echo-control-characters off

# Enable coloring for tab completions with bash >= 4.3
set colored-stats on

# Note this must be done before the settings below
# Caveats:
#   Broken on bash 3.2 (can't move cursor to EOL).
#   ^L only works in command mode and when line is empty
set editing-mode vi
set -o vi

# By default up/down are bound to previous-history
# and next-history respectively. The following does the
# same but gives the extra functionality where if you
# type any text (or more accurately, if there is any text
# between the start of the line and the cursor),
# the subset of the history starting with that text
# is searched (like 4dos for e.g.).
# Note to get rid of a line just Ctrl-C
bind '"\e[B": history-search-forward'
bind '"\e[A": history-search-backward'

Et voici les ajoûts de mon .vimrc :

set bs=2
let g:is_posix=1
set listchars=tab:>-,trail:.,extends:> 

Les autres suggestions ne m'ont pas intéressé finalement. Pour vim, je n'ai pas vu grande différence pour l'instant, mais pour bash, c'est nettement mieux !

Mais pour vim j'ai aussi installé deux extensions assez chouettes :

  1. syntastic pour la coloration syntaxique ;
  2. vim-airline pour une belle ligne d'état (vim et gvim).

lundi 15 juin 2015

clavier Kensington keyfolio pro 2 pour IPad avec linux

Je viens d'acheter un tel clavier d'occasion, quasimment neuf. C'est le modèle pour iPad 10" mais il fonctionne très bien avec Android ou linux. L'image ci-dessous est en QWERTY (elle provient de the-gadgeeteer.com).

C'est un AZERTY de type Mac. Ceda signifie que l'équivalent dans le monde PC est un clavier belge. C'est presque pareil, la seule différence notable étant dans l'affectation de la touche à côté du chiffre 1 en haut. En belge, c'est le 2 et 3 en exposant. Très inutile pour presque tout le monde. En Mac, c'est <, > et \ qui sert tout le temps.

Sur un clavier belge à 105 touche, cette touche existe aussi : c'est celle à gauche du W en bas. Sauf qu'elle n'existe pas physiquement dans mon clavier Kensington ! Il faut y remédier !

La solution est de remettre la touche du haut déjà évoquée dans son usage Mac. Cela me donnera les symboles, en accord avec la gravure du clavier qui plus est !

Pour cela, il faut éditer le fichier /usr/share/X11/xkbd/symbols/be et voici la tranformation à y faire :

avant :
 key  { [twosuperior, threesuperior,  notsign,      notsign ] };

après :
  // key  { [twosuperior, threesuperior,  notsign,      notsign ] };
  key     { [less,        greater,        backslash,    backslash ] };

(j'ai recopiée la ligne de un peu plus bas et changé LSGT en TLDE).

Bon, il faut ensuite mettre le clavier belge dans les claviers supportés. On peut changer de clavier à la souris, mais c'est pas mal aussi au clavier. Je me suis donc créé deux raccourcis dans les préférences claviers :

clavier azerty
setxkbmap be
maj-F2
clavier bépo
setxkbmap fr bepo
maj-F1

Attention ! Le passage auclavier correspondant au clavier physique se fait toujours en tappant shift-F1 sur le clavier bépo ou le clavier Mac. C'est bizarre que ce ne soit pas identique. Attention encore, pour enregistrer la séquence de transition bépo vers azerty belge, il faut être en bépo et taper shift-F1 sur le clavier Mac. Et pour la séquence inverse azerty belge vers bépo il faut être en azerty et appuyer sur shift-F1 sur le clavier bépo (un typematrix 2030 dans mon cas). À noter que sur ce clavier typematrix, je peux faire shift-F2 pour passer en azerty quand je suis déjà en bépo. Je ne peux pas faire ça sur le clavier Kensington, assez logiquement (ce qui y serait la touche logique F1 est la touche escape donc pas de touche de code F1 sur ce clavier).

jeudi 27 novembre 2014

Créer un sous-DBA sous mysql pour le dév

Il s'agit de créer un utilisateur dev qui a presque tous les droits sous mysql. On trouve de tels articles tout plein dans le web, mais celui-ci est taillé sur mesure pour mes besoins !

Avant de commencer, un petit truc pour phpmyadmin : on peut entièrement le reconfigurer, y compris si la base phpmyadmin a été abimée, avec :

sudo dpkg-reconfigure phpmyadmin

Il s'agit tout simplement de créer l'utilisateur dev et ensuite de lui donner ses pouvoirs. Rien de sorcier. 4 lignes de SQL suffisent :

flush privileges;
create user 'dev'@'localhost' identified by 'password';
grant create, drop, delete, insert, select, update, alter, index on *.* to 'dev'@'localhost';
flush privileges;
Le premier flush privileges; permet de recréer l'utilisateur dev si on vient de le supprimer. Le deuxième permet de s'en servir à coup sûr.

mercredi 26 novembre 2014

URL rewriting avec Apache pour Zend 1.x

J'ai eu beaucoup de mal à faire fonctionner le moindre exemple d'application avec Zend 1.x. Zend est un framework PHP qui ne marche qu'avec de l'URL rewriting et je n'en n'avais jamais fait. Mais j'avais déjà fait des configuration Apache avec VirtualHost aussi ai-je dès le départ mis en place un virtual host. Voir mon billet précédent sur la configuration d'Apache2 avec VirtualHost.

J'ai donc une URL applicative sur ma machine qui se nomme guestbook.machine.chez.moi et à cette URL correspond le contrôleur IndexController. Un synonyme de cet URL est guestbook.machine.chez.moi/index puisqui index est le désignateur de ce contrôleur dans une URL Zend. Oui mais voilà, chez moi cette deuxième ne marchait pas et j'avais une erreur 404 générée par Apache. Idem avec guestbook.machine.chez.moi/bidon.

Je finis par découvrir qu'en fait c'était parce que le fichier .htaccess que Zend avait créé pour assurer l'URL rewriting n'était pas pris en comptes parce que dans mon fichier de configuration Apache de l'application /etc/apache2/sites-available/guestbook j'avais d'actif un Options none alors qu'il fallait y mettre un FollowSymLinks. Mais je me suis contenté, bêtement, de recopier le bout de config donné là où j'ai trouvé cette information, à savoir Options Indexes MultiViews FollowSymLinks sans remarquer le MultiViews dont j'ignorais le rôle. Mais ça ne marchait toujours pas mieux…

Le log d'Apache m'informe de son refus de collaborer avec une ligne telle que :

[Wed Nov 26 15:31:52.624341 2014] [negotiation:error] [pid 10160] [client 127.0.0.1:43836] AH00687: Negotiation: discovered file(s) matching request: /home/geek/workspace/guestbook/public/index (None could be negotiated).

Mais je n'ai pas de fichier ou répertoire index, seulement un fichier index.php à la racine Apache du serveur. En gooolant le message d'erreur je trouve la cause et la solution : c'est ce foutu Multiviews qui fait coïncider index.php avec index et cela empêche l'URL rewriting conditionnel mis en place par Zend (pas d'URL rewriting si l'URL pointe sur un fichier existant). Il faut supprimer Multiviews et tout va pour le mieux. Voici donc ma configuration du VirtualHost avec les droits réduits au minimum :

<VirtualHost *:80>
  ServerName guestbook.machine.chez.moi
  DocumentRoot /home/geek/workspace/guestbook/public
  DirectoryIndex index.php
  <Directory />
    Options none
    AllowOverride None
    Require all denied
  </Directory>
  <Directory /home/geek/workspace/guestbook/public>
    Options FollowSymLinks SymLinksIfOwnerMatch
    AllowOverride None
    Require all granted
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
  </Directory>
  ErrorLog /var/log/apache2/guestbook.log
  LogLevel warn
  CustomLog /var/log/apache2/guestbook.log combined
</VirtualHost>
La directive AcceptPathInfo est inutile, mais je l'ai mise pour me rappeler que c'est finalement le mécanisme induit qui est utilisé par défaut dans ce cas. Comme je n'ai pas mis FollowSymLinks je pourrais aussi enlever RewriteCond %{REQUEST_FILENAME} -l [OR] qui devient un test inutile.

Si on utilise un fichier .htaccess alors son contenu est celui généré par Zend :

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
et le contenu de /etc/apache2/sites-available/guestbook est :
<VirtualHost *:80>
  ServerName guestbook.machine.chez.moi
  DocumentRoot /home/geek/workspace/guestbook/public
  DirectoryIndex index.php
  <Directory />
    Options none
    AllowOverride None
    Require all denied
  </Directory>
  <Directory /home/geek/workspace/guestbook/public>
    Options FollowSymLinks SymLinksIfOwnerMatch
    AllowOverride All
    Require all granted
  </Directory>
  ErrorLog /var/log/apache2/guestbook.log
  LogLevel warn
  CustomLog /var/log/apache2/guestbook.log combined
</VirtualHost>

mardi 28 octobre 2014

configuation Apache avec VirtualHost

Il va s'agir ici d'indiquer comment configurer Apache pour avoir plusieurs serveurs virtuels sur la même machine. C'est encore un exposé de plus, mais il expose ma façon de faire pour que je ne l'oublie plus et n'aie plus à potasser la doc de référence d'Apache pendant une demi-journée...

Cette configuration concerne Apache 2.4 ! Essayer une config Apache 2.0 ou 2.2 sur une Apache 2.4 mène le plus souvent à une erreur 403 (droits d'accès insuffiants -- parce que la syntaxe afférente a changé).

Le système hôte est une debian ou un dérivé comme Ubuntu ou Linux Mint.

Pour créer le serveur appli.chez.moi sur son serveur personnel il faut déjà permettre la résolution du nom appli.chez.moi et si on n'a pas de dns on va insérer dans /etc/hosts la ligne suivante (avec une tabulation avant l'adressi ip) :

appli.chez.moi 127.0.0.1

On peut mettre sa vraie adresse ip à la place de 127.0.0.1 si on veut mais ça ne change rien. Cela suffit pour être accessiblle à une machine externe à la condition qu'elle-même puisse modifier pareillement son fichier hosts, avec la vraie adresse ip de votre serveur toutefois (ce n'est pas possible sans avoir les droits administrateur sur la machine externe). Pour windows xp, il s'agit du fichier C:\WINDOWS\system32\drivers\etc\hosts qui a la même syntaxe que sous linux.

Il faut maintenant créer le fichier /etc/apache2/sites-available/appli (on peut aussi le nommer appli.chez.moi et on peut ajouter une extension .conf). Recopiez y le contenu ci-dessous.

<VirtualHost *:80>
  ServerName appli.chez.moi
  DocumentRoot /mnt/servers/appli
  DirectoryIndex index.php
  <Directory />
    Options none
    AllowOverride None
    Require all denied
  </Directory>
  <Directory /mnt/servers/appli>
    Require all granted
  </Directory>
  ErrorLog /var/log/apache2/appli_error.log
  LogLevel warn
  CustomLog /var/log/apache2/appli_access.log combined
</VirtualHost>

Cette config est pour un serveur php basique sans framework. Avec un framework, il faut pointer sur un sous répertoire et le fichier par défaut n'est en général toujours index.ph«/code>p aussi voyez ci-après ce que cela donnerait si, par exemple, appli.chez.moi était développée avec symphony 2.4.

<VirtualHost *:80>
  ServerName appli.chez.moi
  DocumentRoot /mnt/servers/appli/web
  DirectoryIndex app_dev.php
  <Directory />
    Options none
    AllowOverride None
    Require all denied
  </Directory>
  <Directory /mnt/servers/appli/web>
    Require all granted
  </Directory>
  ErrorLog /var/log/apache2/appli_error.log
  LogLevel warn
  CustomLog /var/log/apache2/appli_access.log combined
</VirtualHost>

Et voici le même exemple avec CodeIgniter mais en plus une gestion avec subversion (on veut lancer la version du trunk qui est dans /mnt/servers/appli/trunk).

<VirtualHost *:80>
  ServerName appli.chez.moi
  DocumentRoot /mnt/servers/appli/trunk/web
  DirectoryIndex index.php
  <Directory />
    Options none
    AllowOverride None
    Require all denied
  </Directory>
  <Directory /mnt/servers/appli/trunk/web>
    Require all granted
  </Directory>
  ErrorLog /var/log/apache2/appli_error.log
  LogLevel warn
  CustomLog /var/log/apache2/appli_access.log combined
</VirtualHost>

Bon, ces fichiers interdisent l'emploi de fichiers .htacess. On peut changer cela en ajoutant une ligne

AllowOverride all
dans <Directory /mnt/servers/appli/trunk/web> (ou quelque chose de moins ouvert que all).

Ces configurations interdisent l'emploi de liens symboliques. Je n'ai pas réussi à avoir une configuration comme il est recommandé d'en avoir avec des liens symboliques. Bon, en fait, je me suis rendu compte que je pouvais m'en passer, alors je m'en passe. Et d'autant mieux que c'est ce qu'Apache recommande.

Pour que le site soit disponible il faut maintenant lancer la commande

sudo a2ensite appli
(ou appli.chez.moi le cas échéant). Et enfin relancer apache :
sudo service apache2 restart
et alors on pourra voir sa page d'accueil en visitant la page http://appli.chez.moi avec son navigateur.