Принудительное использование строчных имен хостов в подсистеме Windows для Linux

Принудительное использование строчных имен хостов в подсистеме Windows для Linux

В свойствах системы я установил имя компьютера строчными буквами.

Свойства системы

В cmd.exeнем он отображается строчными буквами.

cmd.exe

Однако в Windows 10 Bash он отображается как заглавный, хотя файл /etc/hostnameбыл обновлен и теперь имеет строчные буквы.

введите описание изображения здесь

решение1

Эстетика этого тоже меня раздражала. Вместо того, чтобы пытаться hostnameвернуть что-то в нижнем регистре, я просто атаковал то, как bashотображалась подсказка. Я отредактировал .bashrc(что специфично для установки Windows и, следовательно, вряд ли будет повторно использоваться на другом компьютере), чтобы сделать следующее с переменной подсказкиPS1

# 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

Вышеуказанное по сути жестко кодирует имя машины в нижнем регистре PS1при ее создании с помощью bash 4.0функции, которая $(A,,)преобразует строку A в нижний регистр. Хотя это и не элегантное решение проблемы, это делает оболочку похожей на более обычную оболочку Linux!

решение2

Редактировать:Теперь это реализовано.; теперь заглавные буквы, установленные вами в свойствах системы, будут сохранены.

У меня была та же проблема. Оказывается, вы не можете просто изменить /etc/hostname из Bash на Ubuntu на Windows (BUW), потому что /etc/hostname генерируется каждый раз, когда вы его запускаете. BUW, похоже, использует имя NetBIOS вашего компьютера для генерации /etc/hostname, который, согласноЭта статья, "представлен в верхнем регистре, где алгоритм перевода из нижнего регистра в верхний зависит от набора символов OEM". Когда вы переименовываете свой компьютер в Windows через Settings > System > Aboutили Control Panel > System and Security > System, он сохраняет заданный вами регистр, но имя NetBIOS преобразуется в заглавные буквы. При этом можно изменить имя NetBIOS на строчное, используя функцию Windows APISetComputerName. Вот небольшая программа на языке C (не-Юникод), который устанавливает имя NetBIOS в качестве первого аргумента (требуются права администратора):

#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;
    }
}

Используйте его на свой страх и риск, так как я не совсем уверен, что наличие имени NetBIOS без заглавных букв имеет какие-либо неблагоприятные последствия (оно может сломать то, что зависит от DnsHostnameToComputerName). В конечном счете, я не уверен, является ли использование имени NetBIOS намеренным/необходимым для BUW;Я спросил об этомв системе отслеживания проблем BUW.

В качестве альтернативы, если вы не хотите менять имя NetBIOS, вы можете придумать способ изменять имя хоста каждый раз при запуске BUW sudo hostname prophet-w10(а затем exec bashзаставить его отображаться в приглашении).

Связанный контент