Ändern des HOME für Cygwin

Ändern des HOME für Cygwin

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_shellOption /bin/shals Experiment auf „nur“ zu ändern, aber die Shell hat sich nicht geändert.

In früheren Fragen in StackExchange wurde vorgeschlagen, die /etc/passwdDatei zu ändern. Ich konnte dies erst zum Laufen bringen, nachdem ich einen Codeblock auskommentiert hatte, /etc/profileder automatisch das HOME-Verzeichnis erstellte. Und dann, nach einiger Zeit, ging es zurück zum alten HOME.

Übersehe ich etwas in der /etc/nsswitch.confDatei? 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.confEinstellung zu überschreiben:

  1. Führen Sie das Dienstprogramm von Cygwin aus mkpasswd, das entweder aus den SAM- oder AD-Benutzerinformationsdatenbanken generiert /etc/passwd. /etc/groupDieser Mechanismus istveraltet, und sollte nur auf älteren Cygwin-Installationen oder für spezielle Zwecke verwendet werden.

  2. 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.confsteuern, wie Cygwin damit interagiert.

Antwort2

Als ich Probleme mit einem remote gemounteten Home-Verzeichnis hatte, habe ich die Funktion „Netzlaufwerk zuordnen“ verwendet und My Documentswurde so einem Laufwerksbuchstaben zugeordnet, z. B. U:\. Daraus U:\wird ein Alias ​​für My Documents. Dann habe ich es /etc/passwdso bearbeitet, dass auf ~verweist /cygdrive/u, und dann hat alles funktioniert.

Dies kann auch mit lokalen Verzeichnissen durchgeführt werden, aber dann substmuss der Befehl cmd.exezum Erstellen des Alias ​​anstelle von „Netzlaufwerk verbinden“ verwendet werden. „Netzlaufwerk verbinden“ ist permanent, aber substnicht, daher muss ein Skript, das dies bei jedem Start ausführt, im Windows-Ordner abgelegt werden Start.

verwandte Informationen