Windows Subsystem for Linux でホスト名を小文字にする

Windows Subsystem for Linux でホスト名を小文字にする

システムのプロパティでコンピューター名を小文字に設定しました。

システムプロパティ

cmd.exe小文字で表示されます。

コマンドプロンプト

/etc/hostnameただし、Windows 10 Bash では、ファイルが小文字に更新されているにもかかわらず、大文字で表示されます。

ここに画像の説明を入力してください

答え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

上記は基本的に、文字列 A を小文字に変換する機能PS1を使用してマシンを作成するときに、マシンの小文字名をハードコードします。問題に対するエレガントな解決策ではありませんが、これによりシェルはより通常の Linux シェルのように見えます。bash 4.0$(A,,)

答え2

編集:これは現在実装されています; システム プロパティで設定した大文字と小文字の設定が保持されるようになりました。

私も同じ問題を抱えていました。Windows 上の Bash on Ubuntu (BUW) から /etc/hostname を変更するだけではだめだということがわかりました。/etc/hostname は起動するたびに生成されるからです。BUW はコンピュータの NetBIOS 名を使用して /etc/hostname を生成するようですが、この記事は、「大文字で表され、小文字から大文字への変換アルゴリズムは OEM 文字セットに依存します。」 または を介し​​て Windows でコンピュータの名前を変更するとSettings > System > AboutControl Panel > System and Security > System大文字は保持されますが、NetBIOS 名はすべて大文字に変換されます。ただし、Windows API 関数を使用して、NetBIOS 名を小文字に変更することは可能です。SetComputerNameここに小さな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 に依存するものが壊れる可能性がある)、自己責任で使用してください。結局のところ、BUW が NetBIOS 名を使用することが意図的/必要であるかどうかはわかりません。私はそれについて尋ねましたBUW の問題追跡システムで。

あるいは、NetBIOS 名を変更したくない場合は、BUW を起動するたびにホスト名を変更するsudo hostname prophet-w10(そしてexec bashプロンプトに表示する) 方法を考案することもできます。

関連情報