Ich versuche, das Home-Verzeichnis für Cygwin auf einem Computer bei der Arbeit zu ändern. Unsere Home-Verzeichnisse sind standardmäßig einer Netzwerkfreigabe zugeordnet. Dies scheint für Cygwin etwas Verwirrung zu stiften, da es ein Verzeichnis auf meinem Desktop erstellt, das demselben Pfad folgt wie die Netzwerkfreigabe, mit einem anderen Präfix, je nachdem, von wo aus ich Cygwin öffne.
Wenn ich Cygwin über die bei der Installation erstellte Standardverknüpfung öffne:
$ echo $HOME
/cygdrive/c/Users/shaun/Desktop/SERVER/USERS:USERS/SHAUN
Wenn ich Cygwin von PowerShell aus öffne:
$ echo $HOME
/usr/bin/SERVER/USERS:USERS/SHAUN
Ich möchte mein Home-Verzeichnis lieber in einem lokalen Programmverzeichnis haben, das ich für die Verwaltung von Programmen selbst einrichte. So:
/cygdrive/c/users/shaun/apps/cygwin/home/shaun
Der bevorzugte Weg, dies zu tun,wie von cygwin empfohlen, besteht darin, einen Eintrag in vorzunehmen /etc/nsswitch.conf
. Das hier scheint zu funktionieren:
db_home: unix /%H/Apps/cygwin/home/shaun
Alle Änderungen, die ich an dieser Datei vorgenommen habe, scheinen ignoriert worden zu sein. Ich starte das Terminal neu und selbst wenn ich die Syntax absichtlich durcheinander bringe, erhalte ich keine Fehler. Einige der Optionen, die ich ausprobiert habe und die fehlgeschlagen sind:
db_home: /cygdrive/c/users/shaun/apps/cygwin/home/shaun
db_home: /%H/Apps/cygwin/home/shaun
db_home: unix /%H/Apps/cygwin/home/shaun
db_home: cygwin desc
db_home: cygwin /path /%H/Apps/cygwin/home/shaun
Ich habe den Cygwin-Prozess nach jedem Versuch neu gestartet. Ich habe auch versucht, die db_shell
Option /bin/sh
als Experiment auf „nur“ zu ändern, aber die Shell hat sich nicht geändert.
In früheren Fragen in StackExchange wurde vorgeschlagen, die /etc/passwd
Datei zu ändern. Ich konnte dies erst zum Laufen bringen, nachdem ich einen Codeblock auskommentiert hatte, /etc/profile
der automatisch das HOME-Verzeichnis erstellte. Und dann, nach einiger Zeit, ging es zurück zum alten HOME.
Übersehe ich etwas in der /etc/nsswitch.conf
Datei? Es scheint eine einfache und bequeme Möglichkeit zu sein, benutzerdefinierte Konfigurationen einzurichten. Die Alternativen scheinen veraltete Hacks zu sein, die von Cygwin nicht empfohlen werden. Wenn ich mich aber täusche, lassen Sie mich bitte wissen, welche Methode vorzuziehen ist.
Meine jetzige/etc/nsswitch.conf
# /etc/nsswitch.conf
#
# This file is read once by the first process in a Cygwin process tree.
# To pick up changes, restart all Cygwin processes. For a description
# see https://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-mapping-nsswitch
#
# Defaults:
# passwd: files db
# group: files db
# db_enum: cache builtin
# db_home: /home/%U
db_home: /cygdrive/c/users/shaun/apps/cygwin/home/shaun
# db_shell: /bin/bash
# db_gecos: <empty>
Antwort1
db_home: unix /%H/Apps/cygwin/home/shaun
Auf der Manualpage, auf die Sie verweisen, finden Sieunix
odera /path
, nicht beides zusammen.
Sofern Ihr AD-Administrator den Wert nicht für jeden Cygwin-Benutzer in Ihrer Organisation festgelegt hat unixHomeDirectory
, möchten Sie ihn nicht unix
überhaupt verwenden, sondern stattdessen den Pfad.
Ich würde eine Änderung Ihrer Angaben vorschlagen:
db_home: /%H/Apps/cygwin/home/%u
Dadurch kann die Einstellung für mehrere Benutzer auf demselben Computer verwendet werden.
Alle Änderungen, die ich an dieser Datei vorgenommen habe, wurden anscheinend ignoriert.
Es gibt zwei Möglichkeiten, die nsswitch.conf
Einstellung zu überschreiben:
Führen Sie das Dienstprogramm von Cygwin aus
mkpasswd
, das entweder aus den SAM- oder AD-Benutzerinformationsdatenbanken generiert/etc/passwd
./etc/group
Dieser Mechanismus istveraltet, und sollte nur auf älteren Cygwin-Installationen oder für spezielle Zwecke verwendet werden.Legen Sie die
%HOME%
Umgebungsvariable auf Windows-Systemebene fest.Dies überschreibt nicht nur Cygwin, sondern tut dies nur unter bestimmten Umständen, weshalb esnicht empfohlen.
Überprüfen Sie sowohl die benutzer- als auch die systemweiten Umgebungsvariablensätze, um sicherzustellen, dass dies bei Ihnen nicht passiert.
Frühere Fragen in StackExchange haben vorgeschlagen, die Datei /etc/passwd zu ändern
Sie sollten es entfernen und stattdessen das Active Directory-System Ihrer Site verwenden und dabei /etc/nsswitch.conf
steuern, wie Cygwin damit interagiert.
Antwort2
Als ich Probleme mit einem remote gemounteten Home-Verzeichnis hatte, habe ich die Funktion „Netzlaufwerk zuordnen“ verwendet und My Documents
wurde so einem Laufwerksbuchstaben zugeordnet, z. B. U:\
. Daraus U:\
wird ein Alias für My Documents
. Dann habe ich es /etc/passwd
so bearbeitet, dass auf ~
verweist /cygdrive/u
, und dann hat alles funktioniert.
Dies kann auch mit lokalen Verzeichnissen durchgeführt werden, aber dann subst
muss der Befehl cmd.exe
zum Erstellen des Alias anstelle von „Netzlaufwerk verbinden“ verwendet werden. „Netzlaufwerk verbinden“ ist permanent, aber subst
nicht, daher muss ein Skript, das dies bei jedem Start ausführt, im Windows-Ordner abgelegt werden Start
.