LINUX.ORG.RU
ФорумJob

Заказываю программу по определению свежести драйвера видеокарты


0

3

Мне нужен сишный программный код, работающий по следующему алгоритму.

1). Определяем что вендор видеокарты - NVIDIA.

2). Смотрим версию установленного драйвера.

3). Смотрим серию карточки, определяем версию драйвера для неё: 7x.xx, 9x.xx, 173.xx, 304.xx, 340.xx или последняя.

4). Парсим http://www.nvidia.com/object/unix.html или ftp://download.nvidia.com/XFree86/Linux-x86_64/, чтобы узнать новую версию.

5). Если установлена последняя версия, выдаём сообщение. Если есть версия новее, запоминаем её.

6). Смотрим пакет в репозитории Ubuntu http://archive.ubuntu.com/. Если есть новее, выдаём окно по типу этого.

7). Смотрим пакет в двух-трёх репозиториях PPA. Если есть новее, выдаём ссылку на PPA и на инструкцию по добавлению его в систему.

8). Результат работы программы может выглядеть так:

Последняя версия: 346.16
Установленная версия: 331.31
Доступна в PPA: 340.58

Дальше я сам добавлю поддержку других дистрибутивов Linux и их репозиториев.

Опционально:

9). Смотрим версию ядра и иксов, чтобы выдать сообщение о том что они слишком новые для Legacy-версии драйверов 7x.xx и 9x.xx.

10). Тест на дебильность по ссылке на установку из run-файла, можно в виде HTML-странички в юзерспейсе или в интернете. «Что делает команда ls?» и 4 варианта ответа. По результатам теста из нескольких вопросов, выдаётся результат «Вам ни в коем случае не стоит устанавливать драйвер вручную» или инструкция по установке и последующего удаления драйвера.

★★★★★

Последнее исправление: ZenitharChampion (всего исправлений: 10)

Такое обычно на каком нибудь перле или питоне делают, почему такой странный выбор яп? просто интересно.

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

Перл и питон есть не на всех системах. Если через bash, то на конечном компе тоже может оказаться что-нибудь вроде glxinfo: no such file or directory.

ZenitharChampion ★★★★★
() автор топика
Ответ на: комментарий от ZenitharChampion

Для сишной софтины придется делать отдельный файл с конфигом в котором будут всякие адреса репозиториев и сайтов для парсинга чтоб их менять можно было. Либо хардкодить, но тогда придется перекомпилировать при каждом изменении, а если исходники потеряются то вообще писать с 0.

TDrive ★★★★★
()
Ответ на: комментарий от ZenitharChampion

Перл и питон есть не на всех системах.

Если у тебя парк машин то имеет смысл сделать софтину которая будет по списку подключаться по ssh и собирать версии драйвера со всех машин.

TDrive ★★★★★
()

Ubuntu тебе сама предложит установить нужные блобы. А если ты хочешь новей, то ты уже сам разберешься как их ставить на свой страх и риск. Логика такая.

anonymous_sama ★★★★★
()
Ответ на: комментарий от TDrive

Хорошо, признаюсь. Я решил выпендриться и закоммитить коммит в Steam. «Вот, смотрите, я придумал креативное решение для вашей неработающей кнопки „Проверка новой версии драйвера видеокарты...“, я Think different, и вообще линуксоиды крутые ребята!». Проблема в том что я писать код не умею, но вижу идеальную отработку этой кнопки такой. Я могу расширить готовый код вариантами AMD Catalyst, AMD Radeon (Open Source) и Intel, а также проверку репозиториев других дистрибутивов Linux (/etc/lsb-release).

ZenitharChampion ★★★★★
() автор топика
Последнее исправление: ZenitharChampion (всего исправлений: 2)
Ответ на: комментарий от anonymous_sama

Да зачем в tty - sh NVIDIA-Linux-x86_64-304.123.run --no-x-check для установки, sh NVIDIA-Linux-x86_64-304.123.run --uninstall для удаления.
С Catalyst ещё проще - sh amd-catalyst-13.9-linux-x86.x86_64.run --buildpkg Ubuntu/trusty && rm -rf *dbg* && sudo dpkg -i *.deb

ZenitharChampion ★★★★★
() автор топика
Последнее исправление: ZenitharChampion (всего исправлений: 2)
Ответ на: комментарий от ZenitharChampion

Под Ubuntu вообще лучше из run'ов не ставить, а традиционно используют пакет nvidia нужной версии из xorg-edgers. Задержка в него максимум два дня, с момента выхода run'а.

