Kleinbuchstaben für Hostnamen im Windows-Subsystem für Linux erzwingen

Kleinbuchstaben für Hostnamen im Windows-Subsystem für Linux erzwingen

Ich habe meinen Computernamen in den Systemeigenschaften auf Kleinbuchstaben eingestellt.

Systemeigenschaften

Darin cmd.exewird es als Kleinbuchstabe angezeigt.

cmd.exe

In Windows 10 Bash wird es jedoch in Großbuchstaben angezeigt, obwohl die /etc/hostnameDatei auf Kleinbuchstaben aktualisiert wurde.

Bildbeschreibung hier eingeben

Antwort1

Auch die Ästhetik hat mich gestört. Anstatt zu versuchen, hostnameetwas in Kleinbuchstaben zurückzugeben, habe ich einfach bashdie Anzeige der Eingabeaufforderung angegriffen. Ich habe editied .bashrc(was spezifisch für die Installation von Windows ist und daher wahrscheinlich nicht auf einem anderen Computer wiederverwendet wird) bearbeitet, um Folgendes mit der Eingabeaufforderungsvariable zu tunPS1

# Annoyingly the windows hostname is UPPERCASE which really doesn't look
# good on linux. So for this machine I'm going to grab the hostname and
# hardcode it into the prompt
HN=`hostname`
if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@${HN,,}\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@${HN,,}:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@${HN,,}: \w\a\]$PS1"
    ;;
*)
    ;;
esac

Das Obige codiert den Namen der Maschine im Wesentlichen in Kleinbuchstaben, wenn sie mithilfe der Funktion PS1erstellt wird , die die Zeichenfolge A in Kleinbuchstaben umwandelt. Dies ist zwar keine elegante Lösung des Problems, lässt die Shell jedoch wie eine normalere Linux-Shell aussehen!bash 4.0$(A,,)

Antwort2

Bearbeiten:Dies wurde nun umgesetzt; die Groß- und Kleinschreibung, die Sie in den Systemeigenschaften festgelegt haben, bleibt nun erhalten.

Ich hatte das gleiche Problem. Es stellte sich heraus, dass Sie /etc/hostname nicht einfach in Bash unter Ubuntu unter Windows (BUW) ändern können, da /etc/hostname bei jedem Start generiert wird. BUW scheint den NetBIOS-Namen Ihres Computers zu verwenden, um /etc/hostname zu generieren, was lautDieser Artikel, wird „in Großbuchstaben dargestellt, wobei der Übersetzungsalgorithmus von Kleinbuchstaben in Großbuchstaben vom OEM-Zeichensatz abhängig ist.“ Wenn Sie Ihren Computer in Windows über Settings > System > Aboutoder umbenennen Control Panel > System and Security > System, behält er die Groß- und Kleinschreibung bei, aber der NetBIOS-Name wird komplett in Großbuchstaben umgewandelt. Allerdings ist es möglich, den NetBIOS-Namen mithilfe der Windows-API-Funktion in Kleinbuchstaben zu ändern.SetComputerName. Hier ist ein kleines C-Programm (Nicht-Unicode), das den NetBIOS-Namen als erstes Argument festlegt (erfordert Administratorrechte):

#define _WIN32_WINNT 0x0500
#include <sdkddkver.h>
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <stdio.h>

int main(int argc, char **argv) {
    if (argc != 2) {
        fprintf(stderr, "Usage: %s <New NetBIOS name>\n", argv[0]);
        return 1;
    }

    if (SetComputerNameA(argv[1]) == 0) {
        LPSTR error_message = NULL;
        DWORD error_code = GetLastError();
        FormatMessageA(
            FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL,
            error_code,
            0,
            (LPSTR)&error_message,
            0,
            NULL
        );

        fprintf(stderr, "SetComputerNameA error (%lu)", error_code);
        if (error_message != NULL) {
            fprintf(stderr, ": %s", error_message);
            LocalFree(error_message);
        }
        fprintf(stderr, "\n");
        return 2;
    }
    else {
        printf("NetBIOS name set to \"%s\"\n", argv[1]);
        return 0;
    }
}

Verwenden Sie es auf eigenes Risiko, da ich nicht ganz sicher bin, ob ein NetBIOS-Name, der nicht aus Großbuchstaben besteht, nachteilige Auswirkungen hat (er könnte Dinge beschädigen, die auf DnsHostnameToComputerName angewiesen sind). Letztendlich bin ich mir nicht sicher, ob es beabsichtigt/notwendig ist, dass BUW den NetBIOS-Namen verwendet;Ich habe danach gefragtim Issue-Tracker der BUW.

Wenn Sie den NetBIOS-Namen nicht ändern möchten, können Sie alternativ eine Möglichkeit finden, den Hostnamen bei jedem Start von BUW zu ändern sudo hostname prophet-w10(und exec bashihn dann in der Eingabeaufforderung anzuzeigen).

verwandte Informationen