Windows Bash (WSL) — sudo: нет tty и не указана программа askpass

#linux #bash #ubuntu #ubuntu-16.04 #windows-subsystem-for-linux

#linux #bash #ubuntu #ubuntu-16.04 #windows-subsystem-for-linux

Вопрос:

После выполнения этого руководства я получаю следующую ошибку при попытке запустить команды от имени пользователя или даже sudo:

sudo: нет tty и не указана программа askpass

В комментариях от Lurdan в этой статье говорится, что вам нужно запустить

 sudo -S <YOUR_COMMAND>
chmod 0666 /dev/tty
 

chmod не работает, но sudo -S работает, но наверняка есть другое исправление?

Ответ №1:

Так глупо, посмотрев дальше, я вижу решение от Beorat:

Чтобы избежать проблемы с sudo tty и других, выполните эти команды непосредственно перед запуском do-release-upgrade:

 sudo -S apt-mark hold sudo
sudo -S apt-mark hold procps
sudo -S apt-mark hold strace
 

Если вы уже обновились, выполните приведенные выше команды, а затем вручную обновите до надежных пакетов:

 sudo -S wget http://mirrors.kernel.org/ubuntu/pool/main/s/sudo/sudo_1.8.9p5-1ubuntu1.1_amd64.deb
sudo -S wget http://mirrors.kernel.org/ubuntu/pool/main/p/procps/procps_3.3.9-1ubuntu2_amd64.deb
sudo -S wget http://mirrors.kernel.org/ubuntu/pool/main/s/strace/strace_4.8-1ubuntu5_amd64.deb
sudo -S dpkg -i sudo_1.8.9p5-1ubuntu1.1_amd64.deb
sudo -S dpkg -i procps_3.3.9-1ubuntu2_amd64.deb
sudo -S dpkg -i strace_4.8-1ubuntu5_amd64.deb
 

Дополнительная информация здесь: https://github.com/Microsoft/BashOnWindows/issues/482

Комментарии:

1. К вашему сведению, sudo место загрузки в настоящее время выдает 404.

2. В URL-адресе пакета sudo измените 1ubuntu1.1_ на 1ubuntu1_, чтобы исправить 404.

3. При установке procps я получил сообщение об ошибке libprocps3. Это исправило это: sudo -S wget http://mirrors.kernel.org/ubuntu/pool/main/p/procps/libprocps3_3.3.9-1ubuntu2_amd64.deb; sudo -S dpkg -i libprocps3_3.3.9-1ubuntu2_amd64.deb

Ответ №2:

WSL использует исполняемый файл lxrun для управления из Windows:

lxrun -h

 Usage:
    /install - Installs the subsystem
        Optional arguments:
            /y - Do not prompt user to accept
    /uninstall - Uninstalls the subsystem
        Optional arguments:
            /full - Perform a full uninstall
            /y - Do not prompt user to accept
    /setdefaultuser - Configures the subsystem user that bash will be launched as. If the user does not exist it will be created.
        Optional arguments:
            username - Supply the username
            /y - If username is supplied, do not prompt to create a password
    /update - Updates the subsystem's package index
 

Учитывая это, вы можете использовать lxrun /setdefaultuser root . Просто подумал, что я укажу на эту сторону, поскольку это было необходимо, когда я столкнулся с той же проблемой, что и вы, после попытки обновления до Ubuntu. Я могу подтвердить, что при выполнении этой команды, а затем команд wget / dpkg мои проблемы были решены.

Команды, которые я использовал:

 wget http://mirrors.kernel.org/ubuntu/pool/main/s/sudo/sudo_1.8.9p5-1ubuntu1.4_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/main/p/procps/procps_3.3.9-1ubuntu2_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/main/s/strace/strace_4.8-1ubuntu5_amd64.deb
dpkg -i sudo_1.8.9p5-1ubuntu1.4_amd64.deb
dpkg -i procps_3.3.9-1ubuntu2_amd64.deb
dpkg -i strace_4.8-1ubuntu5_amd64.deb
 

Наконец, вам может потребоваться выполнить sudo apt-get install -f , если вы получите The following packages have unmet dependencies [xxx] but it is not going to be installed

Комментарии:

1. Это сработало отлично. Я столкнулся с этой проблемой после выполнения do-release-upgrade . После запуска lxrun /setdefaultuser root я мог бы открыть оболочку bash и запустить visudo , чтобы вернуть моей учетной записи пользователя привилегии sudo. После этого я вернулся к powershell и запустил lxrun /setdefaultuser <user> , и теперь я вернулся к настройке, которая у меня была до do-release-upgrade .

2. @Jake Можете ли вы объяснить, как вы предоставили привилегии sudo своей учетной записи пользователя? Я сделал my_user ALL=(ALL:ALL) ALL

3. На самом деле это работает лучше, если вы делаете это в обратном порядке после wget, вам даже не нужно менять пользователя по умолчанию из lxrun.

Ответ №3:

Я избавился от ошибки, переместив /etc/hosts в /etc/hosts.bu . После закрытия оболочки и повторного открытия /etc/hosts создается заново и добавляется имя вашего компьютера. Ошибка исчезла (для меня.)