anonymous_sama ★★★★★
()
Последнее исправление: anonymous_sama (всего исправлений: 1)
Ответ на: комментарий от anonymous_sama

Моя 12.04 там не поддерживается :-( Устанавливаю с релиза 7.10, ни разу не имел проблем. А с тех пор как в 2011 году добавили поддержку DKMS, вообще замечательно стало!

ZenitharChampion ★★★★★
() автор топика
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от ZenitharChampion

Меняешь версию на trusty и все. Ставишь только нужный пакет nvidia. Потом комментируешь и все. Ну или качаешь дебку напрямую и ставишь. А если у тебя еще и ядро от trusty стоит и весь HW stack включая месу, по идеи ты не сильно от нее и отличаешь.

anonymous_sama ★★★★★
()
Ответ на: комментарий от ZenitharChampion

Например вот способ определить NVIDIA с помощью glxinfo и без: glxinfo | grep -q -i NVIDIA, xdpyinfo | grep -q -i NV-GLX

определить NVIDIA можно с помощью вендор-айди : 0x10DE

anTaRes ★★★★
()

Ты хочешь ставить блоб в обход пакетного менеджера? Ну-ну.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от ZenitharChampion

Этот способ годится только если у тебя иксы есть. И они работают. И у тебя настроен OpenGL (ну, в принципе, это автоматом при установке блоба происходит).

В общем, если нет иксов или просто не установлен блоб, то хрен ты что таким образом получишь!

Eddy_Em ☆☆☆☆☆
()

Посмотрел я в PPA версии драйверов, и для половины версий нет. Поэтому не думаю, что использовать PPA есть хорошо.

Мне было скучно, и я накостылил:

λ> ./update_nvidia.py
Последняя версия: 295.75
Установленная версия: 295.41
Доступна новая версия драйвера. Скачать? y/n
y
--2014-11-21 11:26:42--  ftp://download.nvidia.com/XFree86/Linux-x86_64/295.75/NVIDIA-Linux-x86_64-295.75.run
           => «NVIDIA-Linux-x86_64-295.75.run»
Распознаётся download.nvidia.com (download.nvidia.com)... %                                                                                                              
#!/usr/bin/env python3

from subprocess import getstatusoutput, Popen

"""
Проверка является ли производителем видеокарты NVIDIA.

@return true/false
"""
def nvidia_card_p():
    return 0 == getstatusoutput("lspci |grep -i nvidia |grep -i vga")[0]

"""
Получить последнюю доступную для загрузки версию драйвера.

@param card_ver [in] -- версия карты вида <340>

@return число вида <340.58>
"""
def get_latest_driver_version(card_ver):
    _, output = getstatusoutput(
        "links -dump ftp://download.nvidia.com/XFree86/Linux-x86_64/ "
        + " | grep " + str(card_ver) + " | awk '{print $9}' | sort")
    return float(output.splitlines()[-1])

"""
Получить версию установленного драйвера.
У самого карта ATI, поэтому писал по выводу утилиты с stackoverflow :3

@return число вида <295.41>
"""
def get_local_driver_version():
    _, output = getstatusoutput("nvidia-smi |grep Driver | awk '{print $6}'")
    return float(output)

if __name__=='__main__':
    local_drv_ver = get_local_driver_version()

    # Из версии установленного драйвера выдираем серию
    card_ver = int(local_drv_ver) # 295.41 -> 295

    latest_drv_ver = get_latest_driver_version(card_ver)

    print("Последняя версия: " + str(latest_drv_ver))
    print("Установленная версия: " + str(local_drv_ver))
    if (latest_drv_ver == local_drv_ver):
        print("Установлена последняя версия драйвера.")
    else:     
        while True:
            print("Доступна новая версия драйвера. Скачать? y/n")
            user_input = input()
            if user_input == "y":
                Popen(["wget", "ftp://download.nvidia.com/XFree86/Linux-x86_64/"
                       + str(latest_drv_ver) + "/NVIDIA-Linux-x86_64-"
                       + str(latest_drv_ver) + ".run"])
                break
            elif user_input == "n":
                break
Deleted
()
Ответ на: комментарий от Deleted

Спасибо!

zenitur@linux-athlon64:~> python 123.sh
  File "123.sh", line 6
SyntaxError: Non-ASCII character '\xd0' in file 123.sh on line 7, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

zenitur@linux-athlon64:~> python3 123.sh
Traceback (most recent call last):
  File "123.sh", line 42, in <module>
    latest_drv_ver = get_latest_driver_version(card_ver)
  File "123.sh", line 24, in get_latest_driver_version
    return float(output.splitlines()[-1])
ValueError: could not convert string to float: 'FTP file error'

Что ж, начало положено. Буду переносить это дело на Python 2, и добавлять правила для Legacy-версий видеокарт. У меня их много: NVIDIA GeForce 9800GT и 7800GT, есть на чём проверить.

ZenitharChampion ★★★★★
() автор топика
Ответ на: комментарий от ZenitharChampion

Перл и питон есть не на всех системах

Владельцам тех систем, где нет перла, программа для определения версии драйвера уж точно не нужна. Во всех остальных перл является пакетом базовой системы.

redgremlin ★★★★★
()
Ответ на: комментарий от ZenitharChampion

Перл и питон есть не на всех системах.

Перл точно не во всех (но когда начинаешь устанавливать программы, кто-то обязательно его подтянет), а вот питон во всех.

Deleted
()
Ответ на: комментарий от Deleted

И в LFS присутствует, так что вряд ли хоть где-то в обычном дистре его нет, только всякие минимальные/ембед спецдистры.

redgremlin ★★★★★
()

Гениально. Мне очень нравится идея.

YLoS ★★★
()

Никогда не понимал тех чертей, что не могут осилить простейшие вещи в этих ваших линуксах, но ставят, ставят, ставят, хотят играться, ставят стим, лезут на форумы, когда грузятся в tty...

Доколе?! Сидите на своей маздайке дальше, не портите нам воздух!

unt1tled ★★★★
()

Sgfxi уже давно написали.

Polugnom ★★★★★
()
Ответ на: комментарий от anonymous_sama

> Под Ubuntu вообще лучше из run'ов не ставить, а традиционно используют пакет nvidia нужной версии из xorg-edgers. Задержка в него максимум два дня, с момента выхода run'а.

Дополню свой ответ. Читая Overclockers.ru и другие сайты об IT, я часто вижу новости про драйверы. В новостях про драйверы - исправления для конкретных игр. Давай представим что в Linux тоже это будет.

И вот выходит GTA 6 для Linux, NVIDIA и AMD сразу выпускают обновлённые версии драйверов. Все сразу покупают игру, и у них «мыльные» текстуры. Нужно обновить драйверы... И тут проблема: в PPA старое, в репозитории дистрибутива вообще старое - что остаётся? Только установка из RUN-файла. Проверялка версии драйвера в Steam должна сообщить что новый драйвер есть, предупредить что для его установки потребуются навыки продвинутого пользователя, и показать инструкцию. А не врать что «Установлена последняя версия драйвера».

ZenitharChampion ★★★★★
() автор топика
Ответ на: комментарий от ZenitharChampion

На практике, я наблюдал задержку в два дня один раз. Обычно часов 6 и до суток. В любом случае простые юзеры, те что в игры играют так часто не обновляются, тем более вручную.

anonymous_sama ★★★★★
()
Ответ на: комментарий от ZenitharChampion

Хитренький =)

