J'essaie de mettre à jour en toute sécurité le répertoire personnel comme spécifié dans /etc/passwd
, mais les utilitaires Linux standard - usermod et vipw - pour ce faire ne sont pas fournis par Cygwin.
Quelqu'un pourrait-il me dire comment ils ont changé cela dans Cygwin?
J'ai fini par quitter tous mes shells cygwin et les éditer à la main dans un éditeur de texte. Jusqu'ici tout va bien.
Remarque: n'échappez pas aux espaces du répertoire "Documents and Settings". L'entrée ressemblera
user:...:/cygdrive/c/Documents and Settings/user:/bin/bash
La ligne est symbolisée sur le :
personnage.
EDIT: Pour les versions récentes de Cygwin (1.7.34 et au-delà), voir cette nouvelle question .
Comme la réponse de sblundy, vous pouvez toujours éditer à la main.
Mais si vous voulez le faire de manière "officielle", utilisez la commande spécifique à cygwin mkpasswd
. Voici un extrait des documents officiels sur mkpasswd
:
Par exemple, cette commande:
Exemple 3.11. Utilisation d'une autre racine d'accueil
$ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
mettrait les répertoires personnels des utilisateurs locaux dans le répertoire "Profils" de Windows.
Il y a un tas d'autres commandes vraiment utiles décrites sur la page de documentation Cygwin Utilities (qui inclut mkpasswd
) . L'utilisation de cygpath
dans l'exemple ci-dessus est un autre de ces outils spécifiques à cygwin.
Pendant que vous y êtes, vous voudrez probablement également lire la documentation tilisation efficace de Cygwin avec Windows . Il y a un tas de très bons conseils.
La réponse la plus simple que j'ai trouvée est de faire de/home un lien logiciel vers votre répertoire Windows Home/UserProfile
cd /
mv home oldhome
ln -s "$(cygpath -H)" home
J'ai utilisé cygpath car il obtiendra l'emplacement approprié pour le répertoire HOME sur la version actuelle de Windows. Sur ma boîte cygpath -H
résultats /cygdrive/c/Users
Pour l'utilisateur actuel, les éléments suivants ont fonctionné pour moi:
J'ai confirmé que cela fonctionnait en exécutant ssh-keygen sans aucun argument. Après avoir effectué cette modification, l'application enregistre désormais par défaut la clé dans/cygdrive/c/Users/user au lieu de/home/user.
Je ne sais pas si la définition de HOME est requise, mais je l'ai quand même effectuée selon les instructions de configuration de TortoiseGit avec Cygwin en utilisant la documentation officielle de Tortoise pour le support non officiel de Cygwin ici . Définir HOME seul n'était cependant pas suffisant pour que ssh-keygen reconnaisse le changement de répertoire personnel.
Notez également que la documentation officielle de Cygwin sur ce problème peut être trouvée ici .
Confirmé dans Windows 7 à l'aide de Cygwin v1.7.35 64 bits.
J'ai toujours défini HOME comme une variable d'environnement spécifique à l'utilisateur dans les propriétés de l'ordinateur.
Pour éviter les problèmes causés par la présence d'espaces dans le chemin d'accès à votre répertoire personnel, utilisez la forme abrégée du répertoire "Profils" de Windows, c'est-à-dire /cygdrive/c/DOCUME~1/user
.
Vous pouvez le faire en tapant la commande:
mkpasswd -l -p "$(cygpath $(cygpath -dH))" > /etc/passwd
J'aime garder mon installation cygwin synchronisée avec une clé USB et un autre ordinateur, donc je déteste coder en dur le répertoire personnel. J'utilise le cygwin.bat suivant:
echo off
SETLOCAL
set Shell=\\bin\\bash
set HOME=%~dp0..\..\doc\unix
bin\bash --login -i
ENDLOCAL
SETLOCAL et ENDLOCAL s'assurent que Shell et HOME n'encombrent pas les variables env existantes pour d'autres programmes. HOME=%~dp0..\..\doc\unix
définit HOME comme deux répertoires, dans le sous-répertoire doc/unix. Puis dans ....\doc\unix.bashrc, j'inclus PATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin"
. Je n'ai pas utilisé start /wait %CD%\bin\bash
pour démarrer bash, car j'utilise Console2 , donc je n'ai pas besoin d'une fenêtre cmd supplémentaire.
Cela fonctionne pour moi pour une solution permanente, non portable et non réseau; c'est-à-dire la définition permanente de la variable d'environnement HOME dans Windows.
Notez que cela n'affecte pas ssh ou telnet sessions qui se réfèrent toujours à /etc/passwd
ref: Configurer la variable d'environnement Cygwin- My HOME n'est pas ce que je veux.
Pour actuel utilisateur (doit être exécuté une fois par utilisateur) ::
reg add HKCU\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%
Pour nouveau Utilisateurs:
reg add HKU\.DEFAULT\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%
Remarque: Carets ^ avant pourcent-signes%
Importez ce fichier reg ( actuel utilisateur):
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
00,45,00,25,00,00,00
Pour les utilisateurs de nouveau:
Windows Registry Editor Version 5.00
[HKU\.DEFAULT\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
00,45,00,25,00,00,00
Dans Regedit, sous:
Pour actuel utilisateur:
HKEY_CURRENT_USER\Environment
Pour nouveau Utilisateurs:
HKU\.DEFAULT\Environment
Créer [~ # ~] home [~ # ~] en tant que nouveau Valeur de chaîne extensible (* REG_EXPAND_SZ *) et insérez % USERPROFILE%
Original réponse par Christopher de ailleurs
Pour ceux qui utilisent Cygwin 1.7.34 ou supérieur Cygwin prend en charge la configuration de la façon de récupérer le répertoire personnel, le shell de connexion et les informations gecos dans /etc/nsswitch.conf
. Ceci est détaillé dans la section Guide de l'utilisateur Cygwin:
Si vous avez déjà créé un /etc/passwd
ou /etc/group
fichier, vous souhaiterez les supprimer et configurer Cygwin à l'aide du nouveau modèle de sécurité Windows pour les mappages POSIX.
[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak
Le /etc/nsswitch.conf
des dossiers db_home:
setting définit comment Cygwin récupère le répertoire personnel de l'utilisateur. Le paramètre par défaut pour db_home:
est
db_home: /home/%U
Donc, par défaut, Cygwin définit simplement le répertoire home sur /home/$USERNAME
. Vous pouvez toutefois changer cela pour pointer vers tout autre chemin personnalisé que vous souhaitez. Les caractères génériques pris en charge sont les suivants:
%u
Le nom d'utilisateur Cygwin (en minuscule u).%U
Le nom d'utilisateur Windows (c'est U majuscule).%D
Domaine Windows dans le style NetBIOS.%H
Répertoire personnel Windows de style POSIX. Notez que, pour le db_home:
, cela n'a de sens que juste après la barre oblique précédente, comme dans db_home: /%H/cygwin
%_
Puisque l'espace et les caractères TAB sont utilisés pour séparer les schémas, un espace dans le nom de fichier doit être donné comme %_
(c'est un trait de soulignement).%%
Un caractère en pourcentage.Au lieu d'un chemin, vous pouvez spécifier l'un des quatre schémas de chemin nommés prédéfinis.
windows
Le répertoire de base de l'utilisateur est défini sur le même répertoire que celui utilisé comme répertoire de base de Windows, généralement quelque chose comme %USERPROFILE%
ou C:\Users\$USERNAME
. Bien sûr, le répertoire Windows est converti en style POSIX par Cygwin.
cygwin
AD uniquement: le répertoire personnel de l'utilisateur est défini sur le chemin POSIX indiqué dans l'attribut cygwinHome de la classe auxiliaire cygwinUser. Voir aussi la section intitulée "Le schéma cygwin" .
unix
AD uniquement: le répertoire personnel de l'utilisateur est défini sur le chemin POSIX indiqué dans l'attribut unixHomeDirectory de la classe auxiliaire posixAccount. Voir aussi la section intitulée "Le schéma unix" .
desc
Le répertoire personnel de l'utilisateur est défini sur le chemin POSIX indiqué dans le paramètre home = "..." semblable à XML dans l'attribut de description de l'utilisateur dans SAM ou AD. Voir la section intitulée "Le schéma desc" pour une description détaillée.
Ce qui suit rendra le répertoire personnel de l'utilisateur dans Cygwin identique à celui utilisé pour le répertoire personnel Windows.
db_home: windows
Pour ceux qui utilisent Cygwin 1.7.33 ou une version antérieure, mettez à jour vers la dernière version Cygwin et supprimez _ précédemment utilisé /etc/passwd
et /etc/group
fichiers, puis suivez les étapes ci-dessus.
Sinon, suivez ces anciennes étapes ci-dessous.
Tout d'abord, définissez une variable d'environnement Windows pour HOME qui pointe vers votre profil utilisateur:
HOME
%USERPROFILE%
Nous allons maintenant mettre à jour le Cygwin /etc/passwd
fichier avec Windows %HOME%
variable que nous venons de créer. Les connexions shell et les connexions distantes via ssh
reposeront sur /etc/passwd
pour leur indiquer l'emplacement de l'utilisateur $HOME
chemin.
À l'invite de commande bash Cygwin, tapez ce qui suit:
cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H) > /etc/passwd
mkpasswd -d -p $(cygpath -H) >> /etc/passwd
Le -d
switch indique à mkpasswd d'inclure les utilisateurs DOMAIN, tandis que -l
est uniquement destiné aux utilisateurs de machines LOCALES. Ceci est important si vous utilisez un PC au travail où les informations utilisateur sont obtenues à partir d'un contrôleur de domaine Windows.
Maintenant, vous pouvez également faire la même chose pour les groupes, bien que cela ne soit pas nécessaire à moins que vous n'utilisiez un ordinateur faisant partie d'un domaine Windows. Cygwin lit les informations de groupe dans les bases de données des comptes Windows, mais vous pouvez ajouter un /etc/group
fichier si votre machine est souvent déconnectée de son contrôleur de domaine.
À l'invite bash Cygwin, tapez ce qui suit:
cp /etc/group /etc/group.bak
mkgroup -l > /etc/group
mkgroup -d >> /etc/group
Maintenant, quittez Cygwin et redémarrez-le. Vous devez constater que votre chemin HOME pointe vers le même emplacement que votre profil d'utilisateur Windows, c'est-à-dire /cygdrive/c/Users/username
cd /home
rm -rf chris
ln -s /cygdrive/z chris
Je ne sais pas vraiment si c'est la solution la plus sûre mais c'est une solution possible qui fonctionne pour moi;)
J'ai modifié mon fichier/etc/passwd directement (en m'assurant que rien d'autre n'y accède) et j'ai changé toutes les références à/home pour être/Users (sous Windows 7). J'ai constaté que, pour que tout fonctionne correctement, je devais supprimer tous les répertoires du répertoire/home (ou les déplacer vers l'autre emplacement approprié). Sinon, cygwin développerait une personnalité divisée où, par exemple, 'bash -l' commencerait dans/home/Pablo mais $ HOME serait/Users/Pablo et emacs semblerait faire l'inverse. Une fois que j'ai supprimé/home/Pablo, tout a bien fonctionné.
Je n'avais besoin que d'être dans C:\Users\username
quand je démarre cygwin. Donc, je viens d'ajouter à .bashrc
et .profile
cd ${HOMEPATH}
Si vous préférez utiliser ~/.
au lieu de $HOMEPATH
, vous pouvez également ajouter les éléments suivants:
export HOME=${HOMEPATH}
De cette façon, je ne dérange pas l'installation de cygwin.