#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 создается заново и добавляется имя вашего компьютера. Ошибка исчезла (для меня.)