Выёживайся за свой счёт, пжалста. А то насмотрелся я на таких хитрованов достаточно. «Мы пахали, я и трактор» =)))

Deleted
()

В жабере-то авторизуй.

svr4
()

6). Смотрим пакет в репозитории Ubuntu http://archive.ubuntu.com/. Если есть новее, выдаём окно по типу этого.
7). Смотрим пакет в двух-трёх репозиториях PPA.

подключи PPA, автообновлялку (update-notifier) включи, остальное не нужно, велосипедист

amorpher ★★★★★
()
Ответ на: комментарий от Eddy_Em

Он же для стима хочет. Ессно там установлены иксы и opengl.

NeverLoved ★★★★★
()
Ответ на: комментарий от Dron

Потому что традиции нарушать нехорошо

pylin ★★★★★
()
Ответ на: комментарий от Deleted

Перл точно не во всех (но когда начинаешь устанавливать программы, кто-то обязательно его подтянет), а вот питон во всех.

Чо?

CYB3R ★★★★★
()
Ответ на: комментарий от ZenitharChampion

Буду переносить это дело на Python 2

Но зачем?

CYB3R ★★★★★
()
Ответ на: комментарий от CYB3R

Уже кто-то взялся писать?

да, вальвэ
изначально на питоне запиплил:

~/.steam/bin/driverhelper.py

только внутрях можно заметить вызовы:
/usr/bin/jockey-gtk
/usr/bin/update-manager
/usr/bin/software-properties-gtk
/sbin/modprobe
ну и import apt, aptsources.distro, aptsources.sourceslist

ткчто по понятным причинам не у всех работает

anTaRes ★★★★
()
Последнее исправление: anTaRes (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.