В системе GNU изучите аргумент - разделитель
для xargs
. Поскольку ваш ввод разделен символами новой строки, вам не нужно вообще полагаться на цитирование или использовать какие-либо дополнительные инструменты:
cat files.txt | xargs --delimiter=\\n printf "<%s>"
Где files.txt
содержит ваш ввод:
line number 1
line number 2
line number 3
Дает результат:
<line number 1><line number 2><line number 3>
NB: вам не нужно сохранять введенные вами данные в файл и использовать cat
; Вы, конечно, можете передавать данные напрямую из другой программы. Я использовал cat
в своем примере из-за его повсеместного распространения и полезности для создания таких автономных примеров, как этот.
Еще лучше (и рекомендуется в руководстве xargs
), чтобы ваша программа вывода разделяла записи NUL ( \ 0
) вместо новой строки и использовала - параметр null
вместо - разделитель
, но до тех пор, пока ваши входные строки никогда не будут содержать символы новой строки, вы в порядке с вышеуказанным подходом.
Я полагаю, вы хотите остановить диспетчер отображения, который, как я подозреваю, будет использовать драйверы Nvidia.
После перехода на текстовую консоль (, нажав Ctrl + Alt + F2)и войдя в систему как root, используйте следующую команду, чтобы отключить графический target, который поддерживает работу диспетчера дисплеев:
# systemctl isolate multi-user.target
На данный момент я ожидаю, что вы сможете выгрузить драйверы Nvidia, используяmodprobe -r
(или rmmod
напрямую):
# modprobe -r nvidia-drm
После того, как вам удалось заменить/обновить его и вы готовы снова запустить графическую среду, вы можете использовать эту команду:
# systemctl start graphical.target
lsof
перечисляет все файлы, которые используются процессами пользовательского пространства. Но nvidia_drm
— это модуль ядра, поэтому lsof
не обязательно будет видеть, используется ли он на самом деле. (Файл модуля не будет открыт, так как ядро уже полностью загрузило его в оперативную память. Но модуль может предоставлять услуги пользовательскому пространству или другим компонентам ядра, и это предотвращает выгрузку модуля.)
Запустите lsmod | grep nvidia.drm
и посмотрите цифры справа от имени модуля nvidia_drm
. Первое число — это просто размер модуля; второй - количество использований. Чтобы успешно удалить модуль, счетчик использования должен быть сначала равен 0.
Если сервер X11 работает и использует драйвер nvidia
, то наверняка будет использоваться модуль ядра nvidia_drm
. Так что вам нужно, по крайней мере, переключиться на текстовую консоль и выключить сервер X11. Обычно это можно сделать, остановив используемую вами службу X Display Manager (, в зависимости от того, какую среду рабочего стола вы используете ).
Как сказано в сообщении об ошибке, если вы используете nvidia-persistenced
, вам также необходимо остановить его, прежде чем вы сможете выгрузить модуль nvidia_drm
.
Возникла та же проблема с Debian Stretch при попытке установить драйверы Nvidia. В текстовом моде моим единственным решением было удалить драйвер, переустановить gdm и оболочку gnome -. Я знаю, что это неуклюжее решение, но я помню, что сначала попытался исправить оболочку gnome -, удалив только драйвер Nvidia и переустановив GDM. Оказалось, что гораздо проще просто переустановить всю оболочку.
В комментариях вы сообщаете, что остановка службы systemd -logind возвращает вас к графическому логину. Если у вас есть графический вход в систему, то X работает, поэтому видеодрайвер загружен и используется. Вероятно, это частично объясняет, почему используется модуль nvidia -drm.
Кроме того, вы выдаете очевидное заблуждение, когда говорите
I have rebooted and started in text-only mode (by pressing Ctrl+Alt+F2 before giving username/password), but I got the same error.
Нажатие Ctrl+Alt+F2 переключает на виртуальный терминал #2, который вполне может быть настроен для входа в текстовый -режим, но это далеко от «запуска в текстовом режиме». Если у вас был графический экран входа в систему на виртуальном терминале по умолчанию, то X работает, и переключение на другой VT не меняет этого. Вы просто входите в не -X сеанс.
Первое и самое простое, что можно сделать, это отключить X-сервер. Старый -школьный способ сделать это — войти в сеанс текстового -режима и выполнить команду
telinit 3
для переключения на уровень запуска 3. Это также должно работать с systemd, но вместо этого вместо этого будет запускаться собственный способ systemd
systemctl isolate multi-user.target
Конечно, оба из них требуют привилегий, поэтому вам нужно будет использовать sudo
или сделать себя root.
Если это не приведет к удалению модуля или, по крайней мере, позволит вам сделать это вручную, то следующим лучшим вариантом будет загрузка системы непосредственно на уровень запуска 3 (многопользовательская -цель пользователя )или, может быть, даже на уровне выполнения 1 (спасательная цель ).Я обычно делаю это, добавляя «3» (или «1» )в конец списка аргументов ядра во время загрузки через загрузчик. Вы также можете изменить цель загрузки по умолчанию, как описано в этой статье .
Также обратите внимание, что драйвер nVidia доступен в предварительно -собранных пакетах для большинства дистрибутивов Linux. Немногие включают эти пакеты в свои собственные стандартные репозитории, потому что драйвер, в конце концов, проприетарный, но вы наверняка можете найти авторитетный сторонний репозиторий -, в котором он есть. Я настоятельно рекомендую использовать такие пакеты вместо того, чтобы запускать установщик напрямую, но чтобы перейти туда, где вы сейчас находитесь, вам может потребоваться сначала вручную удалить драйвер.
У меня была похожая проблема.
*Reason: nvidia.drm package was in use
Я исправил это, очистив все пакеты NVIDIA.
Удалите все предыдущие установки NVIDIA с помощью этих двух команд:
$ sudo apt-get purge nvidia*
$ sudo apt-get autoremove
Модуль следует удалить.
Перезагружаемся и вперед.
Я также столкнулся с той же проблемой. Причиной ошибки было то, что я случайно выбрал «Установить драйвер nvidia» во время установки cuda.
Итак, во время установки CUDA при появлении следующих опций:
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81? (y)es/(n)o/(q)uit:
Пожалуйста, выберите q , проблема будет решена.
мне помогло изменить систему, чтобы начать в тексте дальше
systemctl set-default runlevel3.target
затем перезапустите и установите драйвер nvidia cuda. после завершения вы можете изменить систему, чтобы снова запустить в графическом режиме
systemctl set-default runlevel5.target
1 )Загрузите последнюю версию CUDA Toolkit
2 )Переключитесь на tty3, нажав Ctl+Alt+F3
3 )Перед продолжением выгрузите nvidia -drm.
3a )Изолировать несколько -user.target
sudo systemctl isolate multi-user.target
3b )Обратите внимание, что в настоящее время используется nvidia -drm.
lsmod | grep nvidia.drm
3c )Выгрузить nvidia -дрм
sudo modprobe -r nvidia-drm
4d )Обратите внимание, что nvidia -drm больше не используется.
lsmod | grep nvidia.drm
5 )Перейдите в папку загрузки и запустите установку cuda.
sudo sh cuda_10.1.168_418.67_linux.run
6 )Ответьте на любые запросы во время установки.
7 )После завершения установки убедитесь, что версия CUDA обновлена.
nvidia-smi
8 )Снова запустите графический интерфейс.
sudo systemctl start graphical.target
Я решил эту проблему, отключив графический интерфейс, перезагрузив компьютер, войдя в систему и установив драйвер, включив графический интерфейс и перезагрузив компьютер.
Убедитесь, что вы знаете имя пользователя и пароль!!!
Откройте терминал и напишите
sudo systemctl set-default multi-user.target
sudo reboot 0
Теперь войдите в систему, и вы попадете прямо в терминал, установите драйвер. Обратите внимание, что здесь я устанавливаю 440.44 , поэтому вам нужно изменить версию драйвера .
sudo./NVIDIA-Linux-x86_64-440.44.run
После установки драйвера включите графический интерфейс и выполните перезагрузку:
sudo systemctl set-default graphical.target
sudo reboot 0
Вы должны закончить
В моем случае nvidia -smi сообщила о новой версии 440.44, но в Ubuntu 18.04 Software & Updates Utilities на вкладке «Дополнительные драйверы» отображается 435!! Еще одна загадка NVIDIA, но, черт возьми, мой новый докер работает!!!
Принятый ответ filbranden привел меня в правильном направлении, но не совсем сработал для меня (кажется, что по крайней мере nouveau
драйвер всегда был загружен и вызывал проблемы ).
Однако у меня сработало (, как показано здесь более подробно ), была временная загрузка в консольном режиме (текстовом режиме ). Это, казалось, гарантировало, что драйвер nvidia
или nouveau
не загружен.
Затем я последовал ответу @filbrandens для остановки/удаления nvidia-drm
, а затем установил оттуда драйвер nvidia
и перезагрузил систему. В последнем, возможно, не было необходимости, но, поскольку он работал, я перечислил его здесь.
Дополнительный ответ для тех, кто столкнулся с этой проблемой.
Мне нужно переключить драйвер, чтобы он был не Nvidia, для программного обеспечения и обновления, затем перезагрузить компьютер и выполнить установку снова.