--- jockey-0.9.7.orig/po/zh_HK.po +++ jockey-0.9.7/po/zh_HK.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-12-28 18:53+0000\n" "Last-Translator: Anthony Wong \n" "Language-Team: Chinese (Hong Kong) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: zh_HK\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -524,7 +523,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA 影像加速驅動程式" --- jockey-0.9.7.orig/po/nl.po +++ jockey-0.9.7/po/nl.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2010-08-26 09:34+0000\n" "Last-Translator: Bert de Bruijn \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: nl\n" #: ../text/jockey-text.py:72 @@ -42,12 +42,9 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" -"Kan geen verbinding maken met D-BUS,\"+ \" gebruik als root de optie --no-" -"dbus om\"+ \" jockey zonder D-BUS te gebruiken." #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -587,7 +584,7 @@ "Om stuurprogramma's voor apparaten te installeren of te verwijderen is " "authenticatie vereist." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Grafisch versneld stuurprogramma van NVIDIA" --- jockey-0.9.7.orig/po/oc.po +++ jockey-0.9.7/po/oc.po @@ -9,15 +9,15 @@ msgstr "" "Project-Id-Version: po_jockey-oc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-12-03 14:29+0000\n" "Last-Translator: Cédric VALMARY (Tot en òc) \n" "Language-Team: Occitan (lengadocian) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: \n" #: ../text/jockey-text.py:72 @@ -44,9 +44,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -509,6 +508,10 @@ "\n" "This should help you use Ubuntu in your VM." msgstr "" +"Installatz las aisinas e pilòts pel client VMWare per vòstra installacion " +"d'Ubuntu basada sus VMWare.\n" +"\n" +"Aquò vos deuriá ajudar a utilizar Ubuntu dins vòstra Maquina Virtuala (MV)." #: ../backend/jockey-backend.py:32 msgid "Enable debugging messages." @@ -545,7 +548,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:2 msgid "To query the device drivers, you need to authenticate." -msgstr "" +msgstr "Vos cal vos autentificar per far la lista dels pilòts de periferics." #: ../backend/com.ubuntu.devicedriver.policy.in.h:3 msgid "" @@ -554,7 +557,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:4 msgid "To check the driver status, you need to authenticate." -msgstr "" +msgstr "Vos cal vos autentificar per verificar l'estat del pilòt." #: ../backend/com.ubuntu.devicedriver.policy.in.h:5 msgid "" @@ -566,6 +569,8 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:6 msgid "To query the driver databases for updates, you need to authenticate." msgstr "" +"Vos cal vos autentificar per recercar de mesas a jorn dins las bancas de " +"donadas de pilòts." #: ../backend/com.ubuntu.devicedriver.policy.in.h:7 msgid "Install or remove device drivers" @@ -574,8 +579,9 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:8 msgid "To install or remove device drivers, you need to authenticate." msgstr "" +"Vos cal vos autentificar per installar o suprimir de pilòts de periferics." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Pilòt d'acceleracion grafica NVIDIA" --- jockey-0.9.7.orig/po/nb.po +++ jockey-0.9.7/po/nb.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2010-06-07 10:26+0000\n" "Last-Translator: Frode Egeland \n" "Language-Team: Norwegian Bokmål \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: \n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -520,7 +519,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA aksellerert grafikkdriver" --- jockey-0.9.7.orig/po/ar.po +++ jockey-0.9.7/po/ar.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2010-06-25 00:31+0000\n" "Last-Translator: Magd Addin M. Almuntaser \n" "Language-Team: Arabic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:17+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: ar\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -544,7 +543,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "تعريف بطاقات NVIDIA الرسومية" --- jockey-0.9.7.orig/po/nn.po +++ jockey-0.9.7/po/nn.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2009-02-24 10:38+0000\n" "Last-Translator: Odin Hørthe Omdal \n" "Language-Team: Norwegian Nynorsk \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: nn\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -523,7 +522,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA akselerert grafikkdrivar" --- jockey-0.9.7.orig/po/af.po +++ jockey-0.9.7/po/af.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2010-07-21 15:17+0000\n" "Last-Translator: Arthur Rilke \n" "Language-Team: Afrikaans \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:17+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: af\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -520,7 +519,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "" --- jockey-0.9.7.orig/po/tr.po +++ jockey-0.9.7/po/tr.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-02-05 04:20+0000\n" "Last-Translator: kosti \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: tr\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -513,6 +512,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:2 msgid "To query the device drivers, you need to authenticate." msgstr "" +"Aygıt sürücülerini sorgulamak için kimlik doğrulaması yapmanız gerekir." #: ../backend/com.ubuntu.devicedriver.policy.in.h:3 msgid "" @@ -522,6 +522,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:4 msgid "To check the driver status, you need to authenticate." msgstr "" +"Sürücü durumunu kontrol etmek için kimlik doğrulaması yapmanız gerekir." #: ../backend/com.ubuntu.devicedriver.policy.in.h:5 msgid "" @@ -531,6 +532,8 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:6 msgid "To query the driver databases for updates, you need to authenticate." msgstr "" +"Sürücü veritabanındaki güncelleştirmeleri sorgulamak için kimlik doğrulaması " +"yapmanız gerekir." #: ../backend/com.ubuntu.devicedriver.policy.in.h:7 msgid "Install or remove device drivers" @@ -540,7 +543,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "Sürücü kurmak yada kaldırmak için, yetkili olmanız gerekmektedir." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA hızlandırılmış grafik sürücüsü" --- jockey-0.9.7.orig/po/ace.po +++ jockey-0.9.7/po/ace.po @@ -6,16 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: jockey\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-01-24 20:47+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Acehnese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:17+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" +"Language: \n" #: ../text/jockey-text.py:72 msgid "Please enter 'y' or 'n' and press Enter" @@ -41,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -519,7 +519,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "" --- jockey-0.9.7.orig/po/he.po +++ jockey-0.9.7/po/he.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: jockey\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2010-08-25 09:23+0000\n" "Last-Translator: Yaron \n" "Language-Team: Hebrew \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: he\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -487,6 +486,9 @@ "\n" "This should help you use Ubuntu in your VM." msgstr "" +"התקנת מנהלי התקני לקוח ה־VMWare עבור התקנת האובונטו מבוססת ה־VMWare שלך.\n" +"\n" +"התקנה זו אמורה לסייע לך להשתמש באובונטו במכונה הווירטואלית שלך." #: ../backend/jockey-backend.py:32 msgid "Enable debugging messages." @@ -549,7 +551,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "כדי להתקין או להסיר מנהלי התקנים, עליך לעבור אימות." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "מנהל התקן האצה גרפית של NVIDIA" --- jockey-0.9.7.orig/po/ku.po +++ jockey-0.9.7/po/ku.po @@ -6,16 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: jockey\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-10-03 23:08+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Kurdish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" +"Language: ku\n" #: ../text/jockey-text.py:72 msgid "Please enter 'y' or 'n' and press Enter" @@ -41,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -519,7 +519,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "" --- jockey-0.9.7.orig/po/be.po +++ jockey-0.9.7/po/be.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2009-02-24 11:10+0000\n" "Last-Translator: GNOME BY Team \n" "Language-Team: Belarusian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:17+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: be\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -566,7 +565,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Драйвер паскоранай графікі NVIDIA" --- jockey-0.9.7.orig/po/et.po +++ jockey-0.9.7/po/et.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: jockey\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-10-07 06:53+0000\n" "Last-Translator: mahfiaz \n" "Language-Team: Estonian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: et\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -553,7 +552,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA graafikakiirenduse draiver" --- jockey-0.9.7.orig/po/pt_BR.po +++ jockey-0.9.7/po/pt_BR.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-10-07 16:54+0000\n" "Last-Translator: Tiago Hillebrandt \n" "Language-Team: Portuguese (Brazil) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: \n" #: ../text/jockey-text.py:72 @@ -42,12 +42,9 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" -"Não foi possível conectar ao D-BUS,\"+ \" por favor, utilize a opção --no-" -"dbus como root para\"+ \" usar o jockey sem ele." #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -572,7 +569,7 @@ msgstr "" "Para instalar ou remover drivers de dispositivos você precisa autenticar-se." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Driver de aceleração de vídeo NVIDIA" --- jockey-0.9.7.orig/po/uz.po +++ jockey-0.9.7/po/uz.po @@ -6,16 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: jockey\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2012-01-16 21:29+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Uzbek \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-17 04:42+0000\n" -"X-Generator: Launchpad (build 14676)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" +"Language: uz\n" #: ../text/jockey-text.py:72 msgid "Please enter 'y' or 'n' and press Enter" @@ -41,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -519,7 +519,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "" --- jockey-0.9.7.orig/po/es.po +++ jockey-0.9.7/po/es.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-01-03 03:57+0000\n" "Last-Translator: Fitoschido \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: es\n" #: ../text/jockey-text.py:72 @@ -43,12 +43,9 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" -"No se puede conectar a D-BUS,«+ », use la opción " -"--no-dbus como root para «+ » use jockey sin ella." #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -579,7 +576,7 @@ msgstr "" "Para instalar o borrar controladores de dispositivo, debe autenticarse." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Controlador para tarjetas gráficas NVIDIA" --- jockey-0.9.7.orig/po/lt.po +++ jockey-0.9.7/po/lt.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-12-09 12:51+0000\n" "Last-Translator: Mantas Kriaučiūnas \n" "Language-Team: Lithuanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: lt\n" #: ../text/jockey-text.py:72 @@ -44,9 +44,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -302,6 +301,8 @@ "Use a different target kernel version than the currently running one. This " "is only relevant with --no-dbus." msgstr "" +"Naudoti kitą paskirties branduolio versiją negu dabar yra vykdoma. Tai " +"aktualu tik su --no-dbus." #: ../jockey/ui.py:539 ../jockey/ui.py:1022 msgid "Restricted drivers available" @@ -497,6 +498,10 @@ "\n" "This should help you use Ubuntu in your VM." msgstr "" +"Įdiegti VMWare kliento tvarkykles ir įrankius į jūsų VMWare paremtą Ubuntu " +"įdiegimą.\n" +"\n" +"Tai turėtų jums padėti naudoti Ubuntu jūsų VM." #: ../backend/jockey-backend.py:32 msgid "Enable debugging messages." @@ -520,7 +525,7 @@ #: ../backend/jockey-backend.py:46 msgid "Use a different target kernel version than the currently running one." -msgstr "" +msgstr "Naudoti kitą paskirties branduolio versiją negu dabar yra vykdoma." #: ../backend/com.ubuntu.devicedriver.policy.in.h:1 msgid "Get information about local device drivers" @@ -552,6 +557,8 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:6 msgid "To query the driver databases for updates, you need to authenticate." msgstr "" +"Norėdami užklausti tvarkyklių duomenų bazes atnaujinimų, turite patvirtinti " +"tapatumą." #: ../backend/com.ubuntu.devicedriver.policy.in.h:7 msgid "Install or remove device drivers" @@ -563,7 +570,7 @@ "Aparatinės įrangos valdyklių įdiegimui ar pašalinimui jūs turite patvirtinti " "tapatybę." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA grafinės posistemės valdyklė su spartinimu" --- jockey-0.9.7.orig/po/jockey.pot +++ jockey-0.9.7/po/jockey.pot @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-03-03 22:11+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -40,7 +40,9 @@ msgstr "" #: ../jockey/ui.py:121 -msgid "Cannot connect to D-BUS," +msgid "" +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 --- jockey-0.9.7.orig/po/az.po +++ jockey-0.9.7/po/az.po @@ -6,16 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: jockey\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-03-21 10:30+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Azerbaijani \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:17+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" +"Language: az\n" #: ../text/jockey-text.py:72 msgid "Please enter 'y' or 'n' and press Enter" @@ -41,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -519,7 +519,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "" --- jockey-0.9.7.orig/po/sk.po +++ jockey-0.9.7/po/sk.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: jockey\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2010-06-07 10:27+0000\n" "Last-Translator: Ján Dráb \n" "Language-Team: Slovak \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: sk\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -107,7 +106,7 @@ #: ../jockey/ui.py:185 msgid "Download in progress" -msgstr "Sťahovanie prebieha" +msgstr "Prebieha sťahovanie" #: ../jockey/ui.py:186 msgid "Unknown driver" @@ -235,16 +234,17 @@ #: ../jockey/ui.py:362 msgid "Check for newly used or usable drivers and notify the user." msgstr "" -"Kontrolovať pre znovu používané a užitočné ovládače a upozorniť používateľa." +"Kontrolovať pre novšie používané a užitočné ovládače a upozorniť používateľa." #: ../jockey/ui.py:365 msgid "Query driver databases for newly available or updated drivers." msgstr "" -"Dopyt databázy ovládačov pre znovu dostupné alebo aktualizované ovládače." +"Prehľadať databázy ovládačov pre nanovo dostupné alebo aktualizované " +"ovládače." #: ../jockey/ui.py:368 msgid "List available drivers and their status." -msgstr "Zoznam dostupných ovládačov a ich stav." +msgstr "Uviesť dostupné ovládače a ich stav." #: ../jockey/ui.py:371 msgid "Enable drivers that can be automatically installed." @@ -256,11 +256,11 @@ #: ../jockey/ui.py:377 msgid "Enable a driver" -msgstr "Zapnúť ovládač" +msgstr "Povoliť ovládač" #: ../jockey/ui.py:380 msgid "Disable a driver" -msgstr "Vypnúť ovládač" +msgstr "Zakázať ovládač" #: ../jockey/ui.py:383 msgid "Ask for confirmation for --enable/--disable" @@ -303,7 +303,7 @@ #: ../jockey/ui.py:539 ../jockey/ui.py:1022 msgid "Restricted drivers available" -msgstr "Dostupné uzavreté ovládače" +msgstr "Dostupné neslobodné ovládače" #: ../jockey/ui.py:540 msgid "" @@ -319,11 +319,11 @@ #: ../jockey/ui.py:544 msgid "There are new or updated drivers available for your hardware." -msgstr "Nachádzajú sa tu nové alebo aktualizované ovládače pre váš hardvér." +msgstr "K dispozícii sú nové alebo aktualizované ovládače pre váš hardvér." #: ../jockey/ui.py:548 msgid "New restricted drivers in use" -msgstr "Používajú sa nové uzavreté ovládače" +msgstr "Používajú sa nové neslobodné ovládače" #. %(os)s stands for the OS name. Prefix it or suffix it, #. but do not replace it. @@ -333,7 +333,8 @@ "In order for this computer to function properly, %(os)s is using driver " "software that cannot be supported by %(os)s." msgstr "" -"%(os)s používa nepodporované ovládače, aby tento počítač pracoval správne." +"Aby tento počítač pracoval správne, %(os)s používa ovládače, ktoré %(os)s " +"nemôže podporovať." #: ../jockey/ui.py:577 msgid "" @@ -345,7 +346,7 @@ #: ../jockey/ui.py:583 msgid "Downloading and installing driver..." -msgstr "Ovládač sa práve preberá a inštaluje..." +msgstr "Ovládač sa práve sťahuje a inštaluje..." #: ../jockey/ui.py:591 msgid "Removing driver..." @@ -357,7 +358,7 @@ #: ../jockey/ui.py:621 msgid "Use --list to see available drivers" -msgstr "Použiť --list k zobrazeniu dostupných ovládačov" +msgstr "Použite --list k zobrazeniu dostupných ovládačov" #: ../jockey/ui.py:638 msgid "Cannot change driver" @@ -365,11 +366,11 @@ #: ../jockey/ui.py:651 msgid "Enable driver?" -msgstr "Zapnúť ovládač?" +msgstr "Povoliť ovládač?" #: ../jockey/ui.py:654 msgid "Disable driver?" -msgstr "Vypnúť ovládač?" +msgstr "Zakázať ovládač?" #: ../jockey/ui.py:683 msgid "Sorry, the Jockey backend crashed. Please file a bug at:" @@ -461,7 +462,7 @@ #: ../examples/handlers/sl_modem.py:15 ../data/handlers/sl_modem.py:15 msgid "Software modem" -msgstr "Sofvér modemu" +msgstr "Sofvérový modem" #: ../examples/handlers/sl_modem.py:17 ../data/handlers/sl_modem.py:17 msgid "" @@ -492,6 +493,10 @@ "\n" "This should help you use Ubuntu in your VM." msgstr "" +"Nainštalovať klientské ovládače VMWare pre Vašu inštaláciu Ubuntu vo " +"VMWare.\n" +"\n" +"Toto vám pomôže používať Ubuntu vo vašom VM." #: ../backend/jockey-backend.py:32 msgid "Enable debugging messages." @@ -524,6 +529,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:2 msgid "To query the device drivers, you need to authenticate." msgstr "" +"Overenie totožnosti je potrebné na získanie ovládačov pre zariadenia." #: ../backend/com.ubuntu.devicedriver.policy.in.h:3 msgid "" @@ -532,7 +538,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:4 msgid "To check the driver status, you need to authenticate." -msgstr "" +msgstr "Overenie totožnosti je potrebné na skontrolovanie stavu ovládačov." #: ../backend/com.ubuntu.devicedriver.policy.in.h:5 msgid "" @@ -544,6 +550,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:6 msgid "To query the driver databases for updates, you need to authenticate." msgstr "" +"Overenie totožnosti je potrebné na získanie aktualizácií databázy ovládačov." #: ../backend/com.ubuntu.devicedriver.policy.in.h:7 msgid "Install or remove device drivers" @@ -552,8 +559,10 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:8 msgid "To install or remove device drivers, you need to authenticate." msgstr "" +"Overenie totožnosti je potrebné na inštaláciu alebo odstránenie ovládačov " +"zariadenia." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Akcelerovaný grafický ovládač kariet NVIDIA" @@ -573,12 +582,12 @@ "such as some games." msgstr "" "Tento ovládač je potrebný k plnému využitiu 3D potenciálu grafických kariet " -"NVIDIA ako aj 2D akcelerácie na novších kartách.\n" +"NVIDIA ako aj k poskytnutiu 2D akcelerácie na novších kartách.\n" "\n" -"Ak chcete zapnúť efekty prostredia, je potrebné použiť tento ovládač.\n" +"Ak chcete povoliť efekty prostredia, je potrebné použiť tento ovládač.\n" "\n" -"Ak nezapnete tento ovládač, nebude možné použiť efekty prostredia a používať " -"programy vyžadujúce 3D akceleráciu ako sú napr. niektoré hry." +"Ak zakážete tento ovládač, nebude možné použiť efekty prostredia a používať " +"programy vyžadujúce 3D akceleráciu napr. niektoré hry." #~ msgid "Cannot connect to D-BUS" #~ msgstr "Nepodarilo sa pripojiť k D-BUS" --- jockey-0.9.7.orig/po/ru.po +++ jockey-0.9.7/po/ru.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-12-04 02:25+0000\n" "Last-Translator: Даниил Рыжков \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: ru\n" #: ../text/jockey-text.py:72 @@ -42,13 +42,9 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." -msgstr "" -"Невозможно подключиться к D-BUS,\"+ \" " -"пожалуйста, используйте параметр --no-dbus от имени администратора, для\"+ " -" \" использования jockey без D-BUS." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." +msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -584,7 +580,7 @@ "Для установки или удаления драйверов устройств, вам необходимо произвести " "аутентификацию." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Драйвер ускоренной графики NVIDIA" --- jockey-0.9.7.orig/po/pl.po +++ jockey-0.9.7/po/pl.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-11-04 20:54+0000\n" "Last-Translator: Mateusz Tybura \n" "Language-Team: Aviary.pl \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "X-Poedit-Country: Poland\n" "Language: \n" "X-Poedit-Language: Polish\n" @@ -45,12 +45,9 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" -"Nie można połączyć z systemem D-BUS. Proszę uruchomić jako użytkownik root, " -"używając opcji --no-dbus, aby nie używać systemu D-BUS." #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -568,6 +565,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:6 msgid "To query the driver databases for updates, you need to authenticate." msgstr "" +"Aby wyszukać aktualizacje baz danych sterowników, należy się uwierzytelnić." #: ../backend/com.ubuntu.devicedriver.policy.in.h:7 msgid "Install or remove device drivers" @@ -578,7 +576,7 @@ msgstr "" "Musisz się uwierzytelnić by zainstalować lub usunąć sterowniki urządzeń" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Wspomagany sprzętowo sterownik kart graficznych NVIDIA" --- jockey-0.9.7.orig/po/hr.po +++ jockey-0.9.7/po/hr.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2010-08-28 17:50+0000\n" "Last-Translator: Saša Teković \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: hr\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -573,7 +572,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA ubrzani grafički upravljački program" --- jockey-0.9.7.orig/po/lv.po +++ jockey-0.9.7/po/lv.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2009-02-24 11:10+0000\n" "Last-Translator: Rolands Bondars \n" "Language-Team: Latvian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: lv\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -540,7 +539,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA paātrinātās grafikas draiveris" --- jockey-0.9.7.orig/po/bg.po +++ jockey-0.9.7/po/bg.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" -"PO-Revision-Date: 2011-10-28 14:21+0000\n" -"Last-Translator: Svetoslav Stefanov \n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" +"PO-Revision-Date: 2012-04-07 17:20+0000\n" +"Last-Translator: Dimitar Dimitrov \n" "Language-Team: Bulgarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:17+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-04-08 04:36+0000\n" +"X-Generator: Launchpad (build 15060)\n" "Language: bg\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -460,6 +459,8 @@ "This driver is required to fully utilise the 3D potential of some AMD (ATI) " "graphics cards, as well as provide 2D acceleration of newer cards." msgstr "" +"Този драйвер е необходим за да се използва пълният 3D потенциал на някои AMD " +"(ATI) графични карти, както и предоставя 2D ускорение на новите карти." #: ../examples/handlers/sl_modem.py:15 ../data/handlers/sl_modem.py:15 msgid "Software modem" @@ -540,7 +541,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:4 msgid "To check the driver status, you need to authenticate." -msgstr "" +msgstr "За да проверите статуса на драйверите, трябва да се оторизирате" #: ../backend/com.ubuntu.devicedriver.policy.in.h:5 msgid "" @@ -559,9 +560,9 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:8 msgid "To install or remove device drivers, you need to authenticate." -msgstr "" +msgstr "За да инсталирате или премахнете драйвери, трябва да се оторизирате." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA ускорени графични драйвери" --- jockey-0.9.7.orig/po/el.po +++ jockey-0.9.7/po/el.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-12-14 21:02+0000\n" "Last-Translator: Christos Spyroglou \n" "Language-Team: Greek, Modern (1453-) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: \n" #: ../text/jockey-text.py:72 @@ -42,10 +42,11 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" +"Αδύνατη η σύνδεση με D-BUS· παρακαλώ χρησιμοποιήστε την επιλογή «--no-dbus» " +"ως root από τη γραμμή εντολών για να εκτελέσετε το jocket χωρίς D-BUS." #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -511,6 +512,10 @@ "\n" "This should help you use Ubuntu in your VM." msgstr "" +"Εγκαταστήστε τους οδηγούς του VMWare και τα εργαλεία για το VMWare σας " +"βασισμένο στην εγκατάσταση Ubuntu.\n" +"\n" +"Αυτό θα σας βοηθήσει να χρησιμοποιήσετε το Ubuntu στο VM σας." #: ../backend/jockey-backend.py:32 msgid "Enable debugging messages." @@ -545,7 +550,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:2 msgid "To query the device drivers, you need to authenticate." -msgstr "" +msgstr "Για να ζητήσετε οδηγούς συσκευής, πρέπει να επιβεβαιώσετε." #: ../backend/com.ubuntu.devicedriver.policy.in.h:3 msgid "" @@ -556,7 +561,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:4 msgid "To check the driver status, you need to authenticate." -msgstr "" +msgstr "Για να ελέγξετε την κατάσταση του οδηγού, πρέπει να επιβεβαιώσετε." #: ../backend/com.ubuntu.devicedriver.policy.in.h:5 msgid "" @@ -568,6 +573,8 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:6 msgid "To query the driver databases for updates, you need to authenticate." msgstr "" +"Για να κάνετε αίτηση στη βάση δεδομένων των οδηγών για ενημερώσεις, πρέπει " +"να επιβεβαιώσετε." #: ../backend/com.ubuntu.devicedriver.policy.in.h:7 msgid "Install or remove device drivers" @@ -576,8 +583,10 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:8 msgid "To install or remove device drivers, you need to authenticate." msgstr "" +"Για να εγκαταστήσετε ή να αφαιρέσετε οδηγούς συσκευής, πρέπει να " +"επιβεβαιώσετε." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Οδηγός γραφικών της NVIDIA" --- jockey-0.9.7.orig/po/mk.po +++ jockey-0.9.7/po/mk.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2009-02-24 11:01+0000\n" "Last-Translator: Јован Наумовски \n" "Language-Team: Macedonian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: mk\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -520,7 +519,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA драјвер за забрзана графика" --- jockey-0.9.7.orig/po/hu.po +++ jockey-0.9.7/po/hu.po @@ -8,15 +8,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-06-27 19:59+0000\n" "Last-Translator: Gabor Kelemen \n" "Language-Team: Hungarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: hu\n" #: ../text/jockey-text.py:72 @@ -43,10 +43,11 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" +"Nem lehet kapcsolódni a D-BUS-hoz, használja a --no-dbus kapcsolót " +"rendszergazdaként a jockey használatához nélküle." #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -304,7 +305,7 @@ "Use a different target kernel version than the currently running one. This " "is only relevant with --no-dbus." msgstr "" -"A jelenleg futótól eltérő cél kernelverzió használata. Csak a --no-bus " +"A jelenleg futótól eltérő cél kernelverzió használata. Csak a --no-dbus " "kapcsolóval együtt használható." #: ../jockey/ui.py:539 ../jockey/ui.py:1022 @@ -579,7 +580,7 @@ "Hitelesítés szükséges az illesztőprogramok telepítéséhez vagy " "eltávolításához." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA gyorsított grafikus illesztőprogram" --- jockey-0.9.7.orig/po/fr.po +++ jockey-0.9.7/po/fr.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-10-12 18:44+0000\n" "Last-Translator: Bruno Patri \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: fr\n" #: ../text/jockey-text.py:72 @@ -42,13 +42,9 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." -msgstr "" -"Impossible de se connecter à D-BUS,\"+ \" " -"veuillez utiliser l'option --no-dbus en tant que root pour\"+ " -" \" utiliser jockey sans D-BUS." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." +msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -587,7 +583,7 @@ "Vous devez vous authentifier pour installer ou supprimer des pilotes de " "périphériques." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Pilote d'accélération graphique NVIDIA" --- jockey-0.9.7.orig/po/zh_CN.po +++ jockey-0.9.7/po/zh_CN.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2010-06-07 10:24+0000\n" "Last-Translator: Xhacker Liu \n" "Language-Team: Chinese (China) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: \n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -523,7 +522,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA 图形加速驱动" --- jockey-0.9.7.orig/po/ka.po +++ jockey-0.9.7/po/ka.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-12-10 07:24+0000\n" "Last-Translator: Giorgi Maghlakelidze \n" "Language-Team: Georgian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: ka\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -522,7 +521,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA–ს გრაფიკული ვიდეო ამაჩქარებლის დრაივერი" --- jockey-0.9.7.orig/po/da.po +++ jockey-0.9.7/po/da.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: jockey\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" -"PO-Revision-Date: 2011-02-05 14:15+0000\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" +"PO-Revision-Date: 2012-03-23 02:33+0000\n" "Last-Translator: AJenbo \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-24 04:34+0000\n" +"X-Generator: Launchpad (build 14981)\n" "Language: da\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -144,13 +143,13 @@ #: ../jockey/ui.py:204 msgid "Restricted Additional Drivers" -msgstr "" +msgstr "Yderligere proprietære drivere" #: ../kde/jockey-kde.desktop.in.h:1 ../jockey/ui.py:206 ../jockey/ui.py:582 #: ../jockey/ui.py:590 ../jockey/ui.py:598 ../jockey/ui.py:802 #: ../gtk/jockey-gtk.desktop.in.h:1 msgid "Additional Drivers" -msgstr "" +msgstr "Yderligere drivere" #: ../jockey/ui.py:216 msgid "Driver search results" @@ -251,7 +250,7 @@ #: ../jockey/ui.py:371 msgid "Enable drivers that can be automatically installed." -msgstr "" +msgstr "Aktiver driver der automatisk kan installeres." #: ../jockey/ui.py:374 msgid "List hardware identifiers from this system." @@ -562,7 +561,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA-accelereret grafikdriver" --- jockey-0.9.7.orig/po/it.po +++ jockey-0.9.7/po/it.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" -"PO-Revision-Date: 2010-09-09 07:00+0000\n" -"Last-Translator: Milo Casagrande \n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" +"PO-Revision-Date: 2012-04-01 21:39+0000\n" +"Last-Translator: Valter Mura \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-04-02 04:34+0000\n" +"X-Generator: Launchpad (build 15032)\n" "Language: it\n" #: ../text/jockey-text.py:72 @@ -43,10 +43,11 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" +"Impossibile connettersi a D-BUS: utilizzare l'opzione --no-dbus come utente " +"root per utilizzare il programma." #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -145,13 +146,13 @@ #: ../jockey/ui.py:204 msgid "Restricted Additional Drivers" -msgstr "" +msgstr "Driver aggiuntivi con restrizioni" #: ../kde/jockey-kde.desktop.in.h:1 ../jockey/ui.py:206 ../jockey/ui.py:582 #: ../jockey/ui.py:590 ../jockey/ui.py:598 ../jockey/ui.py:802 #: ../gtk/jockey-gtk.desktop.in.h:1 msgid "Additional Drivers" -msgstr "" +msgstr "Driver aggiuntivi" #: ../jockey/ui.py:216 msgid "Driver search results" @@ -252,7 +253,7 @@ #: ../jockey/ui.py:371 msgid "Enable drivers that can be automatically installed." -msgstr "" +msgstr "Abilita i driver che possono essere installati automaticamente." #: ../jockey/ui.py:374 msgid "List hardware identifiers from this system." @@ -506,6 +507,10 @@ "\n" "This should help you use Ubuntu in your VM." msgstr "" +"Installare i driver e gli strumenti VMWare client per l'installazione di " +"Ubuntu basata su VMWare.\n" +"\n" +"Ciò dovrebbe essere d'aiuto nell'uso di Ubuntu nell'ambiente virtualizzato." #: ../backend/jockey-backend.py:32 msgid "Enable debugging messages." @@ -539,7 +544,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:2 msgid "To query the device drivers, you need to authenticate." -msgstr "" +msgstr "Per interrogare i driver dispositivi è richiesta l'autenticazione." #: ../backend/com.ubuntu.devicedriver.policy.in.h:3 msgid "" @@ -549,7 +554,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:4 msgid "To check the driver status, you need to authenticate." -msgstr "" +msgstr "Per controllare lo stato dei driver è richiesta l'autenticazione." #: ../backend/com.ubuntu.devicedriver.policy.in.h:5 msgid "" @@ -561,6 +566,8 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:6 msgid "To query the driver databases for updates, you need to authenticate." msgstr "" +"Per eseguire interrogazioni nel database dei driver è richiesta " +"l'autenticazione." #: ../backend/com.ubuntu.devicedriver.policy.in.h:7 msgid "Install or remove device drivers" @@ -569,6 +576,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:8 msgid "To install or remove device drivers, you need to authenticate." msgstr "" +"Per installare o rimuovere driver dispositivi è richiesta l'autenticazione." #: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 msgid "NVIDIA accelerated graphics driver" --- jockey-0.9.7.orig/po/pt.po +++ jockey-0.9.7/po/pt.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2010-06-07 10:24+0000\n" "Last-Translator: Martin Pitt \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: pt\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -522,7 +521,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Controlador da aceleradora gráfica NVIDIA" --- jockey-0.9.7.orig/po/cs.po +++ jockey-0.9.7/po/cs.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2012-01-26 04:14+0000\n" "Last-Translator: Roman Horník \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-27 05:18+0000\n" -"X-Generator: Launchpad (build 14727)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: cs\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -497,6 +496,10 @@ "\n" "This should help you use Ubuntu in your VM." msgstr "" +"Instalovat klientské ovladače a nástroje pro Ubuntu instalované v prostředí " +"VMWare.\n" +"\n" +"Toto by mělo vylepšit chod Ubuntu ve virtualizovaném prostředí." #: ../backend/jockey-backend.py:32 msgid "Enable debugging messages." @@ -528,7 +531,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:2 msgid "To query the device drivers, you need to authenticate." -msgstr "" +msgstr "Pro nalezení ovladače zařízení je vyžadováno ověření." #: ../backend/com.ubuntu.devicedriver.policy.in.h:3 msgid "" @@ -537,7 +540,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:4 msgid "To check the driver status, you need to authenticate." -msgstr "" +msgstr "Pro kontrolu stavu ovladače je vyžadováno ověření." #: ../backend/com.ubuntu.devicedriver.policy.in.h:5 msgid "" @@ -549,6 +552,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:6 msgid "To query the driver databases for updates, you need to authenticate." msgstr "" +"Pro dotaz do databáze ovladačů k získání aktualizací je vyžadováno ověření." #: ../backend/com.ubuntu.devicedriver.policy.in.h:7 msgid "Install or remove device drivers" @@ -558,7 +562,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "Pro instalaci nebo odstranění ovladačů je vyžadováno ověření." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Akcelerovaný ovladač grafických karet NVIDIA" --- jockey-0.9.7.orig/po/th.po +++ jockey-0.9.7/po/th.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2010-06-08 10:23+0000\n" "Last-Translator: SiraNokyoongtong \n" "Language-Team: Thai \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: th\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -534,7 +533,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "ไดรเวอร์กราฟิก NVIDIA accelerated" --- jockey-0.9.7.orig/po/ro.po +++ jockey-0.9.7/po/ro.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2009-02-24 10:45+0000\n" "Last-Translator: Doru Horișco \n" "Language-Team: Romanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: ro\n" "100 > 19) || ((n % 100 == 0) && (n != 0))) ? 2: 1))\n" @@ -43,10 +43,11 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" +"Nu se poate realiza conexiunea la D-BUS, utilizați ca root opțiunea --no-" +"dbus pentru a utiliza programul jockey fără D-BUS." #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -443,17 +444,20 @@ #: ../examples/handlers/fglrx.py:17 msgid "AMD proprietary FGLRX graphics driver" -msgstr "" +msgstr "Driver video proprietar FGLRX de la AMD" #: ../examples/handlers/fglrx.py:18 msgid "3D-accelerated proprietary graphics driver for AMD (ATI) cards." -msgstr "" +msgstr "Driver video proprietar cu accelerare 3D pentru plăcile AMD (ATI)" #: ../examples/handlers/fglrx.py:20 msgid "" "This driver is required to fully utilise the 3D potential of some AMD (ATI) " "graphics cards, as well as provide 2D acceleration of newer cards." msgstr "" +"Acest driver este necesar pentru utilizarea întregului potențial 3D pentru " +"unele din plăcile video produse de AMD (ATI), precum și pentru asigurarea " +"accelerării 2D pentru plăcile mai noi." #: ../examples/handlers/sl_modem.py:15 ../data/handlers/sl_modem.py:15 msgid "Software modem" @@ -490,6 +494,10 @@ "\n" "This should help you use Ubuntu in your VM." msgstr "" +"Instalați driverele și utilitarele pentru clientul VMWare, în vederea " +"instalării Ubuntu în VMWare.\n" +"\n" +"Acest lucru vă ajută să utilizați Ubuntu în mașina virtuală." #: ../backend/jockey-backend.py:32 msgid "Enable debugging messages." @@ -523,6 +531,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:2 msgid "To query the device drivers, you need to authenticate." msgstr "" +"Pentru a afișa driverele pentru dispozitive, trebuie să vă autentificați." #: ../backend/com.ubuntu.devicedriver.policy.in.h:3 msgid "" @@ -533,7 +542,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:4 msgid "To check the driver status, you need to authenticate." -msgstr "" +msgstr "Pentru a verifica statutul driverelor, trebuie să vă autentificați." #: ../backend/com.ubuntu.devicedriver.policy.in.h:5 msgid "" @@ -545,6 +554,8 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:6 msgid "To query the driver databases for updates, you need to authenticate." msgstr "" +"Pentru a verifica baza de date a driverelor pentru actualizări, trebuie să " +"vă autentificați." #: ../backend/com.ubuntu.devicedriver.policy.in.h:7 msgid "Install or remove device drivers" @@ -553,8 +564,10 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:8 msgid "To install or remove device drivers, you need to authenticate." msgstr "" +"Pentru a instala sau șterge drivere pentru dispozitive, trebuie să vă " +"autentificați." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Driver grafic NVIDIA accelerat" --- jockey-0.9.7.orig/po/gl.po +++ jockey-0.9.7/po/gl.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-10-13 22:37+0000\n" "Last-Translator: Fran Diéguez \n" "Language-Team: Galician \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: gl\n" #: ../text/jockey-text.py:72 @@ -43,9 +43,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -505,6 +504,10 @@ "\n" "This should help you use Ubuntu in your VM." msgstr "" +"Instalar os controladores e ferramentas do cliente de VMWare na súa " +"instalación de Ubuntu baseada en VMWare.\n" +"\n" +"Isto debería axudarlle no mellor uso de Ubuntu na súa VM." #: ../backend/jockey-backend.py:32 msgid "Enable debugging messages." @@ -542,6 +545,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:2 msgid "To query the device drivers, you need to authenticate." msgstr "" +"Para consultar polos controladores dos dispositivos debe autenticarse." #: ../backend/com.ubuntu.devicedriver.policy.in.h:3 msgid "" @@ -551,7 +555,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:4 msgid "To check the driver status, you need to authenticate." -msgstr "" +msgstr "Para comprobar o estado do controlador debe autenticarse." #: ../backend/com.ubuntu.devicedriver.policy.in.h:5 msgid "" @@ -563,6 +567,8 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:6 msgid "To query the driver databases for updates, you need to authenticate." msgstr "" +"Para comprobar as actualizacións da base de datos de controladores debe " +"autenticarse." #: ../backend/com.ubuntu.devicedriver.policy.in.h:7 msgid "Install or remove device drivers" @@ -571,8 +577,9 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:8 msgid "To install or remove device drivers, you need to authenticate." msgstr "" +"Para instalar e quitar controladores de dispositivo debe autenticarse." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Controlador de gráficos acelerados de NVIDIA" --- jockey-0.9.7.orig/po/ca.po +++ jockey-0.9.7/po/ca.po @@ -8,15 +8,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2010-06-07 10:27+0000\n" "Last-Translator: Martin Pitt \n" "Language-Team: Català \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:17+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: \n" #: ../text/jockey-text.py:72 @@ -43,9 +43,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -497,6 +496,10 @@ "\n" "This should help you use Ubuntu in your VM." msgstr "" +"Instaŀleu els controladors i les eines de client del VMWare per a la vostra " +"instaŀlació de l'Ubuntu basada en VMWare.\n" +"\n" +"Això us hauria d'ajudar a utilitzar l'Ubuntu a la màquina virtual." #: ../backend/jockey-backend.py:32 msgid "Enable debugging messages." @@ -528,7 +531,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:2 msgid "To query the device drivers, you need to authenticate." -msgstr "" +msgstr "Per consultar els controladors de dispositiu, us cal autenticar-vos." #: ../backend/com.ubuntu.devicedriver.policy.in.h:3 msgid "" @@ -539,7 +542,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:4 msgid "To check the driver status, you need to authenticate." -msgstr "" +msgstr "Per consultar l'estat del controlador, us cal autenticar-vos." #: ../backend/com.ubuntu.devicedriver.policy.in.h:5 msgid "" @@ -551,6 +554,8 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:6 msgid "To query the driver databases for updates, you need to authenticate." msgstr "" +"Per consultar la base de dades de controladors per a actualitzacions, us cal " +"autenticar-vos." #: ../backend/com.ubuntu.devicedriver.policy.in.h:7 msgid "Install or remove device drivers" @@ -558,9 +563,9 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:8 msgid "To install or remove device drivers, you need to authenticate." -msgstr "" +msgstr "Per instaŀlar o suprimir controladors, us cal autenticar-vos." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Controlador gràfic amb acceleració de NVIDIA" --- jockey-0.9.7.orig/po/shn.po +++ jockey-0.9.7/po/shn.po @@ -6,16 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: jockey\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2012-01-18 13:48+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Shan \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-19 04:37+0000\n" -"X-Generator: Launchpad (build 14692)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" +"Language: shn\n" #: ../text/jockey-text.py:72 msgid "Please enter 'y' or 'n' and press Enter" @@ -41,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -519,7 +519,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "" --- jockey-0.9.7.orig/po/zh_TW.po +++ jockey-0.9.7/po/zh_TW.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-02-12 12:56+0000\n" "Last-Translator: Cheng-Chia Tseng \n" "Language-Team: Chinese (Taiwan) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: \n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -103,7 +102,7 @@ #. this is used in the GUI and in --list output to denote free/restricted drivers #: ../jockey/ui.py:184 msgid "Proprietary" -msgstr "專屬" +msgstr "專有" #: ../jockey/ui.py:185 msgid "Download in progress" @@ -468,6 +467,9 @@ "\n" "This should help you use Ubuntu in your VM." msgstr "" +"為您以 VMWare 為基礎的 Ubuntu 安裝 VMWare Client 客端驅動程式與工具。\n" +"\n" +"這應該能幫助您在您的虛擬機器中使用 Ubuntu。" #: ../backend/jockey-backend.py:32 msgid "Enable debugging messages." @@ -499,7 +501,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:2 msgid "To query the device drivers, you need to authenticate." -msgstr "" +msgstr "您需要通過驗證才能查詢裝置驅動程式。" #: ../backend/com.ubuntu.devicedriver.policy.in.h:3 msgid "" @@ -508,7 +510,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:4 msgid "To check the driver status, you need to authenticate." -msgstr "" +msgstr "您需要通過驗證才能檢查驅動程式的狀態。" #: ../backend/com.ubuntu.devicedriver.policy.in.h:5 msgid "" @@ -517,7 +519,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:6 msgid "To query the driver databases for updates, you need to authenticate." -msgstr "" +msgstr "您需要通過驗證才能查詢驅動程式資料庫是否有更新可用。" #: ../backend/com.ubuntu.devicedriver.policy.in.h:7 msgid "Install or remove device drivers" @@ -525,9 +527,9 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:8 msgid "To install or remove device drivers, you need to authenticate." -msgstr "" +msgstr "您需要通過驗證才能安裝或移除裝置驅動程式。" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA 影像加速驅動程式" @@ -594,4 +596,4 @@ #~ msgstr "系統策略防止查詢裝置驅動程式" #~ msgid "3D-accelerated proprietary graphics driver for ATI cards." -#~ msgstr "ATI 卡專有的3D影像加速驅動程式。" +#~ msgstr "ATI 卡的專有 3D 加速顯示驅動程式。" --- jockey-0.9.7.orig/po/ko.po +++ jockey-0.9.7/po/ko.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2010-09-23 11:16+0000\n" "Last-Translator: Seung Soo, Ha \n" "Language-Team: Korean \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: ko\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -529,7 +528,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA 그래픽 가속 드라이버" --- jockey-0.9.7.orig/po/te.po +++ jockey-0.9.7/po/te.po @@ -6,16 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: jockey\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-08-31 13:43+0000\n" "Last-Translator: Praveen Illa \n" "Language-Team: Telugu \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" +"Language: te\n" #: ../text/jockey-text.py:72 msgid "Please enter 'y' or 'n' and press Enter" @@ -42,9 +43,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -520,7 +520,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA యాక్సెలరేటెడ్ గ్రాఫిక్స్ డ్రైవర్" --- jockey-0.9.7.orig/po/uk.po +++ jockey-0.9.7/po/uk.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2010-08-17 11:39+0000\n" "Last-Translator: Roman Oleskevych \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: uk\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -560,7 +559,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Драйвер прискореної графіки NVIDIA" --- jockey-0.9.7.orig/po/ky.po +++ jockey-0.9.7/po/ky.po @@ -6,16 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: jockey\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-06-06 08:14+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Kirghiz \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" +"Language: ky\n" #: ../text/jockey-text.py:72 msgid "Please enter 'y' or 'n' and press Enter" @@ -41,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -519,7 +519,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "" --- jockey-0.9.7.orig/po/gd.po +++ jockey-0.9.7/po/gd.po @@ -6,16 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: jockey\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-12-08 00:39+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Gaelic; Scottish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" +"Language: \n" #: ../text/jockey-text.py:72 msgid "Please enter 'y' or 'n' and press Enter" @@ -41,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -519,7 +519,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "" --- jockey-0.9.7.orig/po/ca@valencia.po +++ jockey-0.9.7/po/ca@valencia.po @@ -6,16 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: jockey\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-02-28 06:43+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Catalan (Valencian) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" +"Language: \n" #: ../text/jockey-text.py:72 msgid "Please enter 'y' or 'n' and press Enter" @@ -41,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -568,7 +568,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Controlador gràfic amb acceleració de NVIDIA" --- jockey-0.9.7.orig/po/en_GB.po +++ jockey-0.9.7/po/en_GB.po @@ -7,15 +7,16 @@ msgstr "" "Project-Id-Version: jockey\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-10-07 00:11+0000\n" "Last-Translator: James Thorrold \n" "Language-Team: English (United Kingdom) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" +"Language: \n" #: ../text/jockey-text.py:72 msgid "Please enter 'y' or 'n' and press Enter" @@ -41,13 +42,11 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." -msgstr "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." +msgstr "" +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -560,7 +559,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "To install or remove device drivers, you need to authenticate." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA accelerated graphics driver" --- jockey-0.9.7.orig/po/eu.po +++ jockey-0.9.7/po/eu.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2010-10-24 16:04+0000\n" "Last-Translator: Oier Mees \n" "Language-Team: Basque \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:17+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: eu\n" #: ../text/jockey-text.py:72 @@ -43,9 +43,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -558,7 +557,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA txartelentzako grafiko-kontrolatzailea" --- jockey-0.9.7.orig/po/hy.po +++ jockey-0.9.7/po/hy.po @@ -6,16 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: jockey\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-03-11 22:38+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Armenian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:17+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" +"Language: hy\n" #: ../text/jockey-text.py:72 msgid "Please enter 'y' or 'n' and press Enter" @@ -41,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -519,7 +519,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "" --- jockey-0.9.7.orig/po/km.po +++ jockey-0.9.7/po/km.po @@ -7,16 +7,17 @@ msgid "" msgstr "" "Project-Id-Version: po_jockey-km\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2010-09-20 11:42+0000\n" "Last-Translator: Khoem Sokhem \n" "Language-Team: Khmer \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" +"Language: \n" #: ../text/jockey-text.py:72 msgid "Please enter 'y' or 'n' and press Enter" @@ -42,9 +43,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -261,7 +261,7 @@ #: ../jockey/ui.py:371 msgid "Enable drivers that can be automatically installed." -msgstr "" +msgstr "បើក​កម្មវិធីបញ្ជា​ដែល​អាច​ត្រូវ​បាន​ដំឡើង​ដោយ​ស្វ័យ​ប្រវត្តិ ។" #: ../jockey/ui.py:374 msgid "List hardware identifiers from this system." @@ -303,12 +303,16 @@ msgid "" "Do not use D-BUS for communicating with the backend. Needs root privileges." msgstr "" +"កុំ​ប្រើ D-BUS សម្រាប់​ទាក់ទង​ជា​មួយ​កម្មវិធី​ផ្នែក​ខាង​ក្រោយ ។ " +"ត្រូវ​ការ​សិទ្ធិ​ជា root ។" #: ../jockey/ui.py:399 msgid "" "Use a different target kernel version than the currently running one. This " "is only relevant with --no-dbus." msgstr "" +"ប្រើ​កំណែ​ខឺណែល​គោលដៅ​ផ្សេង​ពី​កំណែ​ដែល​កំពុង​ដំណើរការ​បច្ចុប្បន្ន ។ " +"វា​ទាក់ទង​តែ​ជា​មួយ --no-dbus ប៉ុណ្ណោះ ។" #: ../jockey/ui.py:539 ../jockey/ui.py:1022 msgid "Restricted drivers available" @@ -461,17 +465,22 @@ #: ../examples/handlers/fglrx.py:17 msgid "AMD proprietary FGLRX graphics driver" -msgstr "" +msgstr "កម្មវិធី​បញ្ជា​ក្រាហ្វិក AMD FGLRX មាន​កម្មសិទ្ធិ" #: ../examples/handlers/fglrx.py:18 msgid "3D-accelerated proprietary graphics driver for AMD (ATI) cards." msgstr "" +"កម្មវិធី​បញ្ជា​ក្រាហ្វិក​មាន​កម្មសិទ្ធិ​បង្កើន​ល្បឿន​ត្រីមាត្រ សម្រាប់​កាត " +"AMD (ATI) ។" #: ../examples/handlers/fglrx.py:20 msgid "" "This driver is required to fully utilise the 3D potential of some AMD (ATI) " "graphics cards, as well as provide 2D acceleration of newer cards." msgstr "" +"កម្មវិធី​បញ្ជា​នេះ​ត្រូវ​បាន​ទាមទារ " +"ដើម្បី​ប្រើប្រាស់​លទ្ធភាព​ត្រីមាត្រ​ពេញលេញ​នៃ​កាត​ក្រាហ្វិក AMD (ATI) " +"មួយ​ចំនួន​ព្រម​ទាំង​ផ្ដល់​កា​រ​បង្កើន​ល្បឿន​នៃ​កាត​ថ្មី ។" #: ../examples/handlers/sl_modem.py:15 ../data/handlers/sl_modem.py:15 msgid "Software modem" @@ -493,12 +502,12 @@ #: ../examples/handlers/vmware-client.py:17 #: ../data/handlers/vmware-client.py:17 msgid "VMWare Client Tools" -msgstr "" +msgstr "កម្មវិធី​ម៉ាស៊ីន​ភ្ញៀវ VMWare" #: ../examples/handlers/vmware-client.py:18 #: ../data/handlers/vmware-client.py:18 msgid "Install VMWare client drivers and tools" -msgstr "" +msgstr "ដំឡើង​កម្មវិធី និង​កម្មវិធី​បញ្ជា​ម៉ាស៊ីន​ភ្ញៀវ VMWare" #: ../examples/handlers/vmware-client.py:19 #: ../data/handlers/vmware-client.py:19 @@ -508,6 +517,10 @@ "\n" "This should help you use Ubuntu in your VM." msgstr "" +"ដំឡើង​​កម្មវិធី និង​កម្មវិធី​បញ្ជា​ម៉ាស៊ីន​ភ្ញៀវ VMWare សម្រាប់​ VMWare " +"របស់​អ្នក​មាន​មូលដ្ឋាន​លើ​កា​រដំឡើង​អ៊ូប៊ុនទូ ។\n" +"\n" +"វា​​ជួយ​អ្នក​ឲ្យ​ប្រើ​អ៊ូប៊ុនទូ​ក្នុង VM របស់​អ្នក ។" #: ../backend/jockey-backend.py:32 msgid "Enable debugging messages." @@ -531,7 +544,7 @@ #: ../backend/jockey-backend.py:46 msgid "Use a different target kernel version than the currently running one." -msgstr "" +msgstr "ប្រើ​កំណែ​ខឺណែល​គោល​ដៅ​ផ្សេង ពី​កំណែ​ដែលកំពុង​ដំណើរការ​បច្ចុប្បន្ន ។" #: ../backend/com.ubuntu.devicedriver.policy.in.h:1 msgid "Get information about local device drivers" @@ -540,6 +553,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:2 msgid "To query the device drivers, you need to authenticate." msgstr "" +"ដើម្បី​ស្នើ​កម្មវិធី​បញ្ជា​ឧបករណ៍ អ្នក​ត្រូវ​តែ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវ ។" #: ../backend/com.ubuntu.devicedriver.policy.in.h:3 msgid "" @@ -551,6 +565,8 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:4 msgid "To check the driver status, you need to authenticate." msgstr "" +"ដើម្បី​ពិនិត្យ​មើល​ស្ថានភាព​កម្មវិធី​បញ្ជា " +"អ្នក​ត្រូវ​តែ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវ ។" #: ../backend/com.ubuntu.devicedriver.policy.in.h:5 msgid "" @@ -562,6 +578,8 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:6 msgid "To query the driver databases for updates, you need to authenticate." msgstr "" +"ដើម្បី​ស្នើ​មូលដ្ឋាន​ទិន្នន័យ​កម្មវិធី​បញ្ជា​សម្រាប់​បច្ចុប្បន្ន​ភាព " +"អ្នក​ត្រូវ​តែ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវ ។" #: ../backend/com.ubuntu.devicedriver.policy.in.h:7 msgid "Install or remove device drivers" @@ -570,8 +588,10 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:8 msgid "To install or remove device drivers, you need to authenticate." msgstr "" +"ដើម្បី​ដំឡើង​ ឬ​យក​កម្មវិធី​បញ្ជា​ឧបករណ៍​ចេញ " +"អ្នក​ត្រូវ​តែ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវ ។" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "កម្មវិធី​បញ្ជា​ក្រាហ្វិករបស់​​ NVIDIA accelerated" --- jockey-0.9.7.orig/po/en_CA.po +++ jockey-0.9.7/po/en_CA.po @@ -6,16 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: jockey\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2010-09-07 14:15+0000\n" "Last-Translator: Philip Falkner \n" "Language-Team: English (Canada) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" +"Language: \n" #: ../text/jockey-text.py:72 msgid "Please enter 'y' or 'n' and press Enter" @@ -41,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -548,7 +548,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA accelerated graphics driver" --- jockey-0.9.7.orig/po/ast.po +++ jockey-0.9.7/po/ast.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: jockey\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-12-19 18:51+0000\n" "Last-Translator: Iñigo Varela \n" "Language-Team: Asturian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:17+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: ast\n" #: ../text/jockey-text.py:72 @@ -43,10 +43,11 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" +"Nun pue coneutase a D-BUS, por favor, usa la opción --no-dbus como root pa " +"usar jockey ensin ello." #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -574,7 +575,7 @@ msgstr "" "Pa instalar o desaniciar controladores de preséu, tienes d'autenticate." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Controlador p'aceleración de tarxetes gráfiques NVIDIA" --- jockey-0.9.7.orig/po/fi.po +++ jockey-0.9.7/po/fi.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2012-01-29 12:54+0000\n" "Last-Translator: Ville Pilvio \n" "Language-Team: Finnish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-30 04:38+0000\n" -"X-Generator: Launchpad (build 14727)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: fi\n" #: ../text/jockey-text.py:72 @@ -42,12 +42,9 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" -"D-BUS yhteys muodostamatta,\"+ \" ystävällisesti käytät --no-dbus optiota " -"pääkäyttäjänä jotta voit\"+ \" käyttää jockey:a ilman sitä." #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -578,7 +575,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "Ajureiden asentaminen tai poistaminen vaatii tunnistautumista." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA-näytönohjaimien ajuri" --- jockey-0.9.7.orig/po/sl.po +++ jockey-0.9.7/po/sl.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-12-08 13:41+0000\n" "Last-Translator: Andrej Znidarsic \n" "Language-Team: Slovenian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: sl\n" #: ../text/jockey-text.py:72 @@ -42,12 +42,11 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" -"Ni se mogoče povezati z D-BUS,\"+ \" uporabite možnost --no-dbus kot skrbnik " -"za\"+ \" uporabo programa jockey brez njega." +"Ni se mogoče povezati z D-BUS. Uporabi možnost --no-dbus kot skrbnik za " +"uporabo jockey-ja brez D-BUS-a." #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -568,7 +567,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "Za namestitev ali odstranitev gonilnikov naprav se morate overiti." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA pospešeni grafični gonilnik" --- jockey-0.9.7.orig/po/vi.po +++ jockey-0.9.7/po/vi.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2009-02-24 11:14+0000\n" "Last-Translator: Hoàng Đức Hiếu \n" "Language-Team: Vietnamese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: vi\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -527,7 +526,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Trình điều khiển tăng tốc hiển thị của NVIDIA" --- jockey-0.9.7.orig/po/ja.po +++ jockey-0.9.7/po/ja.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2010-09-22 17:20+0000\n" "Last-Translator: epii \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: ja\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -503,7 +502,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:2 msgid "To query the device drivers, you need to authenticate." -msgstr "" +msgstr "デバイスドライバーへの問い合わせには、認証が必要です。" #: ../backend/com.ubuntu.devicedriver.policy.in.h:3 msgid "" @@ -512,7 +511,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:4 msgid "To check the driver status, you need to authenticate." -msgstr "" +msgstr "ドライバーの状態を確認するには、認証が必要です。" #: ../backend/com.ubuntu.devicedriver.policy.in.h:5 msgid "" @@ -521,7 +520,7 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:6 msgid "To query the driver databases for updates, you need to authenticate." -msgstr "" +msgstr "アップデートのためにドライバーデータベースに問い合わせるには、認証が必要です。" #: ../backend/com.ubuntu.devicedriver.policy.in.h:7 msgid "Install or remove device drivers" @@ -529,9 +528,9 @@ #: ../backend/com.ubuntu.devicedriver.policy.in.h:8 msgid "To install or remove device drivers, you need to authenticate." -msgstr "" +msgstr "デバイスドライバーをインストールまたは削除するには、認証が必要です。" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIAの高性能グラフィックスドライバー" --- jockey-0.9.7.orig/po/de.po +++ jockey-0.9.7/po/de.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: jockey 0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" -"PO-Revision-Date: 2011-12-23 19:48+0000\n" -"Last-Translator: Dennis Baudys \n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" +"PO-Revision-Date: 2012-03-05 08:17+0000\n" +"Last-Translator: Martin Pitt \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: de\n" #: ../text/jockey-text.py:72 @@ -43,13 +43,11 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." -msgstr "" -"Verbindung zu D-BUS kann nicht hergestellt werden\"+\" bitte benutzen Sie " -"den Parameter --no-dbus als Systemverwalter\"+\", um Jockey ohne es zu " -"verwenden." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." +msgstr "" +"Verbindung zu D-BUS kann nicht hergestellt werden. Bitte benutzen Sie den " +"Parameter --no-dbus als Systemverwalter, um Jockey ohne D-BUS zu verwenden." #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -578,7 +576,7 @@ "Um Gerätetreiber zu installieren oder zu entfernen, müssen Sie sich " "legitimieren." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Beschleunigter Grafiktreiber von NVIDIA" --- jockey-0.9.7.orig/po/sv.po +++ jockey-0.9.7/po/sv.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2012-02-18 06:48+0000\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-19 05:30+0000\n" -"X-Generator: Launchpad (build 14814)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: sv\n" #: ../text/jockey-text.py:72 @@ -43,12 +43,9 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" -"Kan inte ansluta till D-BUS,\"+ \" använd väljaren --no-dbus som root för\"+ " -"\" att använda jockey utan det." #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -577,7 +574,7 @@ msgstr "" "Du måste autentisera dig för att installera eller ta bort enhetsdrivrutiner." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "Accelererad grafikdrivrutin för NVIDIA" --- jockey-0.9.7.orig/po/my.po +++ jockey-0.9.7/po/my.po @@ -0,0 +1,587 @@ +# Burmese translation for jockey +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the jockey package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: jockey\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" +"PO-Revision-Date: 2012-04-02 10:14+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Burmese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-04-03 04:44+0000\n" +"X-Generator: Launchpad (build 15052)\n" + +#: ../text/jockey-text.py:72 +msgid "Please enter 'y' or 'n' and press Enter" +msgstr "y သို့မဟုတ် n ရိုက်ထည့်ပါ။ ပြီးပါက Enter ရိုက်ပါ။" + +#: ../text/jockey-text.py:74 +msgid "y\n" +msgstr "y\n" + +#: ../text/jockey-text.py:76 +msgid "n\n" +msgstr "n\n" + +#: ../kde/autostart/jockey-kde.desktop.in.h:1 +#: ../gtk/autostart/jockey-gtk.desktop.in.h:1 +msgid "Check for new hardware drivers" +msgstr "Check for new hardware drivers" + +#: ../kde/autostart/jockey-kde.desktop.in.h:2 +#: ../gtk/autostart/jockey-gtk.desktop.in.h:2 +msgid "Notify about new hardware drivers available for the system" +msgstr "Notify about new hardware drivers available for the system" + +#: ../jockey/ui.py:121 +msgid "" +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." +msgstr "" +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." + +#: ../jockey/ui.py:132 ../jockey/ui.py:145 +msgid "Searching for available drivers..." +msgstr "ရရှိနိုင်သော Driver များကိုရှာနေပါသည်။" + +#: ../jockey/ui.py:170 +msgid "Component" +msgstr "ပါဝင်ပစ္စည်း" + +#: ../jockey/ui.py:171 +msgid "_Enable" +msgstr "_Enable" + +#: ../jockey/ui.py:172 +msgid "_Disable" +msgstr "_Disable" + +#: ../jockey/ui.py:173 +msgid "Enabled" +msgstr "Enabled" + +#: ../jockey/ui.py:174 +msgid "Disabled" +msgstr "Disabled" + +#: ../jockey/ui.py:175 +msgid "Status" +msgstr "အခြေအနေ" + +#: ../jockey/ui.py:176 +msgid "Needs computer restart" +msgstr "ကွန်ပြူတာကို အစမှပြန်ဖွင့်ရန်လိုအပ်သည်။" + +#: ../jockey/ui.py:177 +msgid "In use" +msgstr "သုံးနေသည်။" + +#: ../jockey/ui.py:178 +msgid "Not in use" +msgstr "မသုံးဘူး" + +#: ../jockey/ui.py:179 +msgid "License:" +msgstr "လိုင်စင် ၊" + +#: ../jockey/ui.py:180 +msgid "details" +msgstr "အသေးစိတ်အချက်အလက်" + +#. this is used in the GUI and in --list output to denote free/restricted drivers +#: ../jockey/ui.py:182 +msgid "Free" +msgstr "အခမဲ့" + +#. this is used in the GUI and in --list output to denote free/restricted drivers +#: ../jockey/ui.py:184 +msgid "Proprietary" +msgstr "Proprietary" + +#: ../jockey/ui.py:185 +msgid "Download in progress" +msgstr "Download in progress" + +#: ../jockey/ui.py:186 +msgid "Unknown driver" +msgstr "မသိရှိသော Driver" + +#: ../jockey/ui.py:187 +msgid "You are not authorized to perform this action." +msgstr "You are not authorized to perform this action." + +#. %s is the name of the operating system +#: ../jockey/ui.py:189 +#, python-format +msgid "Tested by the %s developers" +msgstr "Tested by the %s developers" + +#. %s is the name of the operating system +#: ../jockey/ui.py:191 +#, python-format +msgid "Not tested by the %s developers" +msgstr "Not tested by the %s developers" + +#. this is used when one version of a driver is recommended over others +#: ../jockey/ui.py:193 +msgid "Recommended" +msgstr "Recommended" + +#: ../jockey/ui.py:194 +msgid "License Text for Device Driver" +msgstr "License Text for Device Driver" + +#: ../jockey/ui.py:195 +msgid "Install Drivers" +msgstr "Install Drivers" + +#: ../jockey/ui.py:204 +msgid "Restricted Additional Drivers" +msgstr "Restricted Additional Drivers" + +#: ../kde/jockey-kde.desktop.in.h:1 ../jockey/ui.py:206 ../jockey/ui.py:582 +#: ../jockey/ui.py:590 ../jockey/ui.py:598 ../jockey/ui.py:802 +#: ../gtk/jockey-gtk.desktop.in.h:1 +msgid "Additional Drivers" +msgstr "Additional Drivers" + +#: ../jockey/ui.py:216 +msgid "Driver search results" +msgstr "Driver ရှာဖွေမူ အဖြေ" + +#: ../jockey/ui.py:232 +msgid "" +"Proprietary drivers are being used to make this computer work properly." +msgstr "" +"Proprietary drivers are being used to make this computer work properly." + +#: ../jockey/ui.py:235 +msgid "No proprietary drivers are in use on this system." +msgstr "No proprietary drivers are in use on this system." + +#. %(os)s stands for the OS name. Prefix it or suffix it, +#. but do not replace it. +#: ../jockey/ui.py:241 +#, python-format +msgid "" +"Proprietary drivers do not have public source code that %(os)s developers " +"are free to modify. Security updates and corrections depend solely on the " +"responsiveness of the manufacturer. %(os)s cannot fix or improve these " +"drivers." +msgstr "" +"Proprietary drivers do not have public source code that %(os)s developers " +"are free to modify. Security updates and corrections depend solely on the " +"responsiveness of the manufacturer. %(os)s cannot fix or improve these " +"drivers." + +#: ../jockey/ui.py:254 +msgid "Graphics driver" +msgstr "Graphics driver" + +#: ../jockey/ui.py:256 +msgid "Firmware" +msgstr "Firmware" + +#: ../jockey/ui.py:258 +msgid "Device driver" +msgstr "Device driver" + +#: ../jockey/ui.py:268 +#, python-format +msgid "version %s" +msgstr "ဗားရှင်း %s" + +#: ../jockey/ui.py:322 +msgid "_Remove" +msgstr "_R ဖယ်ပစ်ပါ" + +#: ../jockey/ui.py:324 +msgid "_Deactivate" +msgstr "_Deactivate" + +#: ../jockey/ui.py:326 +msgid "This driver is activated and currently in use." +msgstr "This driver is activated and currently in use." + +#: ../jockey/ui.py:330 +msgid "You need to restart the computer to activate this driver." +msgstr "You need to restart the computer to activate this driver." + +#: ../jockey/ui.py:332 +msgid "This driver is activated but not currently in use." +msgstr "This driver is activated but not currently in use." + +#: ../jockey/ui.py:334 +msgid "_Activate" +msgstr "_Activate" + +#: ../jockey/ui.py:338 +msgid "This driver was just disabled, but is still in use." +msgstr "This driver was just disabled, but is still in use." + +#: ../jockey/ui.py:340 +msgid "A different version of this driver is in use." +msgstr "A different version of this driver is in use." + +#: ../jockey/ui.py:342 +msgid "This driver is not activated." +msgstr "This driver is not activated." + +#: ../jockey/ui.py:362 +msgid "Check for newly used or usable drivers and notify the user." +msgstr "Check for newly used or usable drivers and notify the user." + +#: ../jockey/ui.py:365 +msgid "Query driver databases for newly available or updated drivers." +msgstr "Query driver databases for newly available or updated drivers." + +#: ../jockey/ui.py:368 +msgid "List available drivers and their status." +msgstr "List available drivers and their status." + +#: ../jockey/ui.py:371 +msgid "Enable drivers that can be automatically installed." +msgstr "" + +#: ../jockey/ui.py:374 +msgid "List hardware identifiers from this system." +msgstr "" + +#: ../jockey/ui.py:377 +msgid "Enable a driver" +msgstr "" + +#: ../jockey/ui.py:380 +msgid "Disable a driver" +msgstr "" + +#: ../jockey/ui.py:383 +msgid "Ask for confirmation for --enable/--disable" +msgstr "" + +#: ../jockey/ui.py:386 +msgid "" +"Check if there is a graphics driver available that supports composite and " +"offer to enable it" +msgstr "" +"Check if there is a graphics driver available that supports composite and " +"offer to enable it" + +#: ../jockey/ui.py:391 +msgid "" +"Only manage free/nonfree drivers. By default, all available drivers with any " +"license are presented." +msgstr "" +"Only manage free/nonfree drivers. By default, all available drivers with any " +"license are presented." + +#: ../jockey/ui.py:395 +msgid "Run as session D-BUS server." +msgstr "Run as session D-BUS server." + +#: ../jockey/ui.py:397 +msgid "" +"Do not use D-BUS for communicating with the backend. Needs root privileges." +msgstr "" +"Do not use D-BUS for communicating with the backend. Needs root privileges." + +#: ../jockey/ui.py:399 +msgid "" +"Use a different target kernel version than the currently running one. This " +"is only relevant with --no-dbus." +msgstr "" +"Use a different target kernel version than the currently running one. This " +"is only relevant with --no-dbus." + +#: ../jockey/ui.py:539 ../jockey/ui.py:1022 +msgid "Restricted drivers available" +msgstr "Restricted drivers available" + +#: ../jockey/ui.py:540 +msgid "" +"In order to use your hardware more efficiently, you can enable drivers which " +"are not free software." +msgstr "" +"In order to use your hardware more efficiently, you can enable drivers which " +"are not free software." + +#: ../jockey/ui.py:543 +msgid "New drivers available" +msgstr "Driver အသစ်များရရှိနိုင်ပါပြီ။" + +#: ../jockey/ui.py:544 +msgid "There are new or updated drivers available for your hardware." +msgstr "" + +#: ../jockey/ui.py:548 +msgid "New restricted drivers in use" +msgstr "" + +#. %(os)s stands for the OS name. Prefix it or suffix it, +#. but do not replace it. +#: ../jockey/ui.py:551 +#, python-format +msgid "" +"In order for this computer to function properly, %(os)s is using driver " +"software that cannot be supported by %(os)s." +msgstr "" +"In order for this computer to function properly, %(os)s is using driver " +"software that cannot be supported by %(os)s." + +#: ../jockey/ui.py:577 +msgid "" +"There is no available graphics driver for your system which supports the " +"composite extension, or the current one already supports it." +msgstr "" + +#: ../jockey/ui.py:583 +msgid "Downloading and installing driver..." +msgstr "Downloading and installing driver..." + +#: ../jockey/ui.py:591 +msgid "Removing driver..." +msgstr "Driver ကိုဖြုတ်နေပါသည်။" + +#: ../jockey/ui.py:599 +msgid "Downloading and updating package indexes..." +msgstr "Downloading and updating package indexes..." + +#: ../jockey/ui.py:621 +msgid "Use --list to see available drivers" +msgstr "Use --list to see available drivers" + +#: ../jockey/ui.py:638 +msgid "Cannot change driver" +msgstr "" + +#: ../jockey/ui.py:651 +msgid "Enable driver?" +msgstr "" + +#: ../jockey/ui.py:654 +msgid "Disable driver?" +msgstr "" + +#: ../jockey/ui.py:683 +msgid "Sorry, the Jockey backend crashed. Please file a bug at:" +msgstr "" + +#: ../jockey/ui.py:684 +msgid "Trying to recover by restarting backend." +msgstr "" + +#: ../jockey/ui.py:694 +msgid "Sorry, installation of this driver failed." +msgstr "" + +#: ../jockey/ui.py:695 +msgid "Please have a look at the log file for details" +msgstr "" + +#: ../jockey/ui.py:733 +msgid "Download error" +msgstr "" + +#: ../jockey/ui.py:860 +msgid "" +"Downloading package indexes failed, please check your network status. Most " +"drivers will not be available." +msgstr "" + +#: ../jockey/ui.py:930 +#, python-format +msgid "Searching driver for %s..." +msgstr "" + +#: ../kde/jockey-kde.desktop.in.h:2 ../gtk/jockey-gtk.desktop.in.h:2 +msgid "Configure third-party and proprietary drivers" +msgstr "Configure third-party and proprietary drivers" + +#: ../examples/handlers/madwifi.py:22 ../data/handlers/madwifi.py:22 +msgid "Alternate Atheros \"madwifi\" driver" +msgstr "Alternate Atheros \"madwifi\" driver" + +#: ../examples/handlers/madwifi.py:23 ../data/handlers/madwifi.py:23 +msgid "Alternate \"madwifi\" driver for Atheros wireless LAN cards." +msgstr "Alternate \"madwifi\" driver for Atheros wireless LAN cards." + +#: ../examples/handlers/madwifi.py:24 ../data/handlers/madwifi.py:24 +msgid "" +"Only activate this driver if you have problems with your wireless LAN " +"connection.\n" +"\n" +"The free \"ath5k\" driver should work with most Atheros cards nowadays, but " +"on some computers this alternate (but proprietary) driver still works " +"better, or at all." +msgstr "" +"Only activate this driver if you have problems with your wireless LAN " +"connection.\n" +"\n" +"The free \"ath5k\" driver should work with most Atheros cards nowadays, but " +"on some computers this alternate (but proprietary) driver still works " +"better, or at all." + +#: ../examples/handlers/madwifi.py:38 ../data/handlers/madwifi.py:38 +#, python-format +msgid "You removed the configuration file %s" +msgstr "You removed the configuration file %s" + +#. translators: %s is the path to xorg.conf +#: ../jockey/xorg_driver.py:99 +#, python-format +msgid "Reconfiguring X.org video drivers is not possible: %s is invalid." +msgstr "" + +#: ../examples/handlers/fglrx.py:17 +msgid "AMD proprietary FGLRX graphics driver" +msgstr "AMD proprietary FGLRX graphics driver" + +#: ../examples/handlers/fglrx.py:18 +msgid "3D-accelerated proprietary graphics driver for AMD (ATI) cards." +msgstr "3D-accelerated proprietary graphics driver for AMD (ATI) cards." + +#: ../examples/handlers/fglrx.py:20 +msgid "" +"This driver is required to fully utilise the 3D potential of some AMD (ATI) " +"graphics cards, as well as provide 2D acceleration of newer cards." +msgstr "" +"This driver is required to fully utilise the 3D potential of some AMD (ATI) " +"graphics cards, as well as provide 2D acceleration of newer cards." + +#: ../examples/handlers/sl_modem.py:15 ../data/handlers/sl_modem.py:15 +msgid "Software modem" +msgstr "Software modem" + +#: ../examples/handlers/sl_modem.py:17 ../data/handlers/sl_modem.py:17 +msgid "" +"This driver enables the usage of many software modems, as commonly found in " +"laptops.\n" +"\n" +"If this driver is not enabled, you will not be able to use your modem." +msgstr "" +"This driver enables the usage of many software modems, as commonly found in " +"laptops.\n" +"\n" +"If this driver is not enabled, you will not be able to use your modem." + +#: ../examples/handlers/vmware-client.py:17 +#: ../data/handlers/vmware-client.py:17 +msgid "VMWare Client Tools" +msgstr "VMWare Client Tools" + +#: ../examples/handlers/vmware-client.py:18 +#: ../data/handlers/vmware-client.py:18 +msgid "Install VMWare client drivers and tools" +msgstr "VMWare client drivers and tool များကိုသွင်းမည်။" + +#: ../examples/handlers/vmware-client.py:19 +#: ../data/handlers/vmware-client.py:19 +msgid "" +"Install the VMWare client drivers and tools for your VMWare based Ubuntu " +"installation.\n" +"\n" +"This should help you use Ubuntu in your VM." +msgstr "" +"Install the VMWare client drivers and tools for your VMWare based Ubuntu " +"installation.\n" +"\n" +"This should help you use Ubuntu in your VM." + +#: ../backend/jockey-backend.py:32 +msgid "Enable debugging messages." +msgstr "Enable debugging messages." + +#: ../backend/jockey-backend.py:35 +msgid "Write logging messages to a file instead to stderr." +msgstr "Write logging messages to a file instead to stderr." + +#: ../backend/jockey-backend.py:38 +msgid "Timeout for D-BUS service (default: 600, 0: run forever)" +msgstr "Timeout for D-BUS service (default: 600, 0: run forever)" + +#: ../backend/jockey-backend.py:41 +msgid "Add a custom handler directory." +msgstr "Add a custom handler directory." + +#: ../backend/jockey-backend.py:44 +msgid "Run on session D-BUS (only for testing)" +msgstr "Run on session D-BUS (only for testing)" + +#: ../backend/jockey-backend.py:46 +msgid "Use a different target kernel version than the currently running one." +msgstr "" +"Use a different target kernel version than the currently running one." + +#: ../backend/com.ubuntu.devicedriver.policy.in.h:1 +msgid "Get information about local device drivers" +msgstr "" + +#: ../backend/com.ubuntu.devicedriver.policy.in.h:2 +msgid "To query the device drivers, you need to authenticate." +msgstr "" + +#: ../backend/com.ubuntu.devicedriver.policy.in.h:3 +msgid "" +"Check for newly available drivers for, and used drivers on this system" +msgstr "" + +#: ../backend/com.ubuntu.devicedriver.policy.in.h:4 +msgid "To check the driver status, you need to authenticate." +msgstr "" + +#: ../backend/com.ubuntu.devicedriver.policy.in.h:5 +msgid "" +"Query local and remote driver databases for updated drivers for the system" +msgstr "" + +#: ../backend/com.ubuntu.devicedriver.policy.in.h:6 +msgid "To query the driver databases for updates, you need to authenticate." +msgstr "" + +#: ../backend/com.ubuntu.devicedriver.policy.in.h:7 +msgid "Install or remove device drivers" +msgstr "" + +#: ../backend/com.ubuntu.devicedriver.policy.in.h:8 +msgid "To install or remove device drivers, you need to authenticate." +msgstr "" + +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 +msgid "NVIDIA accelerated graphics driver" +msgstr "" + +#: ../examples/handlers/nvidia.py:27 +msgid "3D-accelerated proprietary graphics driver for NVIDIA cards." +msgstr "" + +#: ../examples/handlers/nvidia.py:29 +msgid "" +"This driver is required to fully utilise the 3D potential of NVIDIA graphics " +"cards, as well as provide 2D acceleration of newer cards.\n" +"\n" +"If you wish to enable desktop effects, this driver is required.\n" +"\n" +"If this driver is not enabled, you will not be able to enable desktop " +"effects and will not be able to run software that requires 3D acceleration, " +"such as some games." +msgstr "" + +#~ msgid "ATI/AMD proprietary FGLRX graphics driver" +#~ msgstr "ATI/AMD proprietary FGLRX graphics driver" + +#~ msgid "3D-accelerated proprietary graphics driver for ATI cards." +#~ msgstr "3D-accelerated proprietary graphics driver for ATI cards." + +#~ msgid "" +#~ "This driver is required to fully utilise the 3D potential of some ATI " +#~ "graphics cards, as well as provide 2D acceleration of newer cards." +#~ msgstr "" +#~ "This driver is required to fully utilise the 3D potential of some ATI " +#~ "graphics cards, as well as provide 2D acceleration of newer cards." --- jockey-0.9.7.orig/po/id.po +++ jockey-0.9.7/po/id.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-08-24 03:30+0000\n" "Last-Translator: Muhammad Radifar \n" "Language-Team: Indonesian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: id\n" #: ../text/jockey-text.py:72 @@ -42,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -520,7 +519,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "" --- jockey-0.9.7.orig/po/sr.po +++ jockey-0.9.7/po/sr.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: restricted-manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-10-31 21:01+0000\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Launchpad Serbian Translators\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" "Language: sr\n" #: ../text/jockey-text.py:72 @@ -43,13 +43,9 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." -msgstr "" -"Не могу да се повежем на Д-БAС,\"+ \" молим " -"користите опцију „--no-dbus“ као администратор да\"+ " -" \" користите џокеја без истог." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." +msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -587,7 +583,7 @@ "Да бисте инсталирали или уклонили управљачке програме уређаја, требате да " "потврдите идентитет." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "НВИДИА управљачки програм са убрзањем графике" --- jockey-0.9.7.orig/po/bo.po +++ jockey-0.9.7/po/bo.po @@ -6,16 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: jockey\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-02-28 09:59+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Tibetan \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" +"Language: bo\n" #: ../text/jockey-text.py:72 msgid "Please enter 'y' or 'n' and press Enter" @@ -41,9 +42,8 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." msgstr "" #: ../jockey/ui.py:132 ../jockey/ui.py:145 @@ -565,7 +565,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "" -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA སྒུལ་གཏོང་འགྲོས་སྣོན་པར་རིས" --- jockey-0.9.7.orig/po/en_AU.po +++ jockey-0.9.7/po/en_AU.po @@ -7,15 +7,16 @@ msgstr "" "Project-Id-Version: jockey\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-08 12:28+0100\n" +"POT-Creation-Date: 2012-03-05 06:47+0100\n" "PO-Revision-Date: 2011-10-12 15:29+0000\n" "Last-Translator: Hew McLachlan \n" "Language-Team: English (Australia) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-01-10 05:18+0000\n" -"X-Generator: Launchpad (build 14640)\n" +"X-Launchpad-Export-Date: 2012-03-06 04:37+0000\n" +"X-Generator: Launchpad (build 14900)\n" +"Language: \n" #: ../text/jockey-text.py:72 msgid "Please enter 'y' or 'n' and press Enter" @@ -41,13 +42,11 @@ #: ../jockey/ui.py:121 msgid "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." -msgstr "" -"Cannot connect to D-BUS,\"+ \" please use the --" -"no-dbus option as root to\"+ \" use jockey " -"without it." +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." +msgstr "" +"Cannot connect to D-BUS, please use the --no-dbus option as root to use " +"jockey without it." #: ../jockey/ui.py:132 ../jockey/ui.py:145 msgid "Searching for available drivers..." @@ -560,7 +559,7 @@ msgid "To install or remove device drivers, you need to authenticate." msgstr "To install or remove device drivers, you need to authenticate." -#: ../data/handlers/nvidia.py:28 ../examples/handlers/nvidia.py:26 +#: ../examples/handlers/nvidia.py:26 ../data/handlers/nvidia.py:28 msgid "NVIDIA accelerated graphics driver" msgstr "NVIDIA accelerated graphics driver" --- jockey-0.9.7.orig/jockey/xorg_driver.py +++ jockey-0.9.7/jockey/xorg_driver.py @@ -17,11 +17,11 @@ '''Abstract handler for a restricted X.org graphics driver.''' import os.path, logging, re -from glob import glob - +import subprocess import XKit.xutils import XKit.xorgparser +from glob import glob from handlers import KernelModuleHandler from jockey.oslib import OSLib @@ -30,13 +30,18 @@ #--------------------------------------------------------------------# +_has_hybrid_gfx = None +_supports_hybrid_gfx = None + class XorgDriverHandler(KernelModuleHandler): '''Abstract class for a restricted X.org graphics driver.''' def __init__(self, backend, module, driver_package, xorg_driver, alt_free_driver, extra_conf_options={}, add_modules=[], disable_modules=[], remove_modules=[], name=None, description=None, - rationale=None, do_blacklist=True): + rationale=None, do_blacklist=True, fake_pcilist=None, + fake_kernel=None, fake_xabi=None, fake_inst_func=None, + fake_apt_cache=None): '''Create handler for a particular X.org graphics driver. This usually consists of a kernel module and a driver package, plus @@ -66,6 +71,22 @@ self.disable_modules = disable_modules self.remove_modules = remove_modules + # See if the system has Hybrid Graphics and cache + # the variable + global _has_hybrid_gfx + if fake_pcilist or _has_hybrid_gfx == None: + _has_hybrid_gfx = self._has_hybrid_gfx(fake_pcilist) + self.has_hybrid_graphics = _has_hybrid_gfx + + # See if the system has Hybrid Graphics and cache + # the variable + global _supports_hybrid_gfx + if fake_inst_func or _supports_hybrid_gfx == None: + _supports_hybrid_gfx = self._supports_hybrid_gfx(fake_kernel=fake_kernel, + fake_xabi=fake_xabi, fake_inst_func=fake_inst_func, + fake_apt_cache=fake_apt_cache) + self.supports_hybrid_graphics = _supports_hybrid_gfx + if self.xorg_driver: self.old_conf = os.path.join(OSLib.inst.backup_dir, self.xorg_driver + '.oldconf') self.no_conf = os.path.join(OSLib.inst.backup_dir, self.xorg_driver + '.noconf') @@ -101,11 +122,55 @@ def available(self): if self.package: + # Ignore transitional packages + if OSLib.inst.package_transitional(self.package): + return False + cur_abi = OSLib.inst.current_xorg_video_abi() - pkg_abi = OSLib.inst.video_driver_abi(self.package) - if cur_abi and pkg_abi and cur_abi != pkg_abi: - logging.debug('XorgDriverHandler(%s, %s, %s): Disabling as package video ABI %s does not match X.org video ABI %s', - self.module, self.package, self.xorg_driver, pkg_abi, cur_abi) + pkg_abis = OSLib.inst.video_driver_abi(self.package) + if cur_abi and pkg_abis and (cur_abi not in pkg_abis): + logging.debug('XorgDriverHandler(%s, %s, %s): Disabling as package video ABI(s) %s not compatible with X.org video ABI %s', + self.module, self.package, self.xorg_driver, ', '.join(pkg_abis), cur_abi) + return False + + # Do not install drivers which don't support Quantal's + # backported xserver for precise if the new X stack is + # already installed + q_lts_xserver_installed = OSLib.inst.quantal_xserver_installed() + q_lts_xserver_supported = OSLib.inst.quantal_xserver_supported(self.package) + if q_lts_xserver_installed and not q_lts_xserver_supported: + logging.debug('XorgDriverHandler(%s, %s, %s): Disabling as package is not compatible with Q-LTS X.org', + self.module, self.package, self.xorg_driver) + return False + + # Do not install drivers which don't support Raring's + # backported xserver for precise if the new X stack is + # already installed + r_lts_xserver_installed = OSLib.inst.raring_xserver_installed() + r_lts_xserver_supported = OSLib.inst.raring_xserver_supported(self.package) + if r_lts_xserver_installed and not r_lts_xserver_supported: + logging.debug('XorgDriverHandler(%s, %s, %s): Disabling as package is not compatible with R-LTS X.org', + self.module, self.package, self.xorg_driver) + return False + + # Do not install drivers which don't support Saucy's + # backported xserver for precise if the new X stack is + # already installed + s_lts_xserver_installed = OSLib.inst.saucy_xserver_installed() + s_lts_xserver_supported = OSLib.inst.saucy_xserver_supported(self.package) + if s_lts_xserver_installed and not s_lts_xserver_supported: + logging.debug('XorgDriverHandler(%s, %s, %s): Disabling as package is not compatible with S-LTS X.org', + self.module, self.package, self.xorg_driver) + return False + + # Do not install drivers which don't support Trusty's + # backported xserver for precise if the new X stack is + # already installed + t_lts_xserver_installed = OSLib.inst.trusty_xserver_installed() + t_lts_xserver_supported = OSLib.inst.trusty_xserver_supported(self.package) + if t_lts_xserver_installed and not t_lts_xserver_supported: + logging.debug('XorgDriverHandler(%s, %s, %s): Disabling as package is not compatible with T-LTS X.org', + self.module, self.package, self.xorg_driver) return False return KernelModuleHandler.available(self) @@ -166,7 +231,132 @@ def _mod_disabled(self, module): #See whether the xorg.conf has a module set to "Disable" return self._mod_status(module, 'Disable') - + + def _has_hybrid_gfx(self, fakelist=None): + '''Look for supported Hybrid Graphics hardware''' + # Pci classes 300 301 302 380 + pattern_300 = re.compile('.*0300: *(.+):(.+) \(.+\)|' + '.*0300: *(.+):(.+)') + + pattern_301 = re.compile('.*0301: *(.+):(.+) \(.+\)|' + '.*0301: *(.+):(.+)') + + pattern_302 = re.compile('.*0302: *(.+):(.+) \(.+\)|' + '.*0302: *(.+):(.+)') + + pattern_380 = re.compile('.*0380: *(.+):(.+) \(.+\)|' + '.*0380: *(.+):(.+)') + cards = [] + intel = '8086' + amd = '1002' + nvidia = '10de' + + if fakelist: + lines = fakelist + else: + proc = subprocess.Popen(('lspci', '-n'), + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + lines = proc.communicate()[0].split('\n') + + # Let's look for devices in the different pci classes + for line in lines: + m_300 = pattern_300.match(line) + m_301 = pattern_301.match(line) + m_302 = pattern_302.match(line) + m_380 = pattern_380.match(line) + if m_300: + vendor = m_300.group(1) and \ + m_300.group(1).strip().lower() or \ + m_300.group(3).strip().lower() + cards.append(vendor) + continue + if m_301: + vendor = m_301.group(1) and \ + m_301.group(1).strip().lower() or \ + m_301.group(3).strip().lower() + cards.append(vendor) + continue + if m_302: + vendor = m_302.group(1) and \ + m_302.group(1).strip().lower() or \ + m_302.group(3).strip().lower() + cards.append(vendor) + continue + if m_302: + vendor = m_302.group(1) and \ + m_302.group(1).strip().lower() or \ + m_302.group(3).strip().lower() + cards.append(vendor) + continue + if m_380: + vendor = m_380.group(1) and \ + m_380.group(1).strip().lower() or \ + m_380.group(3).strip().lower() + cards.append(vendor) + continue + + return (len(cards) > 1 and + (intel in cards and nvidia in cards) or + (intel in cards and amd in cards) or + (cards.count(amd) > 1)) + + def _supports_hybrid_gfx(self, fake_kernel=None, + fake_xabi=None, + fake_inst_func=None, + fake_apt_cache=None): + '''See if the system supports Hybrid Graphics''' + if fake_inst_func: + is_installed = fake_inst_func + else: + is_installed = OSLib.inst.package_installed + + if fake_kernel: + kernel = (fake_kernel and fake_kernel or + os.uname()[2]) + else: + kernel = os.uname()[2] + + # Strip ABI and label + if '-' in kernel: + kernel = kernel[:kernel.find('-')] + # Get linux major and minor version + major, minor = kernel.split('.')[:2] + major = int(major) + minor = int(minor) + + # the backported Raring and Saucy kernels + lts_raring = is_installed('linux-image-generic-lts-raring', + fake_apt_cache) + lts_saucy = is_installed('linux-image-generic-lts-saucy', + fake_apt_cache) + lts_trusty = is_installed('linux-image-generic-lts-trusty', + fake_apt_cache) + + # Get the xserver ABI + x_abi = (fake_xabi and int(fake_xabi) or + int(OSLib.inst.current_xorg_video_abi().split('-')[-1])) + + # We don't want xserver-xorg-core-lts-quantal + # in spite of its ABI + x_lts_quantal = is_installed('xserver-xorg-core-lts-quantal', + fake_apt_cache) + + logging.debug('linux-lts-raring installed: %s\n' + 'linux-lts-saucy installed: %s\n' + 'linux-lts-trusty installed: %s\n' + 'linux minor version: %d\n' + 'xserver ABI: %d\n' + 'xserver-lts-quantal: %s'% (lts_raring, + lts_saucy, + lts_trusty, + minor, + x_abi, + x_lts_quantal)) + # X ABI 13 is not too strict a requirement + return ((lts_raring or lts_saucy or lts_trusty or minor >= 9) and + (x_abi >= 13 and not x_lts_quantal)) + def enable(self): if not self.xorg_conf: logging.error('XorgDriverHandler.enable(): invalid xorg.conf, skipping') --- jockey-0.9.7.orig/jockey/backend.py +++ jockey-0.9.7/jockey/backend.py @@ -26,7 +26,7 @@ import dbus import dbus.service import dbus.mainloop.glib -from gi.repository import GLib +from gi.repository import GObject from jockey.oslib import OSLib import detection, xorg_driver @@ -75,7 +75,7 @@ _h_exception_exc = exception loop.quit() - loop = GLib.MainLoop() + loop = GObject.MainLoop() global _h_reply_result, _h_exception_exc _h_reply_result = None _h_exception_exc = None @@ -209,7 +209,9 @@ self._check_polkit_privilege(sender, conn, 'com.ubuntu.devicedriver.info') if mode == 'any': - return self.handlers.keys() + handler_names = self.handlers.keys() + handler_names.sort() + return handler_names if mode not in ('free', 'nonfree'): raise InvalidModeException( @@ -665,13 +667,13 @@ once the server is ready to take requests. ''' dbus.service.Object.__init__(self, self.bus, '/DeviceDriver') - self.main_loop = GLib.MainLoop() + self.main_loop = GObject.MainLoop() self._timeout = False if timeout: def _t(): self.main_loop.quit() return True - GLib.timeout_add(timeout * 1000, _t) + GObject.timeout_add(timeout * 1000, _t) # send parent process a signal that we are ready now if send_usr1: @@ -812,8 +814,8 @@ try: # we don't need is_challenge return here, since we call with AllowUserInteraction (is_auth, _, details) = self.polkit.CheckAuthorization( - ('unix-process', {'pid': dbus.UInt32(pid, variant_level=1), - 'start-time': dbus.UInt64(0, variant_level=1)}), + ('system-bus-name', {'name': dbus.String(sender, + variant_level = 1)}), privilege, {'': ''}, dbus.UInt32(1), '', timeout=600) except dbus.DBusException as e: if e._dbus_error_name == 'org.freedesktop.DBus.Error.ServiceUnknown': --- jockey-0.9.7.orig/jockey/oslib.py +++ jockey-0.9.7/jockey/oslib.py @@ -1,4 +1,4 @@ -# -*- coding: UTF-8 -*- +# -*- coding: utf-8 -*- # (c) 2007 Canonical Ltd. # # This program is free software; you can redistribute it and/or modify @@ -20,6 +20,27 @@ import fcntl, os, subprocess, sys, logging, re, tempfile, time, shutil from glob import glob +import warnings +warnings.simplefilter('ignore', FutureWarning) +import apt + +from jockey.kerneldetection import KernelDetection + +class _CapturedInstallProgress(apt.InstallProgress): + def __init__(self): + apt.InstallProgress.__init__(self) + self.out = None + + def fork(self): + '''Reroute stdout/stderr to files, so that we can log them''' + + self.out = tempfile.TemporaryFile() + p = os.fork() + if p == 0: + os.dup2(self.out.fileno(), sys.stdout.fileno()) + os.dup2(self.out.fileno(), sys.stderr.fileno()) + return p + class OSLib: '''Encapsulation of operating system/Linux distribution specific operations.''' @@ -104,74 +125,106 @@ #self.gpg_key_server = 'keys.gnupg.net' self.gpg_key_server = 'hkp://keyserver.ubuntu.com:80' - # Package which provides include files for the currently running - # kernel. If the system ensures that kernel headers are always - # available, or being pulled in via dependencies (and there are not - # multiple kernel flavors), it is ok to set this to "None". This should - # use self.target_kernel instead of os.uname()[2]. - self.kernel_header_package = None + # We want to install the linux flavour metapackage here, to ensure + # upgrades will keep working. + kernel_detection = KernelDetection() + self.kernel_header_package = kernel_detection.get_linux_metapackage() + + self.apt_show_cache = {} + self.apt_sources = '/etc/apt/sources.list' + self.apt_jockey_source = '/etc/apt/sources.list.d/jockey.list' + self.apt_trusted_keyring = '/etc/apt/trusted.gpg.d/jockey-drivers.gpg' + + self._current_xorg_video_abi = None + self._quantal_xserver = 'xserver-xorg-core-lts-quantal' + self._raring_xserver = 'xserver-xorg-core-lts-raring' + self._saucy_xserver = 'xserver-xorg-core-lts-saucy' + self._trusty_xserver = 'xserver-xorg-core-lts-trusty' # # The following package related functions use PackageKit; if that does not # work for your distribution, they must be reimplemented # + def _apt_show(self, package): + '''Return apt-cache show output, with caching. + + Return None if the package does not exist. + ''' + try: + return self.apt_show_cache[package] + except KeyError: + apt = subprocess.Popen(['apt-cache', 'show', package], + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + out = apt.communicate()[0].strip() + if apt.returncode == 0 and out: + result = out + else: + result = None + self.apt_show_cache[package] = result + return result + def is_package_free(self, package): '''Return if given package is free software.''' - pkcon = subprocess.Popen(['pkcon', '--filter=newest', - 'get-details', package], stdin=subprocess.PIPE, - stdout=subprocess.PIPE, stderr=subprocess.PIPE) - # we send an "1" to select package if several versions - # are available (--filter is broken in at least Fedora 10) - out = pkcon.communicate('1\n')[0] - m = re.search("^\s*license:\s*'?(.*)'?$", out, re.M) - if m: - # TODO: check more licenses here - return m.group(1).lower().startswith('gpl') or \ - m.group(1).lower() in ('free', 'bsd', 'mpl') - else: - raise ValueError('package %s does not exist' % package) + # TODO: this only works for packages in the official archive + out = self._apt_show(package) + if out: + for l in out.splitlines(): + if l.startswith('Section:'): + s = l.split()[-1] + return not (s.startswith('restricted') or s.startswith('multiverse')) + + raise ValueError('package %s does not exist' % package) - def package_installed(self, package): + def package_installed(self, package, *args): '''Return if the given package is installed.''' - pkcon = subprocess.Popen(['pkcon', 'resolve', package], + dpkg = subprocess.Popen(["dpkg-query", "-W", "-f${Status}", package], stdout=subprocess.PIPE, stderr=subprocess.PIPE) - out = pkcon.communicate()[0] - return pkcon.returncode == 0 and '\ninstalled ' in out.lower() + out = dpkg.communicate()[0] + return dpkg.returncode == 0 and out.split()[-1] == "installed" def package_description(self, package): '''Return a tuple (short_description, long_description) for a package. This should raise a ValueError if the package is not available. ''' - pkcon = subprocess.Popen(['pkcon', '--filter=newest', - 'get-details', package], stdin=subprocess.PIPE, - stdout=subprocess.PIPE, stderr=subprocess.PIPE) - # we send an "1" to select package if several versions - # are available (--filter is broken in at least Fedora 10) - out = pkcon.communicate('1\n')[0] - m = re.search("^\s*description:\s*'?(.*?)'?^\s+", out, re.M | re.S) - if m: - # TODO: short description (not accessible with pkcon) - return (package, m.group(1).replace('\n', '')) - else: - raise ValueError('package %s does not exist' % package) + out = self._apt_show(package) + if out: + lines = out.splitlines() + start = 0 + while start < len(lines)-1: + if lines[start].startswith('Description'): + break + start += 1 + else: + raise SystemError('failed to parse package description from ' + '\n'.join(lines)) + + short = lines[start].split(' ', 1)[1] + long = '' + for l in lines[start+1:]: + if l == ' .': + long += '\n\n' + elif l.startswith(' '): + long += ' ' + l.lstrip() + else: + break + + return (short, long) + + raise ValueError('package %s does not exist' % package) def package_files(self, package): '''Return a list of files shipped by a package. This should raise a ValueError if the package is not installed. ''' - pkcon = subprocess.Popen(['pkcon', '--filter=installed', - 'get-files', package], stdin=subprocess.PIPE, + pkcon = subprocess.Popen(['dpkg', '-L', package], stdout=subprocess.PIPE, stderr=subprocess.PIPE) - # we send an "1" to select package if several versions - # are available (--filter is broken in at least Fedora 10) - out = pkcon.communicate('1\n')[0] - if pkcon.returncode == 0 and '\n ' in out: - return [l.strip() for l in out.splitlines() if l.startswith(' ')] + out = pkcon.communicate()[0] + if pkcon.returncode == 0: + return out.splitlines() else: raise ValueError('package %s is not installed' % package) @@ -203,48 +256,99 @@ due to bad packages should be logged, but not raise an exception, as this would just crash the backend. ''' - if repository or fingerprint: - raise NotImplementedError('PackageKit default implementation does not currently support repositories or fingerprints') + class MyFetchProgress(apt.FetchProgress): + def __init__(self, callback): + apt.FetchProgress.__init__(self) + self.callback = callback + + def pulse(self): + # consider download as 40% of the total progress for installation + logging.debug('download progress %s %f' % (pkg, self.percent)) + return not self.callback('download', int(self.percent/2.5+10.5), 100) + + class MyInstallProgress(_CapturedInstallProgress): + def __init__(self, callback): + _CapturedInstallProgress.__init__(self) + self.callback = callback + + def statusChange(self, pkg, percent, status): + # consider install as 50% of the total progress for installation + logging.debug('install progress %s %f' % (pkg, percent)) + self.callback('install', int(percent/4+50.5), 100) + + logging.debug('Installing package: %s', package) + if progress_cb: + progress_cb('download', 0, 100.0) + + if repository: + if not self.repository_enabled(repository): + logging.debug('install_package(): adding repository %s', repository) + self._add_repository(repository, fingerprint, progress_cb) + repository_added = True + else: + logging.debug('install_package(): repository %s already active', repository) + repository_added = False - # this will check if the package exists - self.package_description(package) + os.environ['DEBIAN_FRONTEND'] = 'noninteractive' + # Disconnect from any running Debconf instance. + try: + del os.environ['DEBIAN_HAS_FRONTEND'] + except KeyError: + pass + try: + del os.environ['DEBCONF_USE_CDEBCONF'] + except KeyError: + pass + os.environ['PATH'] = '/sbin:/usr/sbin:/bin:/usr/bin' + apt.apt_pkg.config.set('DPkg::options::','--force-confnew') - pkcon = subprocess.Popen(['pkcon', 'install', '--plain', '-y', package], - stdin=subprocess.PIPE, stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - - # we send an "1" to select package if several versions - # are available - print >>pkcon.stdin, "1\n" - - re_progress = re.compile('Percentage:\t(\d+)') - - phase = None - err = line = '' - fail = False - while pkcon.poll() == None or line != '': - line = pkcon.stdout.readline() - if fail: - err += line - if 'Downloading packages' in line: - phase = 'download' - elif 'Testing changes' in line or 'Installing packages' in line: - phase = 'install' - elif progress_cb and 'Percentage' in line: - m = re_progress.search(line) - if m and phase: - progress_cb(phase, int(m.group(1)), 100) + c = apt.Cache() + try: + try: + pkg = c[package] + origins = pkg.candidate.origins + except (KeyError, AttributeError): + raise ValueError('Package %s does not exist' % package) + + # if we have a binary package, we require a trusted origin; if we + # don't have one, and we added a repository, remove it again + # note: pkg.candidate.architecture switched away from "all" in Ubuntu 11.04 + if pkg.candidate.record['Architecture'] != 'all' and \ + not pkg.candidate.uri.startswith('file:/'): + for o in origins: + if o.trusted: + break else: - progress_cb(phase or 'download', -1, -1) - elif 'WARNING' in line: - fail = True - elif 'transaction-error' in line or 'failed:' in line: - err += line - - err += pkcon.stderr.read() - if pkcon.wait() != 0 or not self.package_installed(package): - logging.error('package %s failed to install: %s' % (package, err)) - + logging.error('Binary package %s has no trusted origin, rejecting', package) + if repository and repository_added: + self._remove_repository(repository) + return + + pkg.markInstall() + inst_p = progress_cb and MyInstallProgress(progress_cb) or None + try: + try: + orig_excepthook = sys.excepthook + sys.excepthook = sys.__excepthook__ + c.commit(progress_cb and MyFetchProgress(progress_cb) or None, inst_p) + finally: + sys.excepthook = orig_excepthook + if inst_p and inst_p.out: + inst_p.out.seek(0) + apt_out = inst_p.out.read().decode('UTF-8', errors='replace') + inst_p.out.close() + logging.debug(apt_out) + else: + apt_out = '' + except SystemError as e: + logging.error('Package failed to install:\n' + apt_out) + return + + except apt.cache.FetchCancelledException as e: + return + except (apt.cache.LockFailedException, apt.cache.FetchFailedException) as e: + logging.error('Package fetching failed: %s', str(e)) + def remove_package(self, package, progress_cb): '''Uninstall the given package. @@ -258,35 +362,49 @@ Any removal failure should be raised as a SystemError. ''' - pkcon = subprocess.Popen(['pkcon', 'remove', '--plain', '-y', package], - stdout=subprocess.PIPE, stderr=subprocess.PIPE) + os.environ['DEBIAN_FRONTEND'] = 'noninteractive' + os.environ['PATH'] = '/sbin:/usr/sbin:/bin:/usr/bin' + + class MyInstallProgress(_CapturedInstallProgress): + def __init__(self, callback): + _CapturedInstallProgress.__init__(self) + self.callback = callback + + def statusChange(self, pkg, percent, status): + logging.debug('remove progress statusChange %s %f' % (pkg, percent)) + self.callback(percent, 100.0) - re_progress = re.compile('Percentage:\t(\d+)') + logging.debug('Removing package: %s', package) - have_progress = False - err = line = '' - fail = False - while pkcon.poll() == None or line != '': - line = pkcon.stdout.readline() - if fail: - err += line - if 'Removing packages' in line: - have_progress = True - elif progress_cb and 'Percentage' in line: - m = re_progress.search(line) - if m and have_progress: - progress_cb(int(m.group(1)), 100) + c = apt.Cache() + try: + try: + c[package].markDelete() + except KeyError: + logging.debug('Package %s does not exist, aborting', package) + return False + inst_p = progress_cb and MyInstallProgress(progress_cb) or None + try: + try: + c.commit(None, inst_p) + finally: + if inst_p and inst_p.out: + inst_p.out.seek(0) + apt_out = inst_p.out.read().decode('UTF-8', errors='replace') + inst_p.out.close() + logging.debug(apt_out) + else: + apt_out = None + except SystemError as e: + if apt_out: + raise SystemError('Package failed to remove:\n' + apt_out) else: - progress_cb(-1, -1) - elif 'WARNING' in line: - fail = True - elif 'transaction-error' in line or 'failed:' in line: - err += line - - err += pkcon.stderr.read() - pkcon.wait() - if self.package_installed(package): - raise SystemError('package %s failed to remove: %s' % (package, err)) + raise + except apt.cache.LockFailedException as e: + logging.debug('could not lock apt cache, aborting: %s', str(e)) + raise SystemError, str(e) + + return True def has_repositories(self): '''Check if package repositories are available. @@ -294,12 +412,10 @@ This might not be the case after a fresh installation, when package indexes haven't been downloaded yet. ''' - pkcon = subprocess.Popen(['pkcon', 'get-details', 'bash'], + apt_policy = subprocess.Popen(['apt-cache', 'policy', 'dkms'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) - out = pkcon.communicate()[0] - # PK can't detect package sizes without repositories - m = re.search("^\s*size:\s*0 bytes$", out, re.M) - return m == None + out = apt_policy.communicate()[0] + return '://' in out or 'file:/' in out def update_repository_indexes(self, progress_cb): '''Download package repository indexes. @@ -311,14 +427,24 @@ regularly. Passes '-1' for current and/or total if time cannot be determined. ''' - pkcon = subprocess.Popen(['pkcon', 'refresh'], - stdout=subprocess.PIPE, stderr=subprocess.PIPE) + os.environ['PATH'] = '/sbin:/usr/sbin:/bin:/usr/bin' + + class MyProgress(apt.FetchProgress): + def __init__(self, callback): + apt.FetchProgress.__init__(self) + self.callback = callback + + def pulse(self): + #logging.debug('index download progress %f' % self.percent) + self.callback(self.percent, 100.0) + + c = apt.Cache() + try: + c.update(progress_cb and MyProgress(progress_cb) or None) + except apt.cache.LockFailedException as e: + logging.debug('could not lock apt cache, aborting: %s', str(e)) + raise SystemError(str(e)) - while pkcon.poll() == None: - time.sleep(0.3) - if progress_cb: - progress_cb(-1, -1) - pkcon.wait() return self.has_repositories() def packaging_system(self): @@ -420,7 +546,17 @@ def repository_enabled(self, repository): '''Check if given repository is enabled.''' - raise NotImplementedError('subclasses need to implement this') + for f in [self.apt_sources] + glob(self.apt_sources + '.d/*.list'): + try: + logging.debug('repository_enabled(%s): checking %s', repository, f) + for line in open(f): + if line.strip() == repository: + logging.debug('repository_enabled(%s): match', repository) + return True + except IOError: + pass + logging.debug('repository_enabled(%s): no match', repository) + return False def ui_help_available(self, ui): '''Return if help is available. @@ -428,7 +564,7 @@ This gets the current UI object passed, which can be used to determine whether GTK/KDE is used, etc. ''' - return False + return os.access('/usr/bin/yelp', os.X_OK) def ui_help(self, ui): '''The UI's help button was clicked. @@ -437,7 +573,10 @@ appropriate topic, etc. This gets the current UI object passed, which can be used to determine whether GTK/KDE is used, etc. ''' - pass + if 'gtk' in str(ui.__class__).lower(): + import gobject + gobject.spawn_async(['yelp', 'help:ubuntu-help/hardware-driver-proprietary'], + flags=gobject.SPAWN_SEARCH_PATH) # # The following functions have a reasonable default implementation for @@ -471,7 +610,18 @@ Note that modules which are ignored here, but covered by a custom handler will still be considered. ''' - return set() + # try to get a *.ko file list from the main kernel package to avoid testing + # known-free drivers + dpkg = subprocess.Popen(['dpkg', '-L', 'linux-image-' + os.uname()[2]], + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + out = dpkg.communicate()[0] + result = set() + if dpkg.returncode == 0: + for l in out.splitlines(): + if l.endswith('.ko'): + result.add(os.path.splitext(os.path.basename(l))[0].replace('-', '_')) + + return result def module_blacklisted(self, module): '''Check if a module is on the modprobe blacklist.''' @@ -600,9 +750,12 @@ The default implementation does nothing. ''' - pass + try: + subprocess.call(['/usr/share/update-notifier/notify-reboot-required']) + except OSError: + pass - def package_header_modaliases(self): + def package_header_modaliases(self, cache=None): '''Get modalias map from package headers. Driver packages may declare the modaliases that they support in a @@ -612,7 +765,39 @@ If this is not supported, simply return an empty dictionary here. ''' - return {} + result = {} + if cache is None: + cache = apt.Cache() + + # get the system architecture, to avoid getting non-native multi-arch + # packages + dpkg = subprocess.Popen(['dpkg', '--print-architecture'], + stdout=subprocess.PIPE) + system_architecture = dpkg.communicate()[0].strip() + assert dpkg.returncode == 0 + + for package in cache: + if package.architecture() != system_architecture: + continue + try: + m = package.candidate.record['Modaliases'] + except (KeyError, AttributeError): + continue + + try: + for part in m.split(')'): + part = part.strip(', ') + if not part: + continue + module, lst = part.split('(') + for alias in lst.split(','): + result.setdefault(package.name, {}).setdefault(module, + []).append(alias.strip()) + except ValueError: + logging.error('Package %s has invalid modalias header: %s' % ( + package.name, m)) + + return result def ssl_cert_file(self): '''Get file with trusted SSL certificates. @@ -658,17 +843,222 @@ If this returns None, ABI checking is disabled. ''' - return None + binary_name = 'xserver-xorg-core' + suffix = '' + if self.quantal_xserver_installed(): + suffix = '-lts-quantal' + elif self.raring_xserver_installed(): + suffix = '-lts-raring' + elif self.saucy_xserver_installed(): + suffix = '-lts-saucy' + elif self.trusty_xserver_installed(): + suffix = '-lts-trusty' + binary_name = '%s%s' % (binary_name, suffix) + if not self._current_xorg_video_abi: + dpkg = subprocess.Popen(['dpkg', '-s', binary_name], + stdout=subprocess.PIPE) + out = dpkg.communicate()[0] + if dpkg.returncode == 0: + m = re.search('^Provides: .*(xorg-video-abi-\w+).*', out, re.M) + if m: + self._current_xorg_video_abi = m.group(1) + + return self._current_xorg_video_abi def video_driver_abi(self, package): - '''Return video ABI for an X.org driver package. + '''Return video ABI list for an X.org driver package. For an X.org video driver to actually work it must be built against the currently used X.org driver ABI, otherwise it will cause crashes. This method returns the video ABI for a driver package. If it is not None, - it must match current_xorg_video_abi() for this driver to be offered - for installation. - + one of the items it must match current_xorg_video_abi() for this driver + to be offered for installation. + If this returns None, ABI checking is disabled. ''' - return None + abi = None + process = subprocess.Popen(['apt-cache', 'show', package], + stdout=subprocess.PIPE) + out = process.communicate()[0] + abis = [] + if process.returncode == 0: + m = re.search('^Depends: (.*)$', out, re.M) + if m: + for dep in m.group(1).split(','): + if dep.strip()[:15] != 'xorg-video-abi-': + continue + abi_pkgs = dep.split('|') + for abi_pkg in abi_pkgs: + abis.append(abi_pkg.strip()) + + if len(abis)>0: + return abis + else: + return None + + def quantal_xserver_installed(self): + '''Return whether quantal's backported xserver is installed''' + return self.package_installed(self._quantal_xserver) + + def quantal_xserver_supported(self, package): + '''Return whether the package supports quantal's backported xserver''' + process = subprocess.Popen(['apt-cache', 'show', package], + stdout=subprocess.PIPE) + out = process.communicate()[0] + if process.returncode == 0: + m = re.search('^Depends: (.*)$', out, re.M) + if m: + for dep in m.group(1).split(','): + if not dep.strip().__contains__(self._quantal_xserver): + continue + return True + return False + + def raring_xserver_installed(self): + '''Return whether raring's backported xserver is installed''' + return self.package_installed(self._raring_xserver) + + def raring_xserver_supported(self, package): + '''Return whether the package supports raring's backported xserver''' + process = subprocess.Popen(['apt-cache', 'show', package], + stdout=subprocess.PIPE) + out = process.communicate()[0] + if process.returncode == 0: + m = re.search('^Depends: (.*)$', out, re.M) + if m: + for dep in m.group(1).split(','): + if not dep.strip().__contains__(self._raring_xserver): + continue + return True + return False + + def saucy_xserver_installed(self): + '''Return whether saucy's backported xserver is installed''' + return self.package_installed(self._saucy_xserver) + + def saucy_xserver_supported(self, package): + '''Return whether the package supports saucy's backported xserver''' + process = subprocess.Popen(['apt-cache', 'show', package], + stdout=subprocess.PIPE) + out = process.communicate()[0] + if process.returncode == 0: + m = re.search('^Depends: (.*)$', out, re.M) + if m: + for dep in m.group(1).split(','): + if not dep.strip().__contains__(self._saucy_xserver): + continue + return True + return False + + def trusty_xserver_installed(self): + '''Return whether trusty's backported xserver is installed''' + return self.package_installed(self._trusty_xserver) + + def trusty_xserver_supported(self, package): + '''Return whether the package supports trusty's backported xserver''' + process = subprocess.Popen(['apt-cache', 'show', package], + stdout=subprocess.PIPE) + out = process.communicate()[0] + if process.returncode == 0: + m = re.search('^Depends: (.*)$', out, re.M) + if m: + for dep in m.group(1).split(','): + if not dep.strip().__contains__(self._trusty_xserver): + continue + return True + return False + + def package_transitional(self, package): + process = subprocess.Popen(['apt-cache', 'show', package], + stdout=subprocess.PIPE) + out = process.communicate()[0] + if process.returncode == 0: + m = re.search('.*transitional.*', out, re.M | re.I) + if m: + return True + return False + + def package_available(self, package): + devnull = open(os.devnull, 'w') + process = subprocess.Popen(['apt-cache', 'show', package], + stdout=devnull, stderr=devnull) + process.communicate() + devnull.close() + + return process.returncode == 0 + + # + # Internal helper methods + # + + def _add_repository(self, repository, fingerprint, progress_cb): + '''Add a repository. + + The format for repository is distribution specific. This function + should also download/update the package index for this repository. + + This should throw a ValueError if the repository is invalid or + inaccessible. + + fingerprint, if not None, is a GPG-style fingerprint of that + repository; if present, this method also retrieves that GPG key + from the keyservers and installs it into the packaging system. + ''' + if fingerprint: + self.import_gpg_key(self.apt_trusted_keyring, fingerprint) + + if os.path.exists(self.apt_jockey_source): + backup = self.apt_jockey_source + '.bak' + os.rename(self.apt_jockey_source, backup) + else: + backup = None + f = open(self.apt_jockey_source, 'a') + print >> f, repository.strip() + f.close() + + class MyFetchProgress(apt.FetchProgress): + def __init__(self, callback): + apt.FetchProgress.__init__(self) + self.callback = callback + + def pulse(self): + self.callback + logging.debug('index download progress %f' % self.percent) + # consider update as 10% of the total progress for installation + return not self.callback('download', int(self.percent/10+.5), 100) + + c = apt.Cache() + try: + logging.debug('_add_repository(): Updating apt lists') + c.update(progress_cb and MyFetchProgress(progress_cb) or None, + sources_list=self.apt_jockey_source) + except SystemError, e: + logging.error('_add_repository(%s): Invalid repository', repository) + if backup: + os.rename(backup, self.apt_jockey_source) + else: + os.unlink(self.apt_jockey_source) + raise ValueError(e.message) + except apt.cache.FetchCancelledException, e: + return False + except (apt.cache.LockFailedException, apt.cache.FetchFailedException), e: + logging.warning('Package fetching failed: %s', str(e)) + raise SystemError(str(e)) + + def _remove_repository(self, repository): + '''Remove a repository. + + The format for repository is distribution specific. + ''' + if not os.path.exists(self.apt_jockey_source): + return + result = [] + for line in open(self.apt_jockey_source): + if line.strip() != repository: + result.append(line) + if result: + f = open(self.apt_jockey_source, 'w') + f.write('\n'.join(result)) + f.close() + else: + os.unlink(self.apt_jockey_source) --- jockey-0.9.7.orig/jockey/ui.py +++ jockey-0.9.7/jockey/ui.py @@ -118,8 +118,8 @@ 'org.freedesktop.DBus.Error.FileNotFound', 'org.freedesktop.DBus.Error.NoServer'): if self.have_ui: - self.error_message(self._('Cannot connect to D-BUS,'+\ - ' please use the --no-dbus option as root to'+\ + self.error_message(self._('Cannot connect to D-BUS,' + ' please use the --no-dbus option as root to' ' use jockey without it.'), str(e)) else: @@ -679,7 +679,7 @@ return False except BackendCrashError: self._dbus_iface = None - self.error_message('', '%s\n\n https://launchpad.net/jockey/+filebug\n\n%s' % ( + self.error_message('', '%s\n\n ubuntu-bug jockey-common\n\n%s' % ( self._('Sorry, the Jockey backend crashed. Please file a bug at:'), self._('Trying to recover by restarting backend.'))) return False @@ -879,8 +879,8 @@ dbus_name = dbus.service.BusName(DBUS_BUS_NAME, bus) dbus.service.Object.__init__(self, bus, '/GUI') - from gi.repository import GLib - self.dbus_server_main_loop = GLib.MainLoop() + from gi.repository import GObject + self.dbus_server_main_loop = GObject.MainLoop() self.dbus_server_main_loop.run() @classmethod @@ -909,11 +909,10 @@ self.ui_init() # we want to show progress self.have_ui = True self.search_only = False - # Note: This could be set to True if we know that we only look for - # remote drivers. E. g. if you don't support local printer driver - # handlers, you could do: - #if hwid.startswith('printer_deviceid:'): - # self.search_only = True + # Ubuntu does not currently support local printer driver handlers, so + # let's speed up the lookup of remote ones + if hwid.startswith('printer_deviceid:'): + self.search_only = True b = self.backend() --- jockey-0.9.7.orig/jockey/detection.py +++ jockey-0.9.7/jockey/detection.py @@ -168,12 +168,13 @@ assert self._cache_id() self.cache_path = os.path.join(OSLib.inst.backup_dir, 'driverdb-%s.cache' % self._cache_id()) - try: - self.cache = pickle.load(open(self.cache_path, 'rb')) - except (pickle.PickleError, IOError) as e: - logging.warning('Could not open DriverDB cache %s: %s', - self.cache_path, str(e)) - self.cache = None + if os.path.exists(self.cache_path): + try: + self.cache = pickle.load(open(self.cache_path, 'rb')) + except (pickle.PickleError, IOError) as e: + logging.warning('Could not open DriverDB cache %s: %s', + self.cache_path, str(e)) + self.cache = None def query(self, hwid): '''Return a set or list of applicable DriverIDs for a HardwareID. --- jockey-0.9.7.orig/jockey/kerneldetection.py +++ jockey-0.9.7/jockey/kerneldetection.py @@ -0,0 +1,118 @@ +# +# kerneldetection.py +# +# Copyright 2013 Canonical Ltd. +# +# Author: Alberto Milone +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301, USA. + +import apt +import logging +import re + +from subprocess import Popen + + +class KernelDetection(object): + + def __init__(self, cache=None): + if cache: + self.apt_cache = cache + else: + self.apt_cache = apt.Cache() + + def _is_greater_than(self, term1, term2): + # We don't want to take into account + # the flavour + pattern = re.compile('(.+)-([0-9]+)-(.+)') + match1 = pattern.match(term1) + match2 = pattern.match(term2) + if match1: + term1 = '%s-%s' % (match1.group(1), + match1.group(2)) + term2 = '%s-%s' % (match2.group(1), + match2.group(2)) + + logging.debug('Comparing %s with %s' % (term1, term2)) + command = 'dpkg --compare-versions %s gt %s' % \ + (term1, term2) + process = Popen(command.split(' ')) + process.communicate() + return not process.returncode + + def _get_linux_metapackage(self, headers): + '''Get the linux headers or linux metapackage''' + suffix = headers and '-headers' or '' + pattern = re.compile('linux-image-(.+)-([0-9]+)-(.+)') + source_pattern = re.compile('linux-(.+)') + + metapackage = '' + version = '' + for pkg in self.apt_cache: + if ('linux-image' in pkg.name and + 'extra' not in pkg.name and + self.apt_cache[pkg.name].is_installed or + self.apt_cache[pkg.name].marked_install): + match = pattern.match(pkg.name) + # Here we filter out packages such as + # linux-generic-lts-quantal + if match: + current_version = '%s-%s' % (match.group(1), + match.group(2)) + # See if the current version is greater than + # the greatest that we've found so far + if self._is_greater_than(current_version, + version): + try: + source = self.apt_cache[pkg.name].\ + candidate.record['Source'] + except KeyError: + # Sometimes the Source key is not + # available, see LP: #1123107 + continue + + version = current_version + match_source = source_pattern.match(source) + # Set the linux-headers metapackage + if '-lts-' in source and match_source: + # This is the case of packages such as + # linux-image-3.5.0-18-generic which + # comes from linux-lts-quantal. + # Therefore the linux-headers-generic + # metapackage would be wrong here and + # we should use + # linux-headers-generic-lts-quantal + # instead + metapackage = 'linux%s-%s-%s' % ( + suffix, + match.group(3), + match_source.group(1)) + else: + # The scheme linux-headers-$flavour works + # well here + metapackage = 'linux%s-%s' % ( + suffix, + match.group(3)) + return metapackage + + def get_linux_headers_metapackage(self): + '''Get the linux headers for the newest_kernel installed''' + return self._get_linux_metapackage(True) + + def get_linux_metapackage(self): + '''Get the linux metapackage for the newest_kernel installed''' + return self._get_linux_metapackage(False) --- jockey-0.9.7.orig/backend/com.ubuntu.DeviceDriver.service +++ jockey-0.9.7/backend/com.ubuntu.DeviceDriver.service @@ -1,4 +1,4 @@ [D-BUS Service] Name=com.ubuntu.DeviceDriver -Exec=/usr/share/jockey/jockey-backend --debug -l /var/log/jockey.log +Exec=/bin/sh -c '. /etc/environment; export http_proxy https_proxy ftp_proxy; exec /usr/share/jockey/jockey-backend --debug -l /var/log/jockey.log' User=root --- jockey-0.9.7.orig/debian/control +++ jockey-0.9.7/debian/control @@ -0,0 +1,78 @@ +Source: jockey +Section: admin +Priority: optional +Build-Depends: debhelper (>= 7.0.50~), + dh-translations, + python-distutils-extra (>= 2.4), + python (>= 2.7) +Maintainer: Martin Pitt +Standards-Version: 3.9.1 +XS-Python-Version: >= 2.7 +Vcs-Bzr: https://code.launchpad.net/~ubuntu-core-dev/jockey/ubuntu + +Package: jockey-common +Architecture: all +XB-Python-Version: ${python:Versions} +Depends: ${python:Depends}, + ${misc:Depends}, + python-xkit, + python-dbus, + python-apt, + python-pycurl, + policykit-1, +Recommends: nvidia-common (>= 1:0.2.36) +Description: user interface and desktop integration for driver management + Jockey provides a user interface for configuring third-party drivers, + such as the Nvidia and ATI fglrx X.org and various Wireless LAN + kernel modules. + . + This package contains the common data shared between the frontends. + +Package: jockey-gtk +Architecture: all +Depends: ${python:Depends}, + ${misc:Depends}, + jockey-common (= ${binary:Version}), + python-gi, + gir1.2-gtk-3.0, + gir1.2-notify-0.7, + gir1.2-appindicator3-0.1, + policykit-1-gnome +Description: GNOME user interface and desktop integration for driver management + Jockey provides a user interface for configuring third-party drivers, + such as the Nvidia and ATI fglrx X.org and various Wireless LAN + kernel modules. + . + This package contains the GNOME frontend. + +Package: jockey-kde +Architecture: all +Depends: ${python:Depends}, + ${misc:Depends}, + jockey-common (= ${binary:Version}), + python-kde4, + kde-runtime, + polkit-kde-1 +Replaces: jockey-common (<= 0.5.2) +Description: KDE user interface and desktop integration for driver management + Jockey provides a user interface for configuring third-party drivers, + such as the Nvidia and ATI fglrx X.org and various Wireless LAN + kernel modules. + . + This package contains the KDE frontend. + +Package: dh-modaliases +Architecture: all +Depends: ${perl:Depends}, + ${misc:Depends} +Enhances: debhelper +Description: debhelper extension for scanning kernel module aliases + dh_modaliases is useful for packages that ship third-party kernel modules, + either in binary form, or as sources (with e. g. DKMS). It extracts the + modules' modaliases from either the compile .ko files themselves (for packages + which ship them in compiled form, using modinfo), or from a package file + debian/packagename.modaliases. + . + This enables software which is looking for missing driver packages (such as + Jockey or the operating system installer) to identify which package(s) will + provide a driver for a piece of hardware, identified by its modalias. --- jockey-0.9.7.orig/debian/pycompat +++ jockey-0.9.7/debian/pycompat @@ -0,0 +1 @@ +2 --- jockey-0.9.7.orig/debian/changelog +++ jockey-0.9.7/debian/changelog @@ -0,0 +1,2180 @@ +jockey (0.9.7-0ubuntu7.16) precise-security; urgency=medium + + * data/handlers/nvidia.py: + - Add support for nvidia-340 and nvidia-340-updates + * This package does _not_ contain the changes from 0.9.7-0ubuntu7.16 in + precise-proposed. + + -- Marc Deslauriers Mon, 21 Sep 2015 15:27:32 -0400 + +jockey (0.9.7-0ubuntu7.14) precise-proposed; urgency=low + + * jockey/oslib.py, jockey/xorg_driver.py: + - Add code to fully enable hybrid graphics when using + Saucy's LTS stack, and the future Trusty stack + (LP: #1279229). + * tests/hybridgraphics.py: + - Add tests which simulate the availability of Saucy's + and Trusty's backported stacks. + + -- Alberto Milone Wed, 12 Feb 2014 11:15:25 +0100 + +jockey (0.9.7-0ubuntu7.13) precise-proposed; urgency=low + + * jockey/xorg_driver.py, tests/hybridgraphics.py: + - Add support for systems with two or more AMD GPUs. + This is very useful now that AMD's APUs have been + released (LP: #1272311). + - Adjust the tests so that they no longer fail when + dealing with systems with multiple AMD GPUs (now + dealt with by the fglrx-pxpress package). + + -- Alberto Milone Fri, 24 Jan 2014 17:09:25 +0100 + +jockey (0.9.7-0ubuntu7.12) precise-proposed; urgency=low + + * data/handlers/nvidia.py: + - Add support for nvidia-331 and nvidia-331-updates + (LP: #1259237). + + -- Alberto Milone Tue, 21 Jan 2014 10:22:47 +0100 + +jockey (0.9.7-0ubuntu7.11) precise-security; urgency=low + + * SECURITY UPDATE: possible privilege escalation via policykit UID lookup + race. + - jockey/backend.py: pass system-bus-name as a subject instead of pid + so policykit can get the information from the system bus. + - CVE-2013-1065 + + -- Marc Deslauriers Fri, 13 Sep 2013 10:16:23 -0400 + +jockey (0.9.7-0ubuntu7.10) precise-proposed; urgency=low + + * data/handlers/fglrx.py: + - Show the driver as enabled when pxpress is in use. + Thanks to Doro Wu for the patch (LP: #1196848). + - Add handlers for -experimental-{12|13}. + - Only -experimental-13 supports hybrid graphics. + * data/handlers/nvidia.py: + - Add handlers for 319/-updates 304/-updates. + - Only 319/-updates support hybrid graphics. + - Make sure to remove the correct nvidia-settings + flavour. + * data/handlers/{fglrx|nvidia}.py: + - Add support for Hybrid Graphics (LP: #1198942): + + Driver handlers now need to state that they support + hybrid graphics and subclass either the + _NvidiaDriverHybridBase class or the FglrxDriverHybrid + class. + + Drivers which don't claim to support hybrid graphics + will not show up on hybrid systems. + + If the nvidia-prime or the fglrx-pxpress packages are + not available, the drivers won't be available on + hybrid systems. This avoids breaking systems which + require further configuration which only these two + packages provide. + + Jockey doesn't touch the xorg.conf when dealing with + hybrid graphics (as either nvidia-prime or + fglrx-pxpress will take care of it). + + Hybrid Graphics is only supported on systems which + use Raring's backported X and kernel. + * jockey/xorg_driver.py: + - Add supports_hybrid_graphics class attribute. + - Add has_hybrid_graphics class attribute. + - Add better support for faking devices and packages. + - Ignore transitional packages. + * jockey/oslib.py: + - Add package_transitional() method. + - Add package_available() method. + - Make current_xorg_video_abi take into account + backported packages. + - Catch additional arguments in package_installed(). + This gives us some flexibility when using fake + devices for testing. + - Add some checks for raring's backported xserver. + * tests/hybridgraphics.py: + - Add coverage for hybrid graphics. + * tests/oslib.py: + - Deal with the multiple video abis that drivers may + support. + - Make sure that the kernel headers are available before + failing. + * tests/sandbox.py: + - Report a more compliant fake X ABI. + - Update package_installed() to match the one in oslib.py. + + -- Alberto Milone Fri, 26 Jul 2013 10:38:06 +0200 + +jockey (0.9.7-0ubuntu7.9) precise-proposed; urgency=low + + * jockey/kerneldetection.py: + - Catch KeyError in get_linux_metapackage() (LP: #1123107). + Sometimes the "Source" key is not available. + * tests/kerneldetection.py: + - Add two tests to make sure that get_linux_metapackage() + doesn't raise a KeyError when dealing with packages + without a "Source" field and that the function doesn't + stop if one or two packages don't have the said field. + + -- Alberto Milone Tue, 16 Apr 2013 11:19:02 +0200 + +jockey (0.9.7-0ubuntu7.8) precise-proposed; urgency=low + + * Add jockey/kerneldetection.py, tests/kerneldetection.py, + tests/fakesysfs.py and tests/testarchive.py: + - This is a backport of code originally written for the + ubuntu-drivers-common package. + * jockey/oslib.py: + - Use kerneldetection.KernelDetection() to get the + linux metapackage (LP: #1123107). + + -- Alberto Milone Tue, 12 Feb 2013 16:51:27 +0100 + +jockey (0.9.7-0ubuntu7.7) precise-proposed; urgency=low + + * data/handlers/fglrx.py: + - Fix typo which caused the handler to fail (LP: #1080588). + + -- Alberto Milone Mon, 07 Jan 2013 10:55:32 +0100 + +jockey (0.9.7-0ubuntu7.6) precise-proposed; urgency=low + + * jockey/oslib.py, jockey/xorg_driver.py: + - Add some checks for quantal's backported xserver so as not to + provide drivers which don't support it (LP: #1080588). + * data/handlers/fglrx.py: + - Make sure to mark the experimental driver as such (LP: #1078290). + - Always pass "fglrx" to get the alternative name or jockey will + fail to set the correct alternative. + + -- Alberto Milone Wed, 21 Nov 2012 13:18:40 +0100 + +jockey (0.9.7-0ubuntu7.5) precise-proposed; urgency=low + + * data/handlers/fglrx.py: + - Add support for the experimental-9 flavour (LP: #1078290). + + -- Alberto Milone Tue, 13 Nov 2012 15:20:59 +0100 + +jockey (0.9.7-0ubuntu7.4) precise-proposed; urgency=low + + * data/handlers/nvidia.py: + - Add support for the experimental-310 flavour (LP: #1047681). + + -- Alberto Milone Tue, 23 Oct 2012 10:37:53 +0200 + +jockey (0.9.7-0ubuntu7.3) precise-proposed; urgency=low + + * Improve support for the nvidia-experimental-304 package + (LP: #1047681) + - When displaying list of video drivers, sort them alphabetically. + - Allow experimental drivers to fallback to the description from debian/control + - Insert spaces when appending lines from the control file description. + Fixes bad formatting in jockey's package description. + - Handle multiple abi versions. Fixes bug preventing experimental + drivers from being displayed in jockey. + + -- Bryce Harrington Fri, 28 Sep 2012 19:01:40 -0700 + +jockey (0.9.7-0ubuntu7.2) precise-proposed; urgency=low + + * data/handlers/nvidia.py: + - Add support for the nvidia-experimental-304 package (LP: #1047681). + + -- Alberto Milone Tue, 25 Sep 2012 10:57:39 +0200 + +jockey (0.9.7-0ubuntu7.1) precise-proposed; urgency=low + + * data/handlers/cdv.py: + - Add support for the Cedarview graphics driver (LP: #1026518). + + -- Alberto Milone Thu, 19 Jul 2012 10:38:28 +0200 + +jockey (0.9.7-0ubuntu7) precise; urgency=low + + * debian/tests/control: Add dbus-x11 dependency to get dbus-launch. + (LP: #976239) + * data/handlers/fglrx.py: Fix crash if there is no other alternative for the + driver. (LP: #954297) + * Merge from trunk: + - Fix crash if there is no notification daemon available. (LP: #819755) + - jockey/detection.py: Do not show a warning about not being able to open + the DriverDB cache if the file does not exist. (LP: #888273) + - Update Bulgarian translations from Launchpad. + + -- Martin Pitt Thu, 12 Apr 2012 09:08:49 +0200 + +jockey (0.9.7-0ubuntu6) precise; urgency=low + + * data/handlers/pvr-omap4.py: + - Adding handler for PowerVR SGX driver for OMAP 4 based boards, like + Pandaboard and Blaze (LP: #978563) + + -- Ricardo Salveti de Araujo Wed, 11 Apr 2012 01:43:02 -0300 + +jockey (0.9.7-0ubuntu5) precise; urgency=low + + * debian/tests/control: Add xvfb and gir1.2-appindicator3-0.1 dependencies. + * debian/tests/upstream-system: Run under xvfb-run, with a workaround for + LP #972324. + * Merge from trunk: + - tests/shipped_handlers.py: Test system installed handlers when not in + the source tree. + + -- Martin Pitt Tue, 03 Apr 2012 13:22:59 +0200 + +jockey (0.9.7-0ubuntu4) precise; urgency=low + + * jockey/oslib.py, install_packages: Temporarily disable our Apport (or any + other) excepthook for apt.Cache().commit(), to circumvent python-apt's + magic of calling the except hook without a stack trace in case of + package installation failures. We already catch SystemErrors from this + call and act accordingly. (LP: #850005) + * Merge updated translations from trunk. + + -- Martin Pitt Mon, 02 Apr 2012 17:24:11 +0200 + +jockey (0.9.7-0ubuntu3) precise; urgency=low + + * Transition jockey-kde's dependency on kdebase-runtime to kde-runtime, the + new package + + -- Jonathan Thomas Thu, 29 Mar 2012 20:31:41 -0400 + +jockey (0.9.7-0ubuntu2) precise; urgency=low + + * Merge from trunk: + - ui.py: Use gettext friendly string line splitting. (LP: #910278) + - Update translations from Launchpad. + + -- Martin Pitt Mon, 05 Mar 2012 06:48:41 +0100 + +jockey (0.9.7-0ubuntu1) precise; urgency=low + + * New upstream bug fix release: + - jockey/detection.py: Accept repository URLs with "file:/", too + - jockey/oslib.py: Completely parse PackageKit output. Thanks Hedayat + Vatankhah! (LP: #900853) + - gtk/jockey-gtk: Create tray icon when indicator support is not + available. Thanks Hedayat Vatankhah! (LP: #900824) + - Launchpad automatic translations update. + * jockey/oslib.py, has_repositories(): Also accept "file:/path..." URLs from + apt-cache policy to recongize local repositories. First half of LP #913927. + Thanks to James Ferguson for the patch. + * jockey/oslib.py, install_package(): Consider file:// URLs a trusted + origin even for binary packages. (LP: #913927) + * tests/oslib.py: Update test_package_install_thirdparty_unsigned_binary() + test to use a http:// URL, as file:// URLs are now considered trusted. + + -- Martin Pitt Sat, 03 Mar 2012 22:30:37 +0100 + +jockey (0.9.6-0ubuntu1) precise; urgency=low + + * New upstream bug fix release: + - jockey/oslib.py: Use specified target_kernel for module aliases, too. + Thanks Hedayat Vatankhah! (LP: #900851) + - jockey/oslib.py: Be robust against failure to open blacklist for + writing. Thanks Hedayat Vatankhah! (LP: #900850) + - Fix some style issues in desktop files. Thanks Hedayat Vatankhah! + (LP: #900819) + - ui_notification(): Add accessible description to indicator. + (LP: #891920) + - Launchpad automatic translations updates. + + * debian/control: Move from transitional python-gobject to python-gi. + + -- Martin Pitt Thu, 08 Dec 2011 12:52:01 +0100 + +jockey (0.9.5-0ubuntu6) precise; urgency=low + + * Merge from trunk: + - tests/detection.py: Make OpenPrinting.org test case robust against minor + version changes + - get_handlers(): Ignore handler classes which start with a "_". These can + be used to mark private base classes and avoid error messages. + * tests/oslib.py: Fix MockPackage to have an architecture() method, now + needed by the Apt implementation. + * data/handlers/nvidia.py: Prefix base class with '_' to avoid error + messages and failing the "shipped_handlers" tests. + * Add debian/tests/control and debian/tests/upstream-system: + DEP-8/autopkgtest control file for running the upstream tests against the + installed system Jockey package. + + -- Martin Pitt Fri, 25 Nov 2011 14:32:50 +0100 + +jockey (0.9.5-0ubuntu5) precise; urgency=low + + * debian/jockey-common.postinst: Move from group "admin" to "sudo". + (LP: #893842) + + -- Martin Pitt Fri, 25 Nov 2011 08:52:38 +0100 + +jockey (0.9.5-0ubuntu4) precise; urgency=low + + * debian/control: bump dependency on nvidia-common (>= 1:0.2.36). + data/handlers/fglrx.py: pass ignore_pattern='-updates' to + get_alternative_by_name so that the library returns the correct + alternative name (LP: #873058). + + -- Alberto Milone Wed, 16 Nov 2011 17:21:40 +0100 + +jockey (0.9.5-0ubuntu3) precise; urgency=low + + * data/handlers/fglrx.py: According to Chris the fglrx driver does have some + support for switching cards at runtime, so do offer fglrx on hybrid + systems. It remains to be tested whether fglrx' libGL gets along with the + intel driver. + + -- Martin Pitt Wed, 02 Nov 2011 14:08:13 -0400 + +jockey (0.9.5-0ubuntu2) precise; urgency=low + + * Merge from trunk: + - Add XorgDriverHandler.loaded_drivers(), as a prerequisite for LP #885204 + - Update translations from Launchpad. + * data/handlers/{fglrx,nvidia}.py: Do not offer these drivers if intel + X.org driver is loaded. On hybrid systems where intel is active, + installing the proprietary drivers and their libGL breaks intel. + (LP: #885204) + + -- Martin Pitt Wed, 02 Nov 2011 11:21:03 -0400 + +jockey (0.9.5-0ubuntu1) precise; urgency=low + + * New upstream release: + - When connecting to D-BUS fails, improve error message to let users know + what to do. Thanks Martin Owens. + - jockey/oslib.py: Work with current PackageKit version. Thanks to Hedayat + Vatankhah. (Not relevant for Ubuntu branch) + - More user-friendly authentication messages on driver operations. Thanks + Robert Roth. (LP: #799725) + - Only ask for confirmation in check_composite if --confirm has been set. + Thanks to Evan Dandrea. (LP: #855042) + - examples/fake.modaliases: add -updates examples + - Fix no space typo in VMWare drivers. Thanks Robert Roth. (LP: #722936) + - detection.py: Fix crash if Driver ID does not have a package field. + (LP: #837495) + * debian/control: Add polkit-kde-1 dependency. (LP: #872442) + + -- Martin Pitt Wed, 26 Oct 2011 08:40:31 +0200 + +jockey (0.9.4-0ubuntu10) oneiric; urgency=low + + * jockey/oslib.py: Update help link (LP: #866085) + + -- Jeremy Bicha Thu, 06 Oct 2011 06:27:46 +0200 + +jockey (0.9.4-0ubuntu9) oneiric; urgency=low + + * Only ask for confirmation in check_composite if --confirm has been set. + Thanks to Evan Dandrea! Patch cherrypicked from trunk r740. + (LP: #855042) + + -- Martin Pitt Thu, 29 Sep 2011 17:22:09 +0200 + +jockey (0.9.4-0ubuntu8) oneiric; urgency=low + + * data/handlers/{fglrx,nvidia}.py: Drop custom id() methods. They were a + thinko and cause the driver IDs to come out as e. g. + "xorg:nvidia_173_updates-update". The module name is meant to provide + the "_update" suffix already (just didn't do yet because of LP #855396) + + -- Martin Pitt Wed, 28 Sep 2011 16:19:54 +0200 + +jockey (0.9.4-0ubuntu7) oneiric; urgency=low + + [ Alberto Milone ] + * data/handlers/fglrx.py: Use the correct name for the module and for the + package in fglrx.py. (LP: #855396) + + [ Martin Pitt ] + * jockey/oslib.py, package_header_modaliases(): Only consider packages for + the system architecture. This avoids creating non-working default handlers + for e. g. fglrx:i386 on an amd64 system. (LP: #855175) + * Drop data/handlers/nouveau3d.py, it's installed by default now. + (LP: #839533) + + -- Martin Pitt Wed, 21 Sep 2011 12:51:55 +0200 + +jockey (0.9.4-0ubuntu6) oneiric; urgency=low + + * data/handlers/{fglrx,nvidia}.py: + - Pass the correct kernel module name when dealing with updates flavours + (LP: #841462). + + -- Alberto Milone Wed, 07 Sep 2011 12:07:50 +0200 + +jockey (0.9.4-0ubuntu5) oneiric; urgency=low + + * jockey/oslib.py: Fix crash if an apt error occurs even before forking the + apt progress backend. (LP: #838276) + + -- Martin Pitt Mon, 05 Sep 2011 16:45:39 +0200 + +jockey (0.9.4-0ubuntu4) oneiric; urgency=low + + * Merge fix from trunk: + - detection.py: Fix crash if Driver ID does not have a package field. + (LP: #837495) + + -- Martin Pitt Thu, 01 Sep 2011 12:21:31 +0200 + +jockey (0.9.4-0ubuntu3) oneiric; urgency=low + + * jockey/ui.py, jockey/backend.py: Use MainLoop from GObject, not from GLib. + Using GLib is broken for pygobject 2.28. This can be reverted once + pygobject gets upgraded to 2.90. (LP: #836599) + + -- Martin Pitt Tue, 30 Aug 2011 07:40:39 +0200 + +jockey (0.9.4-0ubuntu2) oneiric; urgency=low + + * debian/rules: Run debian/testpkgs/clean through sh, as we use V1 source + and can't keep the executable bit there. + + -- Martin Pitt Mon, 22 Aug 2011 12:38:23 +0200 + +jockey (0.9.4-0ubuntu1) oneiric; urgency=low + + * New upstream bug fix release: + - oslib.py: Do not encourage to report package installation failure as + SystemError, it will appear as a backend crash + - jockey-gtk: Fix message_type argument to Gtk.MessageBox constructor + - jockey/ui.py: For invalid combinations of LC_MESSAGES and LC_CTYPE, force + stdout/stderr encoding to UTF-8 instead of C. (LP: #760883) + - Fix GLib and GObject imports to be compatible with the future pygobject + 3.0. (LP: #829186) + - jockey/detection.py, _driverid_to_handler(): In the case that there are + multiple matching custom handlers for a DriverID, also check that their + "package" attribute matches. + - tests/run: Also support specifying individual test method names + * Add debian/testpkgs/: Scripts and equivs control files for dummy + driver packages which are convenient for testing. + * debian/rules: Call debian/testpkgs/clean to ensure that we don't ship + build stuff there. + * data/handlers/{fglrx,nvidia}.py: Prevent crash if + get_alternative_by_name() returns nothing. + * jockey/oslib.py, {install,remove}_package(): Capture apt's stdout/err into + the log file, to get proper error messages when packages fail to install. + (LP: #552300). + * jockey/oslib.py, install_package(): Avoid raising a SystemError when a + package fails to install in apt, as this will appear as a crash in Jockey. + Just point out the error in the log file instead. (LP: #804709) + * tests/oslib.py: Update test cases for above change. + * tests/oslib.py: Fix apt initialization to work with current apt versions. + * data/handlers/{fglrx,nvidia}.py: Also show the -updates variants of the + drivers, which will be updated to newer upstream versions after the + Ubuntu release. (UbuntuSpec:desktop-o-xorg-stakeholders-request) + + -- Martin Pitt Mon, 22 Aug 2011 12:08:02 +0200 + +jockey (0.9.3-0ubuntu1) oneiric; urgency=low + + * New upstream release. Changes since our last trunk merge: + - more Python 3 compatible imports + - ui.py: Move to AppIndicator3 for GTK 3 compatibility + - merge translations, update German fuzzy strings + - fglrx example handler: Rename ATI → AMD (LP: #755260) + * debian/control: Update appindicator GIR dependency. + * Cherrypick changes from trunk: + - gtk/jockey-gtk.desktop.in: Use correct categories to show up on the new + gnome-control-center. Thanks Rodrigo Moya! (LP: #787694) + - Add NoDisplay=true to autostart .desktop file and have jockey-gtk show up + in Unity. Thanks Mike Terry. + + -- Martin Pitt Wed, 13 Jul 2011 16:36:39 +0200 + +jockey (0.9.2-0ubuntu8) oneiric; urgency=low + + * data/handlers/fglrx.py: Add support for multi-arch to the fglrx handler. + + -- Alberto Milone Tue, 05 Jul 2011 11:44:19 +0200 + +jockey (0.9.2-0ubuntu7) oneiric; urgency=low + + * data/handlers/nvidia.py: Properly check invalid alternatives and the + parent class' enabled() method, to avoid showing the nvidia driver as + enabled when it is not even installed. + * data/handlers/fglrx.py: Check invalid alternative, too. + * data/handlers/nvidia.py: Check multiarch alternatives as well. Thanks + Alberto Milone! + * data/handlers/nvidia.py: Fix crash if the free driver alternative is None. + + -- Martin Pitt Wed, 29 Jun 2011 14:53:20 +0100 + +jockey (0.9.2-0ubuntu6) oneiric; urgency=low + + * Convert build system to dh7, using the new dh-translations. + * Move to GTK3: + - gtk/jockey-gtk: Drop forcing GTK version to 2. + - debian/control: Update dependency to gir1.2-gtk-3.0. + + -- Martin Pitt Mon, 16 May 2011 10:02:54 +0200 + +jockey (0.9.2-0ubuntu5) natty; urgency=low + + [ Martin Pitt ] + * data/handlers/nvidia.py: Fix broken condition in used(), which would be + True already if the package was merely installed. (LP: #759804) + * jockey/oslib.py, ignored_modules(): Drop linux-ubuntu-modules, gone long + ago. + * Cherry-pick r720 from trunk to support a new --kernel option on the + backend and frontend with --no-dbus. This allows ubiquity to install a PAE + kernel on the target system and tell jockey to install kernel headers for + that one instead for the running one. Based on a patch from Evan Dandrea, + thanks! (LP: #759804) + * Cherry-pick r721 from trunk: OpenPrintingDriverDB: Use the actual package + version as "version" attribute instead of the driver name. This was a bit + of a thinko back then. Update test cases accordingly. (LP: #744751) + + [ Evan Dandrea ] + * jockey/oslib.py: Disconnect from Debconf before installing packages. + (LP: #759804) + + -- Martin Pitt Tue, 19 Apr 2011 10:43:43 +0200 + +jockey (0.9.2-0ubuntu4) natty; urgency=low + + [ Martin Pitt ] + * data/handlers/nvidia.py: Some cleanup: + - Drop obsolete add_modules=['glx']. + - Drop setting DefaultDepth=24, X.org does that by default now. + - Move version 96 specific code to NvidiaDriver96 class. + - Remove some dead code. + * Merge from trunk: + - XorgDriverHandler: Support None X.org driver to avoid changing the + Driver setting. This is appropriate for drivers which X.org conf + autodetects. + - Add new flag Handler.needs_kernel_headers and install kernel headers if + set. + * data/handlers/{nvidia,fglrx}.py: Stop setting the X.org driver and + alternate free driver. Natty's X.org now prefers the proprietary drivers + over the free ones when available (105_nvidia_fglrx_autodetect.patch). + This allows X.org to fall back to the free driver if the proprietary one + gets broken or out of sync. (LP: #522061) + * jockey/oslib.py: Set kernel header metapackage name from currently running + kernel flavour, and add a small test case that it is a valid package. + * data/handlers/{nvidia,fglrx}.py: Replace custom code to install kernel + headers with setting the needs_kernel_headers flag. + * data/handlers/broadcom_wl.py: Set needs_kernel_headers flag. (LP: #567699) + * jockey/oslib.py, install_packages(): python-apt recently changed + "architecture" field of a candidate Version; where it used to say "all" + it now has the platform name. So switch to + candidate.record['Architecture'] to check if a package is Arch: all. This + unbreaks installation of unsigned third-party PPD packages. + + [ Alberto Milone ] + * data/handlers/fglrx.py: + - Re-enable fglrx. + - Replace tabs with whitespaces. + * data/handlers/nvidia.py: + - Replace tabs with whitespaces. + + -- Martin Pitt Thu, 31 Mar 2011 17:29:28 +0200 + +jockey (0.9.2-0ubuntu3) natty; urgency=low + + * Merge from trunk: + - OSLib.import_gpg_key(): Respect $http_proxy. Thanks Olaf Meeuwissen. + (LP: #733023) + - oslib.py: Switch to default keyserver on port 80 to be more proxy + friendly. (LP: #733029) + + -- Martin Pitt Fri, 11 Mar 2011 18:07:01 +0100 + +jockey (0.9.2-0ubuntu2) natty; urgency=low + + * Merge from trunk: + - Reintroduce __fix_stdouterr(); we need it for proper -l unicode support. + However, delay it until after OptParser, as an already encoded + sys.stderr causes that to crash. (LP: #728744) + + -- Martin Pitt Thu, 10 Mar 2011 17:34:30 +0100 + +jockey (0.9.2-0ubuntu1) natty; urgency=low + + * New upstream bug fix release: + - Add X.org video driver ABI checking. (This was already cherrypicked + in an earlier upload) + - Drop our own verified_https.py and implement GPG fingerprint SSL + checking with pycurl, which gets along with proxies. (LP: #729185) + - Some code cleanup and more test cases. + * debian/control: Add python-pycurl dependency. + + -- Martin Pitt Tue, 08 Mar 2011 16:08:06 +0100 + +jockey (0.9.1-0ubuntu5) natty; urgency=low + + * gtk/jockey-gtk: Update require_version() call to current pygobject API. + Bump python-gobject dependency accordingly. + + -- Martin Pitt Thu, 03 Mar 2011 17:21:07 +0100 + +jockey (0.9.1-0ubuntu4) natty; urgency=low + + * debian/control: Move nvidia-common back to Recommends, as this is only + available on i386/amd64, and we can't do arch specific dependencies for + arch:all packages. (Reopens #704597) + + -- Martin Pitt Mon, 28 Feb 2011 12:12:08 +0100 + +jockey (0.9.1-0ubuntu3) natty; urgency=low + + * Merge from trunk: + - Add X.org video driver ABI checking + * jockey/oslib.py: Implement current_xorg_video_abi() and + video_driver_abi() for Ubuntu. + * data/handlers/nvidia.py: Drop (already commented out) disabling due to ABI + mismatch. With above code, this check now happens dynamically, also works + for third-party repos, and we can stop having to update the handler each + time the ABIs get out of sync. + + -- Martin Pitt Mon, 28 Feb 2011 10:22:06 +0100 + +jockey (0.9.1-0ubuntu2) natty; urgency=low + + * data/handlers/nvidia.py: + - Re-enable nvidia-current now that we have an ABI compatible driver. + + -- Alberto Milone Sun, 27 Feb 2011 16:47:52 +0100 + +jockey (0.9.1-0ubuntu1) natty; urgency=low + + * New upstream bug fix release. Changes since our previous trunk snapshot: + - Do not create standard drivers for disabled custom drivers. This caused + NVidia/FGLRX to still be offered in Jockey, causing a lot of damage. + (LP: #716363) + + -- Martin Pitt Wed, 23 Feb 2011 21:20:34 +0100 + +jockey (0.9-0ubuntu3) natty; urgency=low + + * debian/control: Move nvidia-common from Recommends: to Depends: + (LP: #704597) + * jockey/oslib.py, install_packages(): Fix crash with third-party + repositories that do not have a trusted origin. (LP: #712685) + * Merge fixes from trunk: + - Add --no-dbus UI option. This will use a local Backend instance + instead of communicating with the D-BUS backend interface. This is + suitable for installers where jockey needs to run in a chroot. + (LP: #723223) + - ui.py: Drop __fix_stdouterr(), we are using gettext in unicode + mode, and this leads to crashes with --help. + - ui.py: Show translated driver names with --list + + -- Martin Pitt Wed, 23 Feb 2011 11:53:31 +0100 + +jockey (0.9-0ubuntu2) natty; urgency=low + + * Merge fixes from trunk: + - jockey-gtk: Use glib.GError, not GLib.Error; the latter does not + actually work, and in general the static glib bindings are preferred for + now. (LP: #715753) + - Add VMWare client tools handler. Thanks Martin Owens! (LP: #716738) + * Remove bogus changelog entries in previous upload. + + -- Martin Pitt Tue, 15 Feb 2011 12:58:58 +0100 + +jockey (0.9-0ubuntu1) natty; urgency=low + + * New upstream release: + - First steps towards Python 3 compatibility. + - jockey-gtk: Fix icon lookup constant for PyGI. (LP: #706193) + - Fix crash on nonexisting packages. + - examples/fake.modaliases: Update for current Ubuntu driver name + - jockey-gtk: Use Gtk.ListStore constructor from pygi overrides + - tests/run-gtk: port to GI + - Fix regression from GI port: Properly set up the UI if there are no + drivers available. (LP: #702596) + - jockey-gtk: Fix UnicodeDecodeError crash on translated driver names + - Fix short driver description when getting them from package system + * jockey/oslib.py, package_description(): Fix for current apt output format. + * kde/jockey-kde.desktop.in, kde/jockey-kde: Remove the kdesu hack, + PolicyKit should work well in KDE now. + * debian/control, debian/rules: Move to dh_python2. + + -- Martin Pitt Thu, 03 Feb 2011 19:18:28 +0100 + +jockey (0.8-0ubuntu6) natty; urgency=low + + [ Michael Vogt ] + * jockey/oslib.py: Fix module alias parser error on multiple modules for a + Package. + + [ Martin Pitt ] + * data/handlers/{nvidia,fglrx}.py: Disable drivers, as they are currently + unavailable for the X.org video driver ABI 9. + + -- Martin Pitt Tue, 01 Feb 2011 15:02:02 +0100 + +jockey (0.8-0ubuntu5) natty; urgency=low + + * data/handlers/nvidia.py: Fix typo. + * backend/com.ubuntu.DeviceDriver.service: Export {http,https,ftp}_proxy + variables from /etc/environment into the backend. (LP: #373795) + + -- Martin Pitt Mon, 31 Jan 2011 11:31:56 +0100 + +jockey (0.8-0ubuntu4) natty; urgency=low + + * data/handlers/nvidia.py: Point out that you need to install this in + order to run Unity. + + -- Martin Pitt Wed, 26 Jan 2011 14:43:02 +0100 + +jockey (0.8-0ubuntu3) natty; urgency=low + + * Merge with trunk: + - Add support for hardware enablement handlers. + - If a handler doesn't specify 'free' or 'description' but does include a + binary package name, query the OS for that information. + - jockey-gtk: remove connect_signals GTK2 workaround, works in latest GTK + + -- Mario Limonciello Wed, 19 Jan 2011 12:44:29 -0600 + +jockey (0.8-0ubuntu2) natty; urgency=low + + * Add data/handlers/nouveau3d.py: Handler for installing + libgl1-mesa-dri-experimental on systems where nouveau is loaded. + + -- Martin Pitt Fri, 14 Jan 2011 17:21:44 -0600 + +jockey (0.8-0ubuntu1) natty; urgency=low + + * New upstream release: + - jockey-gtk: Convert from pygtk to gobject-introspection. + * debian/control: Update dependencies to required GIR packages. + * gtk/jockey-gtk: Force using GTK 2.0 for now, as we only have an + appindicator GIR for GTK 2.0. + * debian/control: Wrap dependencies. + * debian/control: Drop obsolete python-xdg dependency. + * debian/control: Drop unnecessary XB-Python-Version headers from -gtk and + -kde packages, and set appropriate XS-Python-Version. + + -- Martin Pitt Sun, 09 Jan 2011 20:46:55 -0600 + +jockey (0.7.1-0ubuntu1) natty; urgency=low + + * New upstream release: + - Move HTTP sever for test suite to separate module for easier reuse. + - tests: Skip online OSLib tests when being offline + - OSLib.install_package(): Fix exception for unknown package + - Add a demo GPG key to tests/, for testing signed archives + - OSLib tests: use local test keyserver + * jockey/oslib.py, install_package(): Don't just require specifying a + fingerprint, but instead fail when trying to install any binary package + without a trusted origin. + * tests/oslib.py: Add local test cases for unsigned/signed binary/arch:all + repository addition, GPG key retrieval, and package installation. + + -- Martin Pitt Sat, 08 Jan 2011 17:30:02 -0600 + +jockey (0.7-0ubuntu2) natty; urgency=low + + * jockey/oslib.py: Add proper progress feedback for updating the apt + indexes. + * jockey/oslib.py: Use apt.Cache.update()'s undocumented, but awesome + sources_list argument to only update jockey's apt sources, not the entire + system's. This dramatically speeds up driver installation. Adjust + index/download/install accordingly (10%/40%/50% now). + + -- Martin Pitt Fri, 07 Jan 2011 15:43:16 +0100 + +jockey (0.7-0ubuntu1) natty; urgency=low + + * New upstream release: + - Add support for repository fingerprints, and retrieve them from + openprinting.org when available. + - Allow binary drivers if they have a valid GPG fingerprint on a trusted + https:// site. This is a lot weaker than our usual archive trust chain, + but as it's very hard to get a chain of trust to printer driver vendors, + relying on good SSL certificates is the next best step, and still much + better than what the average user does when searching and downloading a + driver by himself. + - Add API for retrieving and installing a GPG key based on a fingerprint. + - Merge add_repository() into install_package(), which is much more + practical for verifying whether a package in a new repository ist + trustworthy. + * jockey/oslib.py, tests/oslib.py: Update for merged add_repository(), and + implement GPG retrieval and repository trust checking. This now provides + secure binary third-party drivers. (LP: #604698) + * tests/oslib.py, test_ubuntu_package_header_modaliases(): Fix typo in + regular expression which didn't catch "fglrx" before. + * data/handlers/fglrx.py, data/handlers/nvidia.py: Disable these two + handlers in a live system environment (if /rofs exists). We will most + likely run out of RAM trying to download, build, and install all the + packages in the RAM disk. (LP: #685017) + + -- Martin Pitt Thu, 06 Jan 2011 19:13:24 +0100 + +jockey (0.6-0ubuntu4) natty; urgency=low + + * debian/control: Drop bcmwl-modaliases recommends, it's replaced with + a package header now. + + -- Martin Pitt Sat, 18 Dec 2010 19:06:17 +0100 + +jockey (0.6-0ubuntu3) natty; urgency=low + + * jockey/oslib.py: + - fix crash if a given package has no candidate version + + -- Michael Vogt Wed, 01 Dec 2010 15:05:46 +0100 + +jockey (0.6-0ubuntu2) natty; urgency=low + + * debian/control: Drop bcmwl-modaliases recommends, it's replaced with + a package header now. + + -- Martin Pitt Thu, 25 Nov 2010 20:16:50 +0100 + +jockey (0.6-0ubuntu1) natty; urgency=low + + [ Alberto Milone ] + * data/handlers/nvidia.py: + - Re-enable nvidia-96 now that it's compatible with xserver 1.9. + (LP: #626974). + + [ Martin Pitt ] + * New upstream release 0.6: + - Add support and test case for reading modaliases from package headers. + - Put back "Additional Drivers" progress window title. Thanks Bilal + Akhtar! (LP: #323815) + - jockey/detection.py, get_hardware(): Disable printer detection. + cupshelpers.getDevices() is excruciatingly slow (about 15 seconds), and + jockey is not normally used directly to install printer drivers. + Instead, system-config-printer picks up new printers, and calls jockey + with the device ID, so jockey does not need to detect printers by + itself. + - jockey-kde: Use runtime .ui loading instead of pykdeuic4; the latter + just keeps breaking. + - gtk/jockey-gtk.ui: Drop obsolete has_separator property; Explicitly set + topmost GtkVBox fill property to True, as the default changed in GTK 3.0 + (GNOME #634592) + - Various test suite fixes. + * debian/control: Drop now obsolete python-{qt4,kde}* build dependencies. + * debian/jockey-kde.install: Install the KDE *.ui files. + * jockey/oslib.py, has_repositories(): Greatly speed up (5 seconds → + negligible) by calling "apt-cache policy" instead of creating an + apt.Cache() object. + * Drop data/handlers/b43.py, our linux-firmware package ships the b43 + firmware now. Also, the wl driver is generally a lot better. + * Add support for putting modalias definitions in driver package's + debian/control, so that we can replace the /usr/share/jockey/modaliases/* + lists with lookups in the package database (see blueprint + hardware-desktop-n-package-field-modaliases). With this we can drop the + foo-modaliases packages, and shipping third-party driver packages will + just work in Jockey without any further integration. + - Add debian/debhelper/dh_jockey: Debhelper program to produce a + ${modaliases} substvar from scanning .ko files or + debian/packagename.modaliases. + - Add debian/debhelper/test_dh_jockey: Automatic test script for + dh_jockey. + - Add debian/debhelper/modaliases.pm: dh_auto sequencer for dh_modaliases. + - debian/control: Add dh-modaliases package. + - debian/dh-modaliases.install: Install dh_modaliases and modaliases.pm. + - debian/rules: Create manpage from dh_modaliases POD. + - jockey/oslib.py: Add apt implementation for package_header_modaliases(). + - tests/oslib.py: Add test case for our package_header_modaliases() + implementation. This only really tests anything if there is at least one + package with a "Modaliases:" field in the local apt repository. + * jockey/oslib.py: Change deprecated apt.apt_pkg.Config.Set() to .set(). + * debian/rules: Drop simple-patchsys.mk, we don't need it (patches are + inline, maintained in bzr). + + -- Martin Pitt Thu, 25 Nov 2010 19:49:00 +0100 + +jockey (0.5.10-0ubuntu5.1) maverick-proposed; urgency=low + + * Change B43Handler to deal with the various firmware-b43*installer + packages. This requires adding a modalias file for + firmware-b43-lpphy-installer (LP: #655111) + + -- Michael Vogt Thu, 07 Oct 2010 12:20:31 +0200 + +jockey (0.5.10-0ubuntu5) maverick; urgency=low + + * data/handlers/nvidia.py: + - Re-enable nvidia-173 now that it's compatible with xserver 1.9. + + -- Alberto Milone Mon, 04 Oct 2010 15:40:02 +0200 + +jockey (0.5.10-0ubuntu4) maverick; urgency=low + + * data/handlers/fglrx.py, nvidia.py: + - Re-enable fglrx now that it's compatible with xserver 1.9. + - Make sure that the initramfs is updated for both the newest kernel + and for the current kernel, so as to be consistent with the default + behaviour of the DKMS template that both driver packages use. + + -- Alberto Milone Thu, 23 Sep 2010 13:15:03 +0200 + +jockey (0.5.10-0ubuntu3) maverick; urgency=low + + * Add support for bypassing local detection for search_driver(). (Merged + from trunk). Thanks to Till Kamppeter for the initial patches! + * jockey/ui.py: Ubuntu does not currently support local printer driver + handlers, so speed up the lookup of remote ones by disabling local + detection of hardware/handlers in search_driver() if we are looking for a + printer driver. (Note that this is a hack, but the speedup is significant) + (LP: #574396) + * Add OSLib.notify_reboot_required() and call it in set_handler_enabled(). + Merged from trunk, and add Ubuntu specific implementation using + /usr/share/update-notifier/notify-reboot-required in OSLib. (LP: #570215) + * data/handlers/b43.py: Install firmware-b43-installer package instead of + b43-fwcutter. (LP: #595344) + + -- Martin Pitt Wed, 15 Sep 2010 13:35:48 +0200 + +jockey (0.5.10-0ubuntu2) maverick; urgency=low + + * data/handlers/nvidia.py: + - Don't set the IgnoreABI option in xorg.conf any longer as nvidia- + current is now ABI compatible with the new xserver. + + -- Alberto Milone Tue, 07 Sep 2010 10:49:54 +0200 + +jockey (0.5.10-0ubuntu1) maverick; urgency=low + + * New upstream release: + - ui --list: show auto-install flag + - Add flag file based auto install mode + - Add a title to the "search drivers" dialog. Thanks to Bilal Akhtar! + (LP: #616569) + - Rename "Hardware Drivers" to "Additional Drivers", to point out that + Jockey is not responsible for all kinds of drivers. Thanks to Robert + Roth for the initial patch. (LP: #409338) + - Hide "Remove" button if a driver needs reboot. Thanks to Bilal Akhtar + for the initial patch! (LP: #600804) + * debian/control: Add missing ${misc:Depends}. + * debian/control: No need to build-depend on python-dev. + * debian/control: Fix nvidia-common dependency. + * Add debian/source/format: "1.0", since changes are bzr maintained. + * debian/control: Bump Standards-Version to 3.9.1. + + -- Martin Pitt Tue, 24 Aug 2010 20:05:24 +0200 + +jockey (0.5.9-0ubuntu2) maverick; urgency=low + + * data/handlers/fglrx.py, nvidia.py: + - Temporarily disable fglrx, nvidia 96 and 173 and ignore the fact that nvidia + current claims to be ABI incompatible with the new xserver. + + -- Alberto Milone Thu, 12 Aug 2010 16:06:53 +0200 + +jockey (0.5.9-0ubuntu1) maverick; urgency=low + + * New upstream release. Changes since our last snapshot: + - Add a fake modalias file for local testing + - Update translations from Launchpad and update German ones + - Fix Polish translation. (LP: #451968) + - Add Handler.auto_install() flag and --auto-install mode. Thanks to Evan + Dandrea! + * data/handlers/broadcom_wl.py: Mark for automatic installation. + + -- Martin Pitt Fri, 23 Jul 2010 15:13:49 +0200 + +jockey (0.5.8-0ubuntu8) lucid; urgency=low + + * data/handlers/fglrx.py, nvidia.py: + - Do not check the non null value of current_alternative and + target_alternative. This caused jockey to skip the condition + that we really wanted to test (i.e. do the two alternatives + match?) and show the driver as enabled when the target + alternative didn't exist (as the package hadn't been installed + yet) (LP: #562226). + + -- Alberto Milone Mon, 19 Apr 2010 10:36:10 +0200 + +jockey (0.5.8-0ubuntu7) lucid; urgency=low + + [ Alberto Milone ] + * Do not check that the module is loaded in enabled() in the nvidia + handler, as this is what we should do in used(). Just make sure + that the module and its alias are not blacklisted. This prevents + Jockey from claiming that the installation of nvidia driver failed + when when it didn't (LP: #552653). + + [ Jonathan Thomas ] + * Don't crash when closed with the "x" button (LP: #552723, LP: #398912). + Thanks ThorbjørnTux! + + [ Martin Pitt ] + * i18n "Install Drivers" string. (LP: #542552) + + -- Alberto Milone Mon, 12 Apr 2010 10:13:16 +0200 + +jockey (0.5.8-0ubuntu6) lucid; urgency=low + + * data/handlers/fglrx.py: + - Re-enable the fglrx handler and make it use the alternatives system + (LP: #496225). + * data/handlers/nvidia.py: + - See if the module alias is loaded and then check what module it + corresponds to in order to see if it's really enabled (LP: #547066). + This involved overriding the enabled() and the used() methods. + * jockey/xorg_driver.py: + - Simplify the logic in the enabled() method by only relying on + X-Kit's isDriverEnabled() method. This will avoid getting false + positives in the case in which the 1st Device section (i.e. the + only one that we used to check) uses the right driver but the + same section is irrelevant as it's not mentioned in the + ServerLayout section. + + -- Alberto Milone Tue, 30 Mar 2010 15:48:37 +0200 + +jockey (0.5.8-0ubuntu5) lucid; urgency=low + + * Merge fixed KDE .ui file from trunk, thanks Jonathan Thomas! This fixes + the crash on jockey-kde startup. + * debian/control: Revert the python-distutils-extra build dependency bump, + not necessary any more with the fix above. + + -- Martin Pitt Fri, 26 Mar 2010 17:50:00 +0100 + +jockey (0.5.8-0ubuntu4) lucid; urgency=low + + * Merge bug fix from trunk: + - ui.py: Fix _check_repositories() to not invoke the UI and error dialogs + in --check mode. (LP: #540750) + * debian/control: Bump python-distutils-extra build dependency, to ensure we + build correct -kde packages. (LP: #543707) + + -- Martin Pitt Fri, 26 Mar 2010 17:41:56 +0100 + +jockey (0.5.8-0ubuntu3) lucid; urgency=low + + [ Martin Pitt ] + * jockey/oslib.py: Use "dkms" instead of "bash" for testing whether we have + repositories. This works slightly better with third-party repositories. + + [ Mario Limonciello ] + * data/handlers/fglrx.py: The package name is now just "fglrx" rather than + xorg-driver-fglrx. + + -- Mario Limonciello Thu, 25 Mar 2010 01:01:14 -0500 + +jockey (0.5.8-0ubuntu2) lucid; urgency=low + + * Merge fixes from trunk: + - ui.py, check(): If the user is running Jockey with package installation + or another long-running task in parallel, the automatic --check + invocation will time out on connecting to the backend. This is not + fatal, just print an error message instead of crashing. (LP: #403955) + - jockey-gtk: Fix progress dialogs to not be maximizable. (LP: #537911) + - Do not parent the KMessageBox, since in some cases the errors can come + before the MainWindow is initialized. Thanks Jonathan Thomas! + + -- Martin Pitt Sat, 20 Mar 2010 22:36:55 +0100 + +jockey (0.5.8-0ubuntu1) lucid; urgency=low + + * New upstream bug fix release: + - Make Control-C work properly. Thanks Adys! (LP: #479548) + - Read system vendor/product from sysfs, not from hal + - OSLib: Add new method has_repositories(), as a foundation for fixing + #442776 + - backend.py, new_used_available(): Skip check if no package repositories + are available, to avoid writing an empty cache file and thus never + showing Jockey notifications again once they become available. + (LP: #442776) + - Shutdown D-BUS backend on UI shutdown, to not start the next UI with + potentially outdated information. + - backend.py: Expose has_repositories() and update_repository_indexes() to + clients. + - ui.py: Download/update package indexes if they are missing. + (LP: #439530) + * jockey/oslib.py: Provide an apt implementation of has_repositories(). + * jockey/oslib.py: Provide an apt implementation of + update_repository_indexes(). + + -- Martin Pitt Thu, 11 Mar 2010 17:48:11 +0100 + +jockey (0.5.7-0ubuntu1) lucid; urgency=low + + * New upstream release: + - gtk/autostart/jockey-gtk.desktop.in: Fix regression from r596, add back + "--check" mode. This fixes jockey always popping up after session start. + - kde: Set the bugEmail variable and add it to the KAboutData constructor + (LP: #398920) + - kde: Bump notification pixmap size down to 22x22, for consistency with + other KDE apps + - kde: Optimize KIcon usage in general + + -- Martin Pitt Thu, 11 Feb 2010 15:40:43 +0100 + +jockey (0.5.6-0ubuntu2) lucid; urgency=low + + * data/handlers/nvidia.py: Update to the new nvidia package structure that + we have in lucid. + + -- Martin Pitt Fri, 05 Feb 2010 13:27:29 -0800 + +jockey (0.5.6-0ubuntu1) lucid; urgency=low + + [ Alberto Milone ] + * debian/control: + - Recommend nvidia-common > 0.2.15 because of the new alternatives + class. + * data/handlers/nvidia.py: + - Add support for the new alternatives system by using the + Alternatives class from nvidia-common. + * data/handlers/fglrx.py: + - Keep fglrx disabled until AMD provides us with a driver that is + compatible with Lucid's xserver. + + [ Martin Pitt ] + * New upstream version: + - xorg_driver.py, enable(): Do not mangle xorg.conf if module is not + available after package installation. (LP: #451305) + - ui.py, set_handler_enabled(): Give an error message pointing to the log + file if driver installation fails. (LP: #451305) + - nvidia.py: Remove options for version 71, it does not work with current + X.org versions any more + - backend.py: Explicitly pass start-time to PolicyKit CheckAuthorization + call, to work with polkit-1 0.95. (LP: #491136) + - jockey-kde notification fixes, thanks Jonathan Thomas + - Add libappindicator support, thanks Conor Curran + - Add do_blacklist argument in the ctor of the KernelModuleHandler class, + thanks Alberto Milone + * Drop 01_app_indicator_integration.patch: Applied upstream. + * gtk/autostart/jockey-gtk.desktop.in: Replace "--check 60" with new + X-GNOME-Autostart-Delay option. (Cherrypicked from trunk) + * debian/control: Explicitly depend on python-kde4 to have a working + pykdeuic4, until the dependency gets fixed. + + -- Martin Pitt Mon, 01 Feb 2010 16:27:41 -0800 + +jockey (0.5.5-0ubuntu6) lucid; urgency=low + + * debian/control + - Added recommends for python-appindicator (>= 0.0.6) to jockey-gtk + + -- Ken VanDine Fri, 08 Jan 2010 16:10:41 -0500 + +jockey (0.5.5-0ubuntu5) lucid; urgency=low + + * debian/patches/01_app_indicator_integration.patch + - Adds application indicator support (LP: #497879) + * debian/rules + - added simple-patchsys.mk + + -- Ken VanDine Fri, 08 Jan 2010 15:13:20 -0500 + +jockey (0.5.5-0ubuntu4) lucid; urgency=low + + * data/handlers/nvidia.py: Remove suppressing of driver version 71, it's not + available any more at all. + * Merge bug fixes from trunk: + - backend.py: Explicitly pass start-time to PolicyKit CheckAuthorization + call, to work with polkit-1 0.95. (LP: #491136) + - Remove options for version 71, it does not work with current X.org + versions any more. + + -- Martin Pitt Fri, 04 Dec 2009 18:46:36 +0100 + +jockey (0.5.5-0ubuntu3) karmic-proposed; urgency=low + + * Merge bug fixes from trunk: + - xorg_driver.py, enable(): Do not mangle xorg.conf if module is not + available after package installation. (LP: #451305, part 1) + - ui.py, set_handler_enabled(): Give an error message pointing to the log + file if driver installation fails. (LP: #451305, part 2) + * data/handlers/{fglrx,nvidia}.py: Override enable() method to first try and + install the corresponding kernel headers for the current kernel, to + eliminate a common reason for driver installation failure. + (LP: #451305, part 3) + + -- Martin Pitt Mon, 09 Nov 2009 14:30:34 +0100 + +jockey (0.5.5-0ubuntu2) karmic; urgency=low + + * data/handlers/b43.py: Remove bcmwl-kernel-source on installation, so that + it actually has a chance to work when wl was active before. (LP: #443185) + + -- Martin Pitt Thu, 22 Oct 2009 21:58:32 +0200 + +jockey (0.5.5-0ubuntu1) karmic; urgency=low + + * New upstream bug fix release: + - jockey-kde: Fix broken icons. (LP: #438940) + + -- Martin Pitt Fri, 02 Oct 2009 13:27:28 +0200 + +jockey (0.5.4-0ubuntu1) karmic; urgency=low + + * New upstream bug fix release: + - Update tests for openprinting.org changes; LaserJet 3020 does not exist + any more, replace with DesignJet 3050CP. + - Handler: Reload module blacklist after installing a driver package, + since it might ship blacklists. + - setup.py: Fix DistUtilsExtra version check. (LP: #428337) + - jockey-gtk: Check for having $DISPLAY at startup to avoid crashes. + (LP: #204134) + * ui.py: Fix error message parsing, thanks to rugby471! (LP: #386375) + * Add data/handlers/dvb_usb_firmware.py: Handler for DVB USB cards which + need to have the linux-firmware-nonfree package installed. (LP: #223212) + + -- Martin Pitt Mon, 21 Sep 2009 18:31:45 +0200 + +jockey (0.5.3-0ubuntu3) karmic; urgency=low + + [ Martin Pitt ] + * broadcom_wl.py: Run rmmod with full path, since the backend doesn't have a + $PATH when being activated by D-Bus. (LP: #403925) + + -- Mario Limonciello Fri, 07 Aug 2009 16:02:26 -0500 + +jockey (0.5.3-0ubuntu2) karmic; urgency=low + + * debian/control: Bump python-distutils-extra build dep (needs at least + 2.4). + * debian/jockey-common.install: Update path for PolicyKit files. + + -- Martin Pitt Tue, 14 Jul 2009 17:42:12 +0200 + +jockey (0.5.3-0ubuntu1) karmic; urgency=low + + * New upstream release: + - Add a text frontend, 'jockey-text'. Although the GTK and KDE frontends + can be launched and scripted command line, they are dependent upon + DISPLAY being set. This text frontend has the ability to run in a true + text only environment. (By Mario Limonciello) (LP: #394688) + - Ported to polkit-1. + * debian/control: Update policykit dependencies to policykit-1. Drop + policykit-kde, since it does not exist so far. + * Merge bug fix from trunk: Move X-KDE-autostart-phase: field from menu to + autostart .desktop. + * kde/jockey-kde, kde/jockey-kde.desktop.in: Reintroduce code to run + frontend as root, since there is no KDE frontend for polkit-1 yet. + * data/handlers/broadcom_wl.py: rmmod b43 and friends before enabling wl, so + that it will work on the fly. (LP: #393689) + + -- Martin Pitt Tue, 14 Jul 2009 17:27:14 +0200 + +jockey (0.5.2-0ubuntu1) karmic; urgency=low + + * New upstream release 0.5.1: + - Add yum detection to packaging_system. + - Implement package installation/removal with PackageKit. (Not used in + Ubuntu right now). + - Fully functional on Fedora Core 10. + * New upstream release 0.5.2: + - Convert build system to DistUtilsExtra.auto. + - kde/jockey-kde.desktop.in: Move autostart to phase 2, for smoother + login. (LP: #369733) + - ui.py: Make proprietary driver warning less scary. (LP: #381805) + - jockey-gtk: port from glade to GtkBuilder. + * debian/control: Bump python-distutils-extra build dependency to ensure + availability of DistUtilsExtra.auto. + * debian/control: Drop obsolete python-glade2 dependency. + * debian/jockey-gtk.install: Install *.ui file instead of *.glade. + * jockey/oslib.py, ui_help(): Update yelp location for help, thanks Matthew + East! (LP: #274845) + * data/handlers/broadcom_wl.py: Require package bcmwl-kernel-source. Drop + our handling of the module blacklisting, bcmwl-kernel-source now does that + by itself. (LP: #381678) + * Move jockey.kdeui Python modules from jockey-common to jockey-kde. + * debian/control: Drop obsolete restricted-manager-* conflicts/replaces. + * debian/rules: Drop call to dh_icons, cdbs has done that for us for a long + time. + * debian/control: Bump Standards-Version to 3.8.2 (no changes necessary). + * debian/control: Recommend bcmwl-modaliases, so that the driver is detected + by default. (LP: #381683) + + -- Martin Pitt Mon, 29 Jun 2009 16:21:37 +0200 + +jockey (0.5-0ubuntu10) jaunty; urgency=low + + * kde/jockey-kde: Revert Ubuntu specific change to call application through + kdesu from the applet. This isn't necessary any more with policykit-kde. + (LP: #357133) + + -- Martin Pitt Tue, 07 Apr 2009 09:39:26 -0700 + +jockey (0.5-0ubuntu9) jaunty; urgency=low + + * jockey/ui.py: Fix previous change to not break existing translations. + (LP: #353081) + + -- Martin Pitt Mon, 06 Apr 2009 14:47:05 -0700 + +jockey (0.5-0ubuntu8) jaunty; urgency=low + + * Merge fixes from trunk: + - ui.py, get_ui_driver_name(): If driver has a version, show it. + - nvidia.py: Set self.version instead of mangling name(), to avoid + breaking translations. (LP: #353081) + - Update German translations. + + -- Martin Pitt Mon, 06 Apr 2009 10:55:13 -0700 + +jockey (0.5-0ubuntu7) jaunty; urgency=low + + * Add support for unannounced drivers, i. e. drivers which do not cause + --check to report newly available drivers. This is a prerequisite for + LP #346078. (Cherrypicked from trunk.) + * data/handlers/madwifi.py: Only announce this driver through --check if + ath5k is not loaded. (LP: #346078) + * debian/control: Add alternative policykit-{gnome,kde} dependencies, to + make it possible to install -kde on GNOME or -gnome on KDE. + * jockey-gtk: Improve default height of driver list VPane, depending on + number of available drivers. (Cherrypicked from trunk) (LP: #291028) + + -- Martin Pitt Wed, 01 Apr 2009 11:03:44 +0200 + +jockey (0.5-0ubuntu6) jaunty; urgency=low + + * jockey/ui.py: If the backend crashes, ask the user to file a bug with + ubuntu-bug, not on Launchpad. + + -- Martin Pitt Fri, 27 Mar 2009 18:42:01 +0100 + +jockey (0.5-0ubuntu5) jaunty; urgency=low + + * Add debian/watch. + * Add bzr-builddeb configuration. + * data/handlers/fglrx.py: Enable again, 2:8.600-0ubuntu1 works on Jaunty + now. + * Merge bug fixes from trunk: + - Fix KernelModuleHandler.available() to return False when the handler + package is not available. This fixes the situation that Jockey + advertises e. g. the nvidia driver before apt-get update was run, or on + "free software only" installs. (LP: #341647) + - kde/jockey-kde.desktop.in: Do not run as root any more, PolicyKit-KDE + exists now; update README.txt + - kde/jockey-kde: Port to knotify4. UIF exception approval and original + patch by Jonathan Riddell. Now properly i18n'ed and integrated into + standard build system. + - Update German translations. + * debian/control: Add policykit-kde dependency to jockey-kde. + * Add madwifi handler (merged from trunk). This now takes care of properly + flipping the blacklisting between ath5k and ath_pci (LP: #323830), and + fixes the description and freeness state (LP: #290264) + * jockey/oslib.py: Overwrite apt.InstallProgress.fork() to capture the + child's stdout/stderr into temporary files, and then send that to logging. + Before this, apt/dpkg output was sent to oblivion, making it hard to + remotely debug package installation problems. (LP: #280291) + + -- Martin Pitt Wed, 18 Mar 2009 20:04:01 +0100 + +jockey (0.5-0ubuntu4) jaunty; urgency=low + + * Merge bug fixes from trunk: + - Fix KDE autostart file. + - handlers.py: Fix crash if closing /sys file during rebind fails + (LP: #335567) + - nvidia.py: Do not attempt to rebind driver, it's doomed to fail anyway. + * nvidia.py: Remove -libvdpau for driver >= 180, and nvidia-settings, when + removing the driver. + + -- Martin Pitt Mon, 16 Mar 2009 19:26:56 +0100 + +jockey (0.5-0ubuntu3) jaunty; urgency=low + + * data/handlers/broadcom_wl.py: Fix spelling of the b43legacy module. + * data/handlers/broadcom_wl.py: Fix ordering of module loading if b44 is + needed/loaded as well: Blacklist b44, and load it in the "install wl" + rule, so that wl always comes first. (LP: #333903) + * Merge bug fixes from trunk: + - oslib.py: Do not grab lsb-release stderr. + - oslib.py: Append ".conf" suffix to blacklist file, since current + modutils deprecates anything else. + * data/handlers/{b43,broadcom_wl}.py: Rename blacklist-bcm43 to + blacklist-bcm43.conf, for the same reason. + * debian/jockey-common.postinst: Rename blacklist-{bcm43,local} to *.conf on + upgrades. + + -- Martin Pitt Sat, 07 Mar 2009 15:34:09 +0100 + +jockey (0.5-0ubuntu2) jaunty; urgency=low + + [ Martin Pitt ] + * Merge bug fixes from trunk: + - Replace Exception.message with str(Exception), since .message is + deprecated in Python 2.6. + * Python transition: Build for all Python versions again, to work + with 2.6. Include links in the .deb, bump python-central + build dependency for this. + * debian/rules: Drop DEB_PYTHON_INSTALL_ARGS_ALL setting; + --no-compile is set by default nowadays, and explicitly setting it + hides python-distutils.mk's --install-layout option. + * data/handlers/sl_modem.py: Recognize modems which are subdevices + of alsa cards, and thus only appear in "aplay -l", not in + /proc/asound/cards. Thanks to Peteris Krisjanis for the patch! + (LP: #295158) + + [ Mario Limonciello ] + * data/handlers/broadcom_wl.py: + - if we don't offer b43 at all with the card, and the Broadcom STA + driver is loaded, it is implicitly "enabled". (LP: #288211) + + -- Martin Pitt Fri, 27 Feb 2009 09:04:16 +0100 + +jockey (0.5-0ubuntu1) jaunty; urgency=low + + * Final 0.5 upstream release. Compared to our previous snapshot this + just provides updated translations. + * The clean orig.tar.gz now finally drops the erroneous emblems. + (LP: #330421) + * debian/apport_hook.py: Attach /var/log/jockey.log and hardware + information. + + -- Martin Pitt Tue, 24 Feb 2009 16:47:31 +0100 + +jockey (0.5~beta3-0ubuntu13) jaunty; urgency=low + + * backend.py, new_used_available(): Always write check cache, so + that we avoid starting --check from autostart .desktop if there + are no drivers. + + -- Martin Pitt Mon, 02 Feb 2009 09:57:37 +0100 + +jockey (0.5~beta3-0ubuntu12) jaunty; urgency=low + + * nvidia.py: Re-enable, current versions should now work with + current X.org. + + -- Martin Pitt Sun, 01 Feb 2009 21:15:37 +0100 + +jockey (0.5~beta3-0ubuntu11) jaunty; urgency=low + + * Merge bug fixes from trunk: + - autostart *.desktop.in: Only run if /var/cache/jockey/check does + not exist. + - Update D-Bus policy for the backend (LP: #318745) + - Move status icons from emblems/ to actions/, emblems/ are wrong. + * oslib.py, add_repository(): Intercept {Lock,Fetch}FailedException + similarly to install_package(). (LP: #287468) + + -- Martin Pitt Thu, 29 Jan 2009 17:37:07 +0100 + +jockey (0.5~beta3-0ubuntu10) jaunty; urgency=low + + * data/handlers/{fglrx,nvidia}.py: Disable for now, they do not + currently work with X.org 1.6. + + -- Martin Pitt Wed, 17 Dec 2008 10:29:26 +0100 + +jockey (0.5~beta3-0ubuntu9) jaunty; urgency=low + + * Merge from trunk: + - jockey-gtk: Enlarge driver list if there are more than 3 available + drivers. (LP: #291028) + - ui.py: If an activated driver has a package, label the action "Remove", + not "Deactivate". (LP: #284435) + - Update German translations. + * backend/com.ubuntu.DeviceDriver.service: Write debug log to + /var/log/jockey.log by default when starting the backend. (LP: #290036) + * Add debian/jockey-common.logrotate for rotating jockey.log. + * data/handlers/broadcom_wl.py: If b44 is loaded, don't disable the entire + handler, but instead install a "wl" modprobe handler which removes ssb and + b44 first, then loads wl, and reloads b44 again, which makes both devices + work. (LP: #289845) + + -- Martin Pitt Fri, 28 Nov 2008 11:57:56 +0100 + +jockey (0.5~beta3-0ubuntu8) jaunty; urgency=low + + * Merge bug fixes from trunk: + - Replace enabled/disabled icons with more decent variant, thanks Kenneth + Wimer! (LP: #290239) + - backend.py: Rewrite timeout behaviour for more robustness; do not time + out right after a long method call. + - Intercept crashes of the backend (which manifest as D-BUS NoReply + error), present an error message, and restart backend. (LP: #273600) + - jockey-gtk: Fix crash if nothing is selected in the tree view after an + operation. (LP: #283887) + - fglrx.py: Unconfigured driver defaults to ati, which already provides + compositing. (LP: #285879) + * jockey/oslib.py, install_package(): Use --force-confnew to fix hang/crash + on "EOF on stdin at conffile prompt", since the jockey backend does not + have any terminal or interactivity. This fixes fglrx install failure when + the upstream installer was previously used. This still keeps .dpkg-old + configuration backups, and using a tool like Jockey should "make it work". + (LP: #283765) + * data/handlers/b43.py: Add missing OSLib import. (LP: #295530) + + -- Martin Pitt Mon, 24 Nov 2008 20:31:53 +0100 + +jockey (0.5~beta3-0ubuntu7) jaunty; urgency=low + + * Merge changes from trunk: + - Prevent corrupting the tree view when clicking on the tray applet + multiple times. (LP: #278071) + - Update translations from Rosetta. + * data/handlers/nvidia.py: Unblacklist nvidia driver version 96, it has been + fixed in intrepid-proposed (see LP #251107). (LP: #293107) + + -- Martin Pitt Mon, 10 Nov 2008 17:24:09 +0100 + +jockey (0.5~beta3-0ubuntu5) intrepid; urgency=low + + * Merge bug fix from trunk: + - nvidia.py: Drop constructor check for unsupported legacy versions; at + ctor invocation time, the package is not set yet, and this check + should not be upstream in the first place. + - detection.py: Do not instantiate handlers from DriverDBs which are + unavailable. (Pre-requisite for fixing LP #288662) + * data/handlers/nvidia.py: Move test for currently unsupported legacy + versions (96, 71) to available() where it is actually evaluated. + (LP: #288662) + + -- Martin Pitt Fri, 24 Oct 2008 13:43:22 +0200 + +jockey (0.5~beta3-0ubuntu4) intrepid; urgency=low + + * Merge bug fix from trunk: + - kde/jockey-kde.desktop.in: Launch jockey-kde as root, since + policykit-kde does not exist yet. This unbreaks calling it from the + menu. Thanks to Alberto Milone for the fix! + + -- Martin Pitt Wed, 22 Oct 2008 17:36:08 +0200 + +jockey (0.5~beta3-0ubuntu3) intrepid; urgency=low + + * Merge bug fixes from trunk: + - jockey/backend.py, polkit_auth_wrapper(): Also intercept SystemError and + other standard exceptions in the case of a PermissionDeniedByPolicy, i. + e. when popping up the PK auth dialog. Fixes (LP: #274639) for real. + - po/de.po: Unfuzzify. + + -- Martin Pitt Fri, 17 Oct 2008 19:51:42 +0200 + +jockey (0.5~beta3-0ubuntu2) intrepid; urgency=low + + * Merge bug fixes from trunk: + - OpenPrintingDriverDB: Filter out HTML tags from names, they look ugly + and
even breaks the display. + - jockey-gtk: Increase the default width of the license dialog to fit a + standard 80 column text. + - ui.py, search_driver(): Increase timeout from default 30 seconds to 10 + minutes, since driver DB lookup can last quite long (crash fix). + - OpenPrintingDriverDB: Disambiguate drivers by their driver name, not by + supplier; fixes e. g. splix stable vs. development version conflict. + - Backend available(), search_drivers(): Show the recommended drivers + first, so that the default GUI selection will not point to a + non-recommended one by default. + + -- Martin Pitt Thu, 16 Oct 2008 21:37:31 +0200 + +jockey (0.5~beta3-0ubuntu1) intrepid; urgency=low + + * New upstream bug fix release 0.5 beta 3. Compared to our bzr snapshot, + this has the following changes: + - OpenPrintingDriverDB: Show non-recommended drivers, too, but mark the + recommended one appropriately. (LP: #271286) + - get_handlers(): If there is just one driver for a HardwareID, do not + present it as recommended even if the Driver DB marks it as such, since + it is just confusing. + - jockey-gtk: If jockey shipped icons are not available (happens in some + third-party themes), fall back to stock icons instead of crashing. + (LP: #283363) + * oslib.py, package_name(): Remove intra-paragraph line breaks; both GUIs + already do their own line breaking according to the widget width, and + having them in between looks ugly. + + -- Martin Pitt Thu, 16 Oct 2008 12:56:55 +0200 + +jockey (0.5~beta2-0ubuntu3) intrepid; urgency=low + + * Merge change from trunk: + - openprinting.org lookup: Only search for packaged PPD files, not for + cups filters. This is to greatly reduce the potential conflict with + distro packages (until the openprinting.org ones get properly + namespaced), and also because those filters should generally be supplied + as proper Ubuntu packages. + + -- Martin Pitt Thu, 16 Oct 2008 01:33:17 +0200 + +jockey (0.5~beta2-0ubuntu2) intrepid; urgency=low + + * Merge bug fixes from trunk: + - openprinting.org detected handlers: Add supplier and support contacts to + long description. (LP: #269454) + - backend.py, set_enabled(): Report progress signals early when handling + packages, to avoid delays until package manager sends out the first + progress. (LP: #279073) + * data/handlers/fglrx.py: Enable driver again, current version works now. + Also add "Recommends: fglrx-modaliases", so that detection works in a + default installation. (LP: #262819) + + -- Martin Pitt Wed, 15 Oct 2008 00:10:53 +0200 + +jockey (0.5~beta2-0ubuntu1) intrepid; urgency=low + + * New upstream bug fix release 0.5 beta 2. This does not introduce any + actual code changes to our bzr snapshot, but brings down the diff.gz delta + to a sane level again. + + -- Martin Pitt Mon, 13 Oct 2008 18:05:20 +0200 + +jockey (0.5~beta1-0ubuntu5) intrepid; urgency=low + + * Merge bug fixes from trunk: + - ui.py: Explicitly set encoding of stdout and stderr to the locale's + preferred encoding. Thanks to Colin Watson for the approach. + (LP: #280147) + - ui.py, set_handler_enabled(): Show SystemErrors in dialog instead of + crashing. (LP: #274639) + - jockey-kde: Make --check notifications actually work again. + * jockey/oslib.py: Clean up error handling on package installation/removal. + * jockey-kde: Work around the lack of a PolicyKit KDE user agent by starting + the UI through kdesu when clicking on the notification. Add + kdebase-runtime dependency for this. (LP: #274189) + + -- Martin Pitt Mon, 13 Oct 2008 14:40:43 +0200 + +jockey (0.5~beta1-0ubuntu4) intrepid; urgency=low + + * Merge bug fixes from trunk: + - Remove any Disable dri2 (in nvidia.py) from the xorg.conf, otherwise + nvidia-settings and nvidia-xconfig will fail. [Alberto] + - Further clarify fglrx rationale. + - Make the nvidia handler raise an AssertionError if the version of the + driver is < 173, since they do not work with current X.org. [Alberto] + * data/handlers/broadcom_wl.py: Fix crash if wl module is not available. + (LP: #280929) + * data/handlers/fglrx.py: Raise an exception in the ctor, pointing at + LP#247376, since current xorg-driver-fglrx is busted. If this gets fixed + in -updates, this needs to be reverted, and a recommends: to + fglrx-modaliases needs to be added. + + -- Martin Pitt Fri, 10 Oct 2008 18:05:37 +0200 + +jockey (0.5~beta1-0ubuntu3) intrepid; urgency=low + + * Merge bug fixes from trunk: + - Update the name of fglrx; radeonhd etc. are accelerated, too. + (LP: #263359) + - ui.py, backend(): Re-detect device drivers after the backend timed out. + (LP: #273231) + - backend.py, set_enabled(): Propagate exceptions from the enable/disable + threads. (LP: #278034) + - jockey-{gtk,kde}: Fix display of UI elements if no drivers are + available. (LP: #277616, #277702) + - jockey-kde: Actually show a license dialog when clicking on "Details" + for the license. [Alberto] + - Fix enabling/disabling of video drivers if multiple cards are + configured in xorg.conf. [Alberto] + - detection.py, get_printers(): Intercept RuntimeError harder. + (LP: #272721) + + -- Martin Pitt Mon, 06 Oct 2008 13:34:12 +0200 + +jockey (0.5~beta1-0ubuntu2) intrepid; urgency=low + + * Merge some bug fixes from trunk: + - ui.py: Fix "not installed" -> "not activated" string inconsistency. + (LP: #274697) + - Fix typos in German translation. + - Add and use enabled/disabled/free icons from Kenneth Wimer. + - Fix jockey-kde crash when no drivers are available. (LP: #278677) + [Alberto] + - Report indefinite progress if the handler does long non-package + operations (such as rebuilding initramfs), instead of freezing the UI. + - UI: Select first driver by default, and keep selection after + enable/disable. (LP: #274699) + - jockey-kde: Fix display of window text and subtext, and adapt it to + driver changes. (LP: #274558) + - Avoid flickering the progress bar dialog for very fast detect() calls. + - jockey-kde: Fix indeterminate progress bar behaviour, and fix "Searching + for drivers..." progress bar at startup. + - kde/ManagerWindowKDE4.ui: Drop the expander next to the window heading, + it prevented proper resizing. (LP: #274700) + - Various test suite fixes. + * data/handlers/b43.py: Do not show the driver as "in use" if the firmware + is not installed. + * Add data/handlers/broadcom_wl.py: Handler for the alternative Broadcom + 'wl' module. Enabling this will automatically blacklist b43 and bcm43xx. + (LP: #263097) + * data/handlers/b43.py: Remove blacklist-bcm43 on activation. + * data/handlers/b43.py: Add (derived) handler for b43legacy. (LP: #247495) + * data/handlers/b43.py: Actually call the firmware fetching script after the + -fwcutter installation. + + -- Martin Pitt Thu, 02 Oct 2008 20:44:09 +0200 + +jockey (0.5~beta1-0ubuntu1) intrepid; urgency=low + + * New upstream release 0.5 beta 1. Compared to our trunk snapshot, this + has the following changes: + - Fix spawning of "Searching drivers..." progress dialog for invoking the + UI through D-BUS. + - ui.py: Work around some xgettext false positives, so that they won't + appear in the .pot. + - Merge translations, and fully update the German one. + * backend/jockey-backend: Fixed merge error which caused the GTK/KDE tests + to fail in the ubuntu branch. + + -- Martin Pitt Thu, 25 Sep 2008 20:47:09 +0200 + +jockey (0.5~alpha1-0ubuntu5) intrepid; urgency=low + + * Merge bug fixes from trunk: + - Fix XorgDriverHandler to not be "used" right after enabling. + - Make sure that dri2 is not disabled for fglrx, it crashes amdcccle. (LP: + #273320) [Alberto] + - Use a "refresh" icon for drivers where a reboot needs to happen. + (LP: #272238) [Alberto] + - Fix KDE notification and the related test. Work around segfault when + exiting the KDE UI. (LP: #270522) [Alberto] + - search_driver(): Return list of installed files in addition to status + code. Document the return value in README.txt. (LP: #269311) + - Converts search_driver() printer device ID to friendly string (only + supports printers for now). (part of LP #269454) + - Do not make a backup of xorg.conf if the proprietary driver is already + set there, so that we don't automatically revert to a configuration with + the proprietary driver after uninstalling exactly that. [Alberto] + + -- Martin Pitt Wed, 24 Sep 2008 22:40:22 +0200 + +jockey (0.5~alpha1-0ubuntu4) intrepid; urgency=low + + * debian/jockey-kde.install: Drop *.ui files, they are not installed by + upstream any more (creates .py files at build time now). Fixes FTBFS. + Thanks, Alberto Milone! + + -- Martin Pitt Tue, 23 Sep 2008 13:58:46 +0200 + +jockey (0.5~alpha1-0ubuntu3) intrepid; urgency=low + + * Merge some bug fixes from trunk: + - Fix search_drivers() to not return unrelated available handlers. + - Change --search-driver UIs from confirmation dialog to displaying list + of matches. (One half of LP: #269454) + - OpenPrintingDriverDB: Show shortdescription and functionality fields. + (Other half of LP: #269454) + - Drop a lot of redundant probing from add_driverdb() and search_driver(). + - Build KDE .ui -> python on build time, to avoid runtime uic dependency. + (LP: #271317) + - nvidia, fglrx handlers: Remove RgbPath option, it causes X.org to crash. + - ui.py: Update action button strings according to latest recommendations + from Matthew Thomas, thanks! + - ui.py: Properly intercept failure to connect to D-BUS. (LP: #258472) + * Add python-kde4-dev build dependency, now needed to get pykde4uic. + * fglrx, nvidia: Uninstall -kernel-source in disable(), thanks Alberto. + (LP: #251962) + * jockey/oslib.py, install_package(): Intercept SystemError. (LP: #258713, + LP: #272146) + + -- Martin Pitt Mon, 22 Sep 2008 15:39:42 +0200 + +jockey (0.5~alpha1-0ubuntu2) intrepid; urgency=low + + * debian/control: Replace python-qt4 dependency with python-kde4, since + that's required now. (LP: #263017) + * oslib.py, {install,remove}_package(): Intercept apt's LockFailedException + and FetchFailedException. (LP: #268850) + * oslib.py: Fix typo causing crash in remove_repository(), add test cases. + (LP: #269435) + * Merge some bug fixes from trunk: + - Update KDE UI according to recent GTK ui changes. (LP #268163) + - ui.py, set_handler_enable(): Fix reversed logic in determining + enable/disable strings. (LP: #269444) + - fglrx.py: Fix crash if Device section does not configure a driver + (LP: #269565) + - Test suite: check handler behaviour with invalid xorg.conf, fix a few + crashes uncovered by that. (LP: #258064) + - detection.py: Fix crashes if cupsd is not running. (LP: #256780, #255488) + - jockey-gtk: Call gtk.init_check() to test $DISPLAY, and print error + message instead of crashing. (LP: #234252) + - oslib.py, _save_module_blacklist(): Create modules.d directory if it + does not exist. (LP: #229065) + - jockey-gtk: Add license text dialog and link it to the license button + (LP: #269352) + - com.ubuntu.devicedriver.policy.in: Allow non-local driver install + (auth_admin). (LP: #269175) + - Move hardware detection from Backend ctor to separate function, and call + that with long D-BUS timeout and progress dialog. (LP: #253224) + - Various fixes in test suite. + + -- Martin Pitt Tue, 16 Sep 2008 08:10:35 -0700 + +jockey (0.5~alpha1-0ubuntu1) intrepid; urgency=low + + * New upstream release, Alpha 1 of upcoming 0.5: + - GTK user interface shows support and license status of a driver now. + (jockey-printer-driver-support blueprint). + - Refurbished workflow and look of the GTK user interface according to + Matthew Paul Thomas' recommendations. (LP: #268163) Corresponding + changes to the KDE UI are in the works, and will be merged soon. + - Uses X-Kit instead of guidance-backends now, update dependency. + (LP: #269057) + - Fix a few regressions of the PyKDE 4 port. + - Add support for recommended driver versions in the case of multiple + different available versions (such as with the Nvidia driver). + + -- Martin Pitt Fri, 12 Sep 2008 11:57:48 +0200 + +jockey (0.4.1+r360-0ubuntu1) intrepid; urgency=low + + * New upstream snapshot: + - Port KDE frontend to PyKDE, by Jonathan Thomas + + -- Jonathan Riddell Tue, 26 Aug 2008 16:57:30 +0100 + +jockey (0.4+r354-0ubuntu1) intrepid; urgency=low + + * New upstream snapshot: + - Add session D-BUS interface for jockey-gtk, so that programs like + system-config-printer can use the "search_driver" API to request a + driver for a particular hardware component with getting GUI. + - Full backend integration of OpenPrinting.org driver search. + - Various bug fixes. + * jockey/oslib.py: Use python-apt instead of calling apt-get, to get numeric + progress reporting instead of just pulsating. + * Add python-apt dependency, Ubuntu oslib.py uses it now. + * Bump Standards-Version (no changes). + * Bump debhelper build dependency version for dh_icons, thanks lintian. + * jockey/oslib.py: Provide an apt implementation for + {add,remove}_repository() and repository_enabled(). + * backend/jockey-backend: Enable the OpenPrinting.org driver lookup by + default, so that we can test it in intrepid. There is no UI to point out + that these are community provided drivers, this will be done in a later + release. + + -- Martin Pitt Fri, 15 Aug 2008 18:21:08 +0200 + +jockey (0.4+r345-0ubuntu1) intrepid; urgency=low + + * Use upstream snapshot as orig.tar.gz, so that file executable permissions + do not get lost when they are shipped in the diff.gz. This caused the + backend to be installed non-executable. (LP: #251347) + + -- Martin Pitt Thu, 24 Jul 2008 14:24:24 +0200 + +jockey (0.4-0ubuntu2) intrepid; urgency=low + + * jockey/oslib.py, {install,remove}_package(): Explicitly set $PATH, so that + apt-get and dpkg have a chance of working when being called from a D-BUS + spawned process (whose environment has virtually nothing at all). + + -- Martin Pitt Wed, 23 Jul 2008 23:41:14 +0200 + +jockey (0.4-0ubuntu1) intrepid; urgency=low + + * New upstream release 0.4: + - Implements an XML-RPC client for querying a driver database, as + specified on this year's LinuxFoundation Collaboration Summit. There is + no server implementation for this yet, though. + - Add general support for third-party repositories and packages not yet + known to the local system. In the course of this, the functionality of + DriverPackageHandler became merged into the generic Handler class, and + ModulePackageHandler became obsolete (KernelModuleHandler now does all + of this). This made the code a bit shorter and easier, too. + - Add support for python-coverage in the test suite, and add a lot of + missing tests. + - Lots of bug fixes. + * Update to current trunk bzr head: + - Split into privileged D-BUS backend and unprivileged frontends, control + access with PolicyKit. This gets rid of the nasty "gksu/kdesu myself" + code, and makes the service more useful for other desktop applications + which look for drivers. + - Support fourth field in modalias files for specifying a package name (as + done by nvidia-XX-modaliases packages). + - Update NVidia handler to get along with the multiple-versions packages + in Intrepid. + * debian/jockey-common.install: Install D-BUS and PolicyKit configuration + files, and jockey-backend program. + * data/handlers/b43.py: Update to new upstream infrastructure. + * jockey/oslib.py: Reimplement {install,remove}_package() using simple + apt-get calls, with no precise progress information. This is a + quick'n'dirty hack for Intrepid Alpha-3, so that the user at least gets + some kind of visual feedback on package installation. This will be cleaned + up later. + * debian/control: Add python-dbus, policykit dependencies to -common, and + policykit-gnome dependency to -gtk. + * debian/control: Recommend nvidia-common to provide out-of-the-box + detection of nvidia cards, and their matching driver. + + -- Martin Pitt Wed, 23 Jul 2008 16:38:17 +0200 + +jockey (0.3.3-0ubuntu10) intrepid; urgency=low + + * Drop Recommends: of linux-restricted-modules. They transitively pull in + lilo into ubuntu-desktop, and with the split-out fglrx and nvidia drivers + they do not even make sense any more. + + -- Martin Pitt Mon, 14 Jul 2008 09:54:22 +0100 + +jockey (0.3.3-0ubuntu9) intrepid; urgency=low + + * Upload fixes from hardy-proposed to intrepid. + + -- Martin Pitt Mon, 05 May 2008 20:49:10 +0200 + +jockey (0.3.3-0ubuntu8) hardy-proposed; urgency=low + + * fglrx.py: Do not override already installed third-party fglrx driver with + --check-composite. (LP: #221968) + * debian/control: Updated Vcs-Bzr: to point to the hardy branch. + * XorgDriverHandler, nvidia, fglrx: Set identifiers for newly created + sections, they are invalid without one. Thanks to Laszlo Pandy! + (LP: #218478) + * nvidia.py: Fix "enabled" handling: check if the package is installed and + module not blacklisted. (LP: #216650) + * OSLib.open_app(): Wait until the subprocess returned, so that we can check + the system state afterwards. (prerequisite for change below) + * jockey/ui.py, --check-composite: Re-check the system after attempting to + enable the driver, and only signal success (exit with 0) if the driver was + actually enabled. Otherwise, cancelling installation would invalidly + signal success to the caller. (LP: #208026) + + -- Martin Pitt Mon, 28 Apr 2008 19:24:11 +0200 + +jockey (0.3.3-0ubuntu7) hardy; urgency=low + + * Cherrypick a few bug fixes from trunk: + - nvidia.py: Drop AddARGBVisuals and AddARGBGLXVisuals options from legacy + driver. (LP: #211752) + - fglrx.py: Fix detection of autodetected radeon driver. (LP: #207957) + - jockey/ui.py: Intercept IOErrors when writing to stderr. (LP: #204120) + + -- Martin Pitt Tue, 08 Apr 2008 19:34:23 -0500 + +jockey (0.3.3-0ubuntu6) hardy; urgency=low + + * Cherrypick a few bug fixes from trunk: + - nvidia.py: Fix extra screen options to get quoted properly. + (LP: #211368) + - autostart .desktop files: Add Comment field. (LP: #146918) + - POTFILES.in: Add missing desktop files. + + -- Martin Pitt Sun, 06 Apr 2008 11:24:00 -0600 + +jockey (0.3.3-0ubuntu5) hardy; urgency=low + + * jockey/oslib.py: Fix undeclared 'env' variable, residue from fix in + 0.3.3-0ubuntu3. (LP: #189611) + + -- Martin Pitt Fri, 04 Apr 2008 09:16:08 +0200 + +jockey (0.3.3-0ubuntu4) hardy; urgency=low + + * debian/jockey-common.postinst: Remove old restricted-manager autostart XDG + file on upgrades. + + -- Martin Pitt Thu, 03 Apr 2008 18:07:22 +0200 + +jockey (0.3.3-0ubuntu3) hardy; urgency=low + + * jockey/oslib.py: Do not set debconf priority to critical any more. + b43-fwcutter needs the "download firmware" question shown in order to + actually download the firmware, and we do not need it ATM for other + packages. (LP: #197819) + + -- Martin Pitt Thu, 03 Apr 2008 14:49:12 +0200 + +jockey (0.3.3-0ubuntu2) hardy; urgency=low + + * Merge to upstream trunk to pick up a few bug fixes: + - nvidia.py: Add AddARGBGLXVisuals option to Screen section for + nvidia-glx. (LP: #154596) + - nvidia.py: Do not advertise as enabling composite if driver is already + loaded (i. e. installed manually). (LP: #202802) + - fglrx.py: Do not suggest installing fglrx if using the radeon X.org + driver, since that already supports composite (LP: #207957) + - jockey/ui.py: Change --update-db to print an error message instead of + exception (LP: #209594) + - If rebinding a module fails, trigger reboot notification. (LP: #207928) + + -- Martin Pitt Tue, 01 Apr 2008 20:40:50 +0200 + +jockey (0.3.3-0ubuntu1) hardy; urgency=low + + * New upstream bug fix release: + - jockey/xorg_driver.py: Check if _row attribute is present, which is not + the case for Subsections in the "Module" section. (LP: #201160) + - Make --check-composite ask for confirmation. (LP: #202898) + - Enable AddARGBGLXVisuals option for standard nvidia driver. + (LP: #154596) + - KDE: Do not change check boxes if enabling was cancelled. + - KDE: Drop unicode() conversion in confirm_action(), strings are already + unicode (LP: #206169) + - KDE: Disable help button if help is not available. (LP #206169) + + -- Martin Pitt Thu, 27 Mar 2008 12:41:53 +0100 + +jockey (0.3.2-0ubuntu3) hardy; urgency=low + + * Cherrypick some bug fixes from trunk: + - Add automatic testing for all shipped custom handlers in examples/ and + data/handlers/. So far the test suite only covered the standard + handlers. + - This uncovered that the fglrx and nvidia handlers still crash if + xorg.conf does not have a Screen section; fixed for real now. + (LP: #200832) + * data/handlers/b43.py: Add missing import (also uncovered by above test + suite). (LP: #203958) + + -- Martin Pitt Thu, 20 Mar 2008 16:30:32 +0100 + +jockey (0.3.2-0ubuntu2) hardy; urgency=low + + * Final 0.3.2 release (previous Ubuntu upload had a botched version number) + with bug fixes only (no new features). This time also with orig.tar.gz + again. + - fglrx, nvidia handlers: Create screen section if it does not exist. + (LP: #200832) + - Abort gracefully with a proper error message if cache directory does not + exist. (LP: #198433) + - ui.py, check(): Intercept ValueError from package query. This can happen + if the daily apt cron job runs while jockey is running as well and + temporarily causes inconsistent package indexes. (LP: #200089) + - kde/jockey-kde, comfirm_action(): Fix string formatting. (LP: #197777) + - jockey/oslib.py: Fix calling of kdesu. + - kde/jockey-kde: Make --check notifications actually work (LP: #193985) + - Fix the KDE interface test suite. + * debian/rules: Fix apport hook file name. + * debian/apport_hook.py: Add missing import. + * data/handlers/b43.py: Consider driver enabled if firmware files are + installed; testing whether b43-fwcutter is installed (the default + behaviour of ModulePackageHandler) is incorrect here. (LP: #198341) + + -- Martin Pitt Tue, 18 Mar 2008 17:28:32 +0100 + +jockey (0.3.2-0ubuntu1) hardy; urgency=low + + * New upstream bug fix release for KDE frontend changes: + - Add Oxygen icon + - Resize columns to text + - Nodes expanded by default + + -- Ryan Kavanagh Thu, 13 Mar 2008 19:26:16 +0000 + +jockey (0.3.1-0ubuntu1) hardy; urgency=low + + * New upstream bug fix release: + - Fix 'used' detection of nVidia driver. + - Add README.txt. + - Create default xorg.conf if it does not exist. + - More efficient modalias data structures for great detection stage + speedup (typically from > 5 to about 1 second). + - Run --check with niceness 10 and change autostart desktop files to delay + it by a minute, so that it does not slow down session startup. + - Fix --enable and --disable to not ask for confirmation, otherwise they + are useless in noninteractive scripts. + * oslib.py: Cache "apt-cache show" results. + * oslib.py: If we do not have a $DISPLAY, just call apt-get, not + x-terminal-emulator. + + -- Martin Pitt Mon, 10 Mar 2008 15:42:03 +0100 + +jockey (0.3-0ubuntu1) hardy; urgency=low + + * Merge with trunk to update to the 0.3 release. We already had all the new + features like the KDE interface, so this only imports bug fixes, in + particular: + - Update fglrx handler for current upstream version, to actually work + again at all (DisplayDepth) and declare support for composite. Thanks to + Sander Jonkes! (LP: #194963) + - Quiesce backtraces from failed handler instantiation. (LP: #195548) + - Use regular expressions, not fnmatch for modalias pattern matching, + since we do not want to treat '[' and ']' specially. (LP: #193521) + - Port --enable and --disable options from restricted-manager. + (LP: #181832) + - Port --check-composite from restricted-manager. (LP: #193978) + * Fixed Vcs-Bzr field. + * Remove do-release from this branch, it's only useful for upstream + developers on trunk and confusing in the package. + * debian/jockey-common.postinst: Remove --check cache on upgrade from + << 0.3, since the format changed (much more robust now). + + -- Martin Pitt Tue, 04 Mar 2008 16:48:50 +0100 + +jockey (0.2-0ubuntu6) hardy; urgency=low + + * rebuild due to python-central issue + + -- Sebastien Bacher Tue, 19 Feb 2008 22:08:52 +0100 + +jockey (0.2-0ubuntu5) hardy; urgency=low + + * Add debug logging for enabled() to XorgDriver and ModulePackageHandler. + (Cherrypicked from trunk) + * Make window title consistent to .desktop files. (LP: #189689) + (Cherrypicked from trunk) + + -- Martin Pitt Tue, 19 Feb 2008 09:38:46 +0100 + +jockey (0.2-0ubuntu4) hardy; urgency=low + + * Merged Martin Böhm's KDE implementation, thanks a lot! + + -- Martin Pitt Thu, 14 Feb 2008 18:55:10 +0100 + +jockey (0.2-0ubuntu3) hardy; urgency=low + + * At least on current kernel, devices on the SSB bus do not produce modalias + files, they just mention it in 'uevent'. Add detection for those, so that + autodetection of Broadcom wifis (b43 driver) works. (Cherrypicked from + trunk). + * Do not ignore custom handlers which wrap a standard kernel module (which + are ignored by default). (Cherrypicked from trunk) + * Add data/handlers/b43.py: Handler for the b43 Broadcom Wifi module. + + -- Martin Pitt Mon, 11 Feb 2008 09:58:23 +0100 + +jockey (0.2-0ubuntu2) hardy; urgency=low + + * Stop running the tests during build, they need too many build deps. + + -- Martin Pitt Tue, 05 Feb 2008 09:30:48 +0100 + +jockey (0.2-0ubuntu1) hardy; urgency=low + + * New upstream bug fix release: + - Do not create default handlers for nonexisting kernel modules. + (LP: #187148) + - Suppress exceptions (like SIGPIPE) in logging. (LP: #188658) + - Enable UseEdidFreqs for legacy NVidia driver. (LP: #151141) + - Set proper window icon. (LP: #187073) + - Clean up strings in .desktop files (LP: #150205) + - Fix test suite exit code on success. + - Do not set AddARGB{,GLX}Visuals options in standard and new nVidia + handler any more (obsolete). + - Support hiding of help button if help is not available. + * tests/oslib.py: Add simple tests for Ubuntu implementation of package + system query functions. + * jockey/oslib.py, package_description(): Do not crash when apt-cache show + succeeds, but prints nothing. This works around apt bug #18306. + (LP: #186943) + * tests/oslib.py: Add shallow test cases for {install,remove}_packge() to + ensure that they won't crash for the simplest reasons. This reproduces + #186584. + * jockey/oslib.py: Add missing import of time. (LP: #186584, #186883) + * jockey/oslib.py, ui_help_available(): Only show help if yelp is present. + (LP: #186179) + * debian/rules: Run test suite during build (failure causes FTBFS). + + -- Martin Pitt Mon, 04 Feb 2008 18:53:26 +0100 + +jockey (0.1-0ubuntu1) hardy; urgency=low + + * First upstream release 0.1: + - Add installed_packages status file, so that the ubiquity hook actually + works. + - Add test suite for GTK frontend (run through all widgets). + - Import usable translations from restricted-manager. + - Some internal code architecture cleanup. + - Some bug fixes, particularly in FirmwareHandler and build system. + * debian/rules: Remove POT on clean. + + -- Martin Pitt Thu, 31 Jan 2008 12:53:36 +0100 + +jockey (0.1~r139) hardy; urgency=low + + * Add missing python-distutils-extra dependency. + + -- Martin Pitt Fri, 25 Jan 2008 09:20:43 +0000 + +jockey (0.1~r118) hardy; urgency=low + + * Initial release, result of completely rewriting restricted-manager to be + maintainable, robust, and suitable for other distributions. Some features + and the KDE UI still need to be ported. + * See restricted-manager-rewrite specification for details. + + -- Martin Pitt Thu, 17 Jan 2008 15:02:40 +0100 --- jockey-0.9.7.orig/debian/jockey.ubiquity +++ jockey-0.9.7/debian/jockey.ubiquity @@ -0,0 +1,14 @@ +#!/bin/sh -e + +# install all packages that were pulled in by enabling modules in +# jockey, since we do save the X.org configuration already. Without the +# accompanying driver packages (like nvidia-glx), the target system would be +# wrecked. + +PKGLIST=/var/cache/jockey/installed_packages + +[ -e $PKGLIST ] || exit 0 + +for p in `cat $PKGLIST`; do + apt-install $p +done --- jockey-0.9.7.orig/debian/compat +++ jockey-0.9.7/debian/compat @@ -0,0 +1 @@ +7 --- jockey-0.9.7.orig/debian/apport_hook.py +++ jockey-0.9.7/debian/apport_hook.py @@ -0,0 +1,20 @@ +import os.path, os + +import apport.hookutils + +XORG_CONF = '/etc/X11/xorg.conf' + +def add_info(report): + try: + report['XorgConf'] = open(XORG_CONF).read() + except IOError: + pass + + report['Devices'] = '' + for dirpath, dirnames, filenames in os.walk("/sys/devices"): + if "modalias" in filenames: + modalias = open(os.path.join(dirpath, "modalias")).read().strip() + report['Devices'] += modalias + "\n" + + apport.hookutils.attach_file_if_exists(report, '/var/log/jockey.log') + apport.hookutils.attach_hardware(report) --- jockey-0.9.7.orig/debian/jockey-kde.install +++ jockey-0.9.7/debian/jockey-kde.install @@ -0,0 +1,5 @@ +usr/bin/*-kde +usr/share/applications/*-kde.* +usr/share/autostart/*-kde.desktop etc/xdg/autostart/ +usr/share/jockey/*Dialog*.ui +usr/share/jockey/*Window*.ui --- jockey-0.9.7.orig/debian/dh-modaliases.install +++ jockey-0.9.7/debian/dh-modaliases.install @@ -0,0 +1,2 @@ +../debhelper/dh_modaliases usr/bin +../debhelper/modaliases.pm usr/share/perl5/Debian/Debhelper/Sequence --- jockey-0.9.7.orig/debian/jockey-common.dirs +++ jockey-0.9.7/debian/jockey-common.dirs @@ -0,0 +1 @@ +/var/cache/jockey --- jockey-0.9.7.orig/debian/jockey-common.logrotate +++ jockey-0.9.7/debian/jockey-common.logrotate @@ -0,0 +1,9 @@ +/var/log/jockey.log { + daily + rotate 10 + copytruncate + delaycompress + compress + notifempty + missingok +} --- jockey-0.9.7.orig/debian/jockey-gtk.install +++ jockey-0.9.7/debian/jockey-gtk.install @@ -0,0 +1,5 @@ +usr/bin/*-gtk +usr/share/jockey/*gtk*.ui +usr/share/applications/*-gtk.* +usr/share/autostart/*-gtk.desktop etc/xdg/autostart/ +usr/share/dbus-1/services --- jockey-0.9.7.orig/debian/copyright +++ jockey-0.9.7/debian/copyright @@ -0,0 +1,25 @@ +This package has been debianized by Martin Pitt + on January 17, 2008. + +Copyright (C) 2007, 2008 Canonical Ltd. +Authors: + Martin Pitt + Martin Böhm + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + --- jockey-0.9.7.orig/debian/watch +++ jockey-0.9.7/debian/watch @@ -0,0 +1,2 @@ +version=3 +http://launchpad.net/jockey/+download .*/jockey-([0-9.]+)\.tar\.gz --- jockey-0.9.7.orig/debian/jockey-common.install +++ jockey-0.9.7/debian/jockey-common.install @@ -0,0 +1,11 @@ +usr/lib/python*/*/jockey/*.py +usr/lib/python*/*/*.egg-info +usr/share/icons +usr/share/locale +usr/share/jockey/modaliases +usr/share/jockey/handlers +etc/dbus-1/system.d/ +usr/share/dbus-1/system-services +usr/share/polkit-1 +usr/share/jockey/jockey-backend +usr/bin/jockey-text --- jockey-0.9.7.orig/debian/jockey-common.postrm +++ jockey-0.9.7/debian/jockey-common.postrm @@ -0,0 +1,7 @@ +#!/bin/sh -e + +if [ "$1" = remove ]; then + rm -rf /var/cache/jockey +fi + +#DEBHELPER# --- jockey-0.9.7.orig/debian/jockey-common.postinst +++ jockey-0.9.7/debian/jockey-common.postinst @@ -0,0 +1,29 @@ +#!/bin/sh -e + +if [ "$1" = configure ] || [ "$1" = reconfigure ]; then + if getent group sudo > /dev/null 2>&1; then + chown root:sudo /var/cache/jockey + chmod 3775 /var/cache/jockey + fi + + if dpkg --compare-versions "$2" lt-nl "0.3"; then + # format changed between 0.2 and 0.3 + rm -f /var/cache/jockey/check + fi + + # clean up after restricted-manager->jockey package transition + if dpkg --compare-versions "$2" lt "0.3.3-0ubuntu3"; then + rm -f /etc/xdg/autostart/restricted-manager.desktop + fi + + # modutils recently introduced .conf suffix requirement + if dpkg --compare-versions "$2" lt-nl "0.5-0ubuntu3"; then + for f in /etc/modprobe.d/blacklist-bcm43 /etc/modprobe.d/blacklist-local; do + if [ -e "$f" ] && [ ! -e "$f.conf" ]; then + mv "$f" "$f.conf" + fi + done + fi +fi + +#DEBHELPER# --- jockey-0.9.7.orig/debian/rules +++ jockey-0.9.7/debian/rules @@ -0,0 +1,19 @@ +#!/usr/bin/make -f + +DEB_VERSION=$(shell dpkg-parsechangelog | grep ^Version | cut -f2 -d\ |cut -f1 -d-) + +%: + dh "$@" --with translations,python2 + +override_dh_install: + dh_install + install -m0644 -D debian/apport_hook.py \ + debian/jockey-common/usr/share/apport/package-hooks/source_jockey.py + install -m0755 -D debian/jockey.ubiquity \ + debian/jockey-common/usr/lib/ubiquity/target-config/31jockey_pkgs + mkdir -p debian/dh-modaliases/usr/share/man/man1 + pod2man -c Debhelper -r "$(DEB_VERSION)" debian/debhelper/dh_modaliases debian/dh-modaliases/usr/share/man/man1/dh_modaliases.1 + +override_dh_clean: + dh_clean + sh debian/testpkgs/clean --- jockey-0.9.7.orig/debian/testpkgs/fglrx-updates.control +++ jockey-0.9.7/debian/testpkgs/fglrx-updates.control @@ -0,0 +1,9 @@ +Section: misc +Priority: optional + +Package: fglrx-updates +Version: 9:1.0 +Depends: dkms +Description: dummy fglrx-updates driver (fails) + dummy fglrx +Preinst: fail.sh --- jockey-0.9.7.orig/debian/testpkgs/fglrx.control +++ jockey-0.9.7/debian/testpkgs/fglrx.control @@ -0,0 +1,8 @@ +Section: misc +Priority: optional + +Package: fglrx +Version: 9:1.0 +Depends: dkms +Description: dummy fglrx driver (works) + dummy fglrx --- jockey-0.9.7.orig/debian/testpkgs/fail.sh +++ jockey-0.9.7/debian/testpkgs/fail.sh @@ -0,0 +1,4 @@ +#!/bin/sh +set -e +echo "Failing deliberately" >&2 +exit 1 --- jockey-0.9.7.orig/debian/testpkgs/clean +++ jockey-0.9.7/debian/testpkgs/clean @@ -0,0 +1,4 @@ +#!/bin/sh +# Remove all built files from install +cd $(readlink -f $(dirname $0)) +rm -f *.deb Packages* --- jockey-0.9.7.orig/debian/testpkgs/install +++ jockey-0.9.7/debian/testpkgs/install @@ -0,0 +1,16 @@ +#!/bin/sh +# Create and install some dummy fglrx/nvidia packages; needs equivs +set -e + +cd $(readlink -f $(dirname $0)) + +for f in *.control; do + equivs-build $f +done + +apt-ftparchive packages . | gzip -9 > Packages.gz + +APT_SOURCES=/etc/apt/sources.list.d/jockey-test.list +echo "Installing $APT_SOURCES..." +echo "deb file://$(pwd)/ /" | sudo tee $APT_SOURCES >/dev/null +sudo apt-get update --- jockey-0.9.7.orig/debian/testpkgs/uninstall +++ jockey-0.9.7/debian/testpkgs/uninstall @@ -0,0 +1,8 @@ +#!/bin/sh +# Remove apt source for dummy packages +set -e +APT_SOURCES=/etc/apt/sources.list.d/jockey-test.list +[ -e $APT_SOURCES ] || exit 0 +echo "Uninstalling $APT_SOURCES..." +sudo rm $APT_SOURCES +sudo apt-get update --- jockey-0.9.7.orig/debian/source/format +++ jockey-0.9.7/debian/source/format @@ -0,0 +1 @@ +1.0 --- jockey-0.9.7.orig/debian/debhelper/test_dh_modaliases +++ jockey-0.9.7/debian/debhelper/test_dh_modaliases @@ -0,0 +1,74 @@ +#!/bin/sh +# test dh_modaliases +set -e + +fail() +{ + /bin/echo -e "$1" + exit 1 +} + +dh=$(dirname `readlink -f $0`)/dh_modaliases +module=`modinfo snd_hda_intel | grep ^filename: | awk '{print $2}'` + +# build sandbox +D=`mktemp -d` +trap "rm -r $D" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM +cd $D + +# create test package +mkdir -p src/debian +cd src + +cat < debian/control +Source: foo +Build-Depends: debhelper (>= 7) +Maintainer: Joe Tester + +Package: foo +Architecture: any +Description: test +Depends: \${shlibs:Depends} +XB-Modaliases: \${modaliases} +EOF +cat < debian/rules +#!/usr/bin/make -f +%: + dh \$@ + +override_dh_install: + dh_install + install -m 644 -D $module debian/foo/lib/modules/extra/`basename $module` + $dh -v +EOF +cat < debian/changelog +foo (1) test; urgency=low + + * Test + + -- Joe Tester Thu, 18 Nov 2010 16:15:29 +0100 +EOF +echo 7 > debian/compat + +# build it and check the generated headers from the .ko +#dpkg-buildpackage -us -uc +# +#header=`dpkg -I ../foo_1_*.deb` +#echo "$header" | grep -q '^[[:space:]]*Package: foo$' || fail "No proper Package: header in\n$header" +#echo "$header" | grep -q '^[[:space:]]*Modaliases: snd_hda_intel(pci:v00001022d\*sv\*sd\*bc04sc03i00\*, pci:.*i\*.*)$' || fail "No proper modalises in\n$header" +# +# now add a manual modalias file +cat < debian/foo.modaliases +alias ssb:v1234id0000 `basename $module .ko` +alias pci:DEADBEEF `basename $module .ko` ignorethispackagename +alias pci:98765 testmod +EOF + +# build it and check the generated headers from the .ko +dpkg-buildpackage -us -uc + +header=`dpkg -I ../foo_1_*.deb` +echo "$header" | grep -q '^[[:space:]]*Package: foo$' || fail "No proper Package: header in\n$header" +echo "$header" | grep -q "^[[:space:]]*Modaliases: `basename $module .ko`(ssb:v1234id0000, pci:DEADBEEF), testmod(pci:98765)$" || fail "No proper modalises in\n$header" + +echo "PASSED" --- jockey-0.9.7.orig/debian/debhelper/dh_modaliases +++ jockey-0.9.7/debian/debhelper/dh_modaliases @@ -0,0 +1,149 @@ +#!/usr/bin/perl -w + +=head1 NAME + +dh_modaliases - scan kmod modaliases and provide a substvar for them + +=cut + +use strict; +use File::Find; +use Debian::Debhelper::Dh_Lib; + +=head1 SYNOPSIS + +B [S>] + +=head1 DESCRIPTION + +B is useful for packages that ship third-party kernel modules, +either in binary form, or as sources (with e. g. DKMS). It extracts the +modules' modaliases from either the compile .ko files themselves (for packages +which ship them in compiled form, using B), or from a package file +BIB<.modaliases> (see below). + +I creates a package substitution variable C<${modaliases}> which you should add +to C as + +=over 4 + +XB-Modaliases: ${modaliases} + +=back + +This enables software which is looking for missing driver packages (such as +Jockey or the operating system installer) to identify which package(s) will +provide a driver for a piece of hardware, identified by its modalias. + +=head1 PACKAGE MODALIAS FILES + +If a package ships source code (using DKMS, module-assistant, etc.) instead of +compiled binary kernel modules, then B can't figure out the +modaliases by scanning the *.ko files, and you have to provide the modalias +list manually as a package file BIB<.modaliases>. + +The format matches the /lib/modules/`uname -r`/modules.alias file from the +Linux kernel. Examples: + +=over 4 + +alias ssb:v1234id5678 snd_super_booster +alias pci:v000010DEd0000004Esv*sd*bc03sc*i* nvidia_current + +=back + +You can generate such a list if you locally build and install this module, and +then run + +=over 4 + +modinfo mymodname | perl -nae 'print "alias $1 mymodname\n" if /^alias:\s+(.*)$/' + +=back + +(replacing "mymodname" with the actual module name). + +=head1 OPTIONS + +The standard debhelper options are supported. + +=cut + +init(); + +my $aliases; + +sub modalises_from_ko { + my $name = $_; + return unless /\.ko$/; + return if -l $_ or -d $_; # Skip directories and symlinks + + # See if we were asked to exclude this file. + foreach my $f (@{$dh{EXCLUDE}}) { + return if ($File::Find::name =~ m/\Q$f\E/); + } + + my ($modname) = ($name =~ /^(.*)\.ko$/); + $modname =~ s/-/_/g; # canonical names are with underscores + my @a; + open M, '-|', 'modinfo', $name or die "open: $!"; + while () { + if (/^alias:\s*(.*)$/) { + verbose_print("$File::Find::name: module $modname has alias $1"); + push @a, $1; + } + } + if ($aliases) { + $aliases .= ', '; + } + $aliases .= $modname . '(' . (join ', ', @a) . ')'; +} + +sub modalises_from_pkgfile { + my %module_alias_map = (); + open F, $_[0]; + while () { + next if /^#/; + + if (/^alias\s*([^[:space:]]+)\s*([^[:space:]]+)/) { + verbose_print("package file $_[0]: module $2 has alias $1"); + push @{$module_alias_map{$2}}, $1; + } else { + warning("$_[0]: cannot translate line into modalias: $_"); + } + } + + foreach my $m (sort keys %module_alias_map) { + if ($aliases) { + $aliases .= ', '; + } + $aliases .= $m . '(' . (join ', ', @{$module_alias_map{$m}}) . ')'; + } +} + +foreach my $package (@{$dh{DOPACKAGES}}) +{ + my $tmp = tmpdir($package); + + delsubstvar($package, 'modaliases'); + $aliases = ''; + my $manual_list = pkgfile($package, 'modaliases'); + if ($manual_list) { + modalises_from_pkgfile $manual_list; + } else { + find(\&modalises_from_ko, tmpdir($package)); + } + addsubstvar($package, 'modaliases', $aliases); +} + +=head1 SEE ALSO + +L, L + +This program is an extension to debhelper. + +=head1 AUTHOR + +Martin Pitt + +=cut --- jockey-0.9.7.orig/debian/debhelper/modaliases.pm +++ jockey-0.9.7/debian/debhelper/modaliases.pm @@ -0,0 +1,11 @@ +#!/usr/bin/perl +# debhelper sequence file for dh_modaliases + +use warnings; +use strict; +use Debian::Debhelper::Dh_Lib; + +insert_after("dh_install", "dh_modaliases"); + +1; + --- jockey-0.9.7.orig/debian/tests/control +++ jockey-0.9.7/debian/tests/control @@ -0,0 +1,3 @@ +Tests: upstream-system +Depends: jockey-common, xvfb, gir1.2-appindicator3-0.1, dbus-x11 +Features: no-build-needed --- jockey-0.9.7.orig/debian/tests/upstream-system +++ jockey-0.9.7/debian/tests/upstream-system @@ -0,0 +1,10 @@ +#!/bin/sh +set -e + +# copy tests into our temporary directory, so that they avoid the local Python +# modules and use the system ones +cp -r tests ${TMPDIR:=/tmp} + +# succeeding test must not write anything to stderr, as per DEP-8 +# work around LP#972324 +env -u TMPDIR xvfb-run env TMPDIR="$TMPDIR" $TMPDIR/tests/run 2>&1 --- jockey-0.9.7.orig/gtk/jockey-gtk +++ jockey-0.9.7/gtk/jockey-gtk @@ -206,7 +206,10 @@ #if trayicon: # notify.attach_to_status_icon(trayicon) notify.set_timeout(10000) - notify.show() + try: + notify.show() + except GLib.GError as e: + sys.stderr.write('Failed to show notification: %s\n' % str(e)) def ui_idle(self): '''Process pending UI events and return. --- jockey-0.9.7.orig/data/modaliases/b43 +++ jockey-0.9.7/data/modaliases/b43 @@ -0,0 +1,2 @@ +# taken from b43-fwcutter postinsts +alias pci:v000014E4d00004315sv*sd*bc*sc*i* b43 firmware-b43-lpphy-installer --- jockey-0.9.7.orig/data/modaliases/disable-upstream-nvidia +++ jockey-0.9.7/data/modaliases/disable-upstream-nvidia @@ -0,0 +1,6 @@ +# the nvidia modules have catch-all modaliases, which is wrong; kill +# them off here, and use the linux-restricted-modules overrides files +# instead (which are evaluated later than this file) +reset nvidia +reset nvidia_new +reset nvidia_legacy --- jockey-0.9.7.orig/data/handlers/vmware-client.py +++ jockey-0.9.7/data/handlers/vmware-client.py @@ -0,0 +1,28 @@ +# (c) 2009, 2011 Canonical Ltd. +# Author: Martin Owens +# License: GPL v2 or later + +from jockey.handlers import Handler, KernelModuleHandler + +# dummy stub for xgettext +def _(x): return x + +class VmwareClientHandler(KernelModuleHandler): + '''Handler for the VMWARE client tools. + + Allows us to install some nice client tools for VMWARE clients. + ''' + def __init__(self, ui): + KernelModuleHandler.__init__(self, ui, 'vmxnet', + name=_('VMWare Client Tools'), + description=_('Install VMWare client drivers and tools'), + rationale=_('Install the VMWare client drivers and tools' + ' for your VMWare based Ubuntu installation.\n\n' + 'This should help you use Ubuntu in your VM.')) + self.package = 'open-vm-dkms' + self._free = True + + def id(self): + '''Return an unique identifier of the handler.''' + return 'vm:' + self.module + --- jockey-0.9.7.orig/data/handlers/madwifi.py +++ jockey-0.9.7/data/handlers/madwifi.py @@ -0,0 +1,72 @@ +# (c) 2009 Canonical Ltd. +# Author: Martin Pitt +# License: GPL v2 or later + +import logging, subprocess, os.path + +from jockey.oslib import OSLib +from jockey.handlers import Handler, KernelModuleHandler + +# dummy stub for xgettext +def _(x): return x + +class MadwifiHandler(KernelModuleHandler): + '''Handler for the Madwifi driver. + + The free ath5k driver should work with most Atheros cards nowadays, but on + some models madwifi still works better (or at all). This driver (ath_pci) + should be disabled by default by blacklisting it in self.blacklist_file. + ''' + def __init__(self, ui): + KernelModuleHandler.__init__(self, ui, 'ath_pci', + name=_('Alternate Atheros "madwifi" driver'), + description=_('Alternate "madwifi" driver for Atheros wireless LAN cards.'), + rationale=_('Only activate this driver if you have problems ' + 'with your wireless LAN connection.\n\n' + 'The free "ath5k" driver should work with most ' + 'Atheros cards nowadays, but on some computers this ' + 'alternate (but proprietary) driver still works better, ' + 'or at all.')) + self._free = False + # do not announce this if ath5k works + self.announce = not self.module_loaded('ath5k') + self.blacklist_file = os.path.join(os.path.dirname( + OSLib.inst.module_blacklist_file), 'blacklist-ath_pci.conf') + + def can_change(self): + if not os.path.exists(self.blacklist_file): + return _('You removed the configuration file %s') % self.blacklist_file + return None + + def enable(self): + Handler.enable(self) + self._update_blacklist('ath5k') + subprocess.call([OSLib.inst.modprobe_path, self.module]) + self.read_loaded_modules() + return self.rebind(self.module) + + def disable(self): + self._update_blacklist(self.module) + self.read_loaded_modules() + Handler.disable(self) + return False + + def _update_blacklist(self, module): + '''Update self.blacklist_file to blacklist given module.''' + + logging.debug('MadwifiHandler._update_blacklist(%s)' % module) + + lines = [] + f = open(self.blacklist_file) + for l in f: + if l.startswith('blacklist '): + l = 'blacklist %s\n' % module + lines.append(l) + f.close() + f = open(self.blacklist_file + '.new', 'w') + for l in lines: + f.write(l) + f.close() + os.rename(self.blacklist_file + '.new', self.blacklist_file) + + OSLib.inst._load_module_blacklist() --- jockey-0.9.7.orig/data/handlers/cdv.py +++ jockey-0.9.7/data/handlers/cdv.py @@ -0,0 +1,100 @@ +# -*- coding: utf-8 -*- +# (c) 2008 Canonical Ltd. +# Authors: Martin Pitt +# Alberto Milone +# License: GPL v2 or later + +import logging, os, os.path + +import XKit.xorgparser +from jockey.xorg_driver import XorgDriverHandler +from NvidiaDetector.alternatives import Alternatives +from NvidiaDetector.alternatives import MultiArchUtils +import subprocess + +# dummy stub for xgettext +def _(x): return x + +class CdvDriver(XorgDriverHandler): + def __init__(self, backend, package=None): + self._free = False + + name=_('Intel Cedarview graphics driver') + + XorgDriverHandler.__init__(self, backend, 'cedarview_gfx', + 'cedarview-graphics-drivers', None, None, add_modules=['glx'], + disable_modules=[], name=name, + description=_('3D-accelerated proprietary graphics driver for ' + 'Intel Cedarview cards.'), + rationale=_('This driver is required to fully utilise the 3D ' + 'potential of some Intel Cedarview cards, as well as provide ' + '2D acceleration of newer cards.')) + + self._alternatives = self._get_alternatives() + self.needs_kernel_headers = True + self.alternative_name = 'intel-cdv' + + def _get_alternatives(self): + '''Get multi-arch alternatives names''' + main_name = 'i386-linux-gnu_egl_conf' + return Alternatives(main_name) + + def available(self): + # we don't offer cdv in a life CD environment, as we will run out of + # RAM trying to download and install all the packages in the RAM disk. + if os.path.isdir('/rofs'): + logging.debug('Disabling cdv driver on live system') + return False + + logging.debug('cdv.available: falling back to default') + return XorgDriverHandler.available(self) + + def enable(self): + XorgDriverHandler.enable(self) + + # Set the alternative to cdv + cdv_alternative = self._alternatives.get_alternative_by_name( + self.alternative_name, ignore_pattern='-updates') + if not cdv_alternative: + logging.error('%s: get_alternative_by_name(%s) returned nothing' % ( + self.id(), self.package)) + return + self._alternatives.set_alternative(cdv_alternative) + subprocess.call(['update-initramfs', '-u']) + subprocess.call(['update-initramfs', '-u', '-k', os.uname()[2]]) + + def enabled(self): + # See if cdv is the current alternative + target_alternative = \ + self._alternatives.get_alternative_by_name(self.alternative_name) + current_alternative = self._alternatives.get_current_alternative() + + logging.debug('cdv.enabled(%s): target_alt %s current_alt %s', + self.module, target_alternative, current_alternative) + + if current_alternative is None: + logging.debug('current alternative of %s is None, not enabled', + self.module) + return False + if current_alternative != target_alternative: + logging.debug('%s is not the alternative in use', self.module) + return False + + return XorgDriverHandler.enabled(self) + + def disable(self): + XorgDriverHandler.disable(self) + # make sure that 'cedarview-drm' is removed too + self.backend.remove_package('cedarview-drm') + + # Set the alternative back to open drivers + open_drivers = self._alternatives.get_open_drivers_alternative() + logging.debug('cdv.disable(%s): open_drivers: %s', + self.module, open_drivers) + if open_drivers: + self._alternatives.set_alternative(open_drivers) + + subprocess.call(['update-initramfs', '-u']) + subprocess.call(['update-initramfs', '-u', '-k', os.uname()[2]]) + + return False --- jockey-0.9.7.orig/data/handlers/sl_modem.py +++ jockey-0.9.7/data/handlers/sl_modem.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# (c) 2008 Canonical Ltd. +# Author: Martin Pitt +# License: GPL v2 or later + +import re, os.path, logging, subprocess + +from jockey.handlers import Handler + +# dummy stub for xgettext +def _(x): return x + +class SlModem(Handler): + def __init__(self, backend): + Handler.__init__(self, backend, name=_('Software modem'), + rationale=_( + 'This driver enables the usage of many software modems, as ' + 'commonly found in laptops.\n\n' + 'If this driver is not enabled, you will not be able to use ' + 'your modem.')) + self.package = 'sl-modem-daemon' + + self.modem_re = re.compile('^\s*\d+\s*\[Modem\s*\]') + self.modem_as_subdevice_re = re.compile('^card [0-9].*[mM]odem') + + def available(self): + '''Check /proc/asound/cards and aplay -l for a "Modem" card.''' + + if Handler.available(self) == False: + return False + + try: + for l in open('/proc/asound/cards'): + if self.modem_re.match(l): + return True + except IOError as e: + logging.error('could not open /proc/asound/cards: %s' % str(e)) + + try: + aplay = subprocess.Popen(['aplay', '-l'], env={}, + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + (aplay_out, aplay_err) = aplay.communicate() + except OSError as e: + logging.error('could not open aplay -l: %s' % str(e)) + return False + + if aplay.returncode != 0: + logging.error('aplay -l failed with %i: %s' % (aplay.returncode, + aplay_err)) + return False + + for row in aplay_out.splitlines(): + if self.modem_as_subdevice_re.match(row): + return True + + return False + + def used(self): + return self.enabled() and os.path.exists('/dev/modem') --- jockey-0.9.7.orig/data/handlers/fglrx.py +++ jockey-0.9.7/data/handlers/fglrx.py @@ -0,0 +1,280 @@ +# -*- coding: utf-8 -*- +# (c) 2008 Canonical Ltd. +# Authors: Martin Pitt +# Alberto Milone +# License: GPL v2 or later + +import logging, os, os.path +import subprocess +import XKit.xorgparser + +from jockey.handlers import KernelModuleHandler +from jockey.xorg_driver import XorgDriverHandler +from jockey.oslib import OSLib +from NvidiaDetector.alternatives import Alternatives +from NvidiaDetector.alternatives import MultiArchUtils + +# dummy stub for xgettext +def _(x): return x + +class FglrxDriver(XorgDriverHandler): + def __init__(self, backend, package=None): + self._free = False + + name=_('ATI/AMD proprietary FGLRX graphics driver') + description=_('3D-accelerated proprietary graphics driver for ' + 'ATI cards.') + rationale=_('This driver is required to fully utilise the 3D ' + 'potential of some ATI graphics cards, as well as provide ' + '2D acceleration of newer cards.') + if package and 'update' in package: + name=_('ATI/AMD proprietary FGLRX graphics driver (post-release updates)') + elif package and 'experimental' in package: + name=_('ATI/AMD proprietary FGLRX graphics driver (**experimental** beta)') + description = None + rationale = None + + XorgDriverHandler.__init__(self, backend, (package and + package.replace('-', '_') or 'fglrx'), (package and + package or 'fglrx'), None, None, add_modules=['glx'], + disable_modules=[], name=name, + description=description, + rationale=rationale) + + (self._alternatives, self._other_alternatives) = self._get_alternatives() + self.needs_kernel_headers = True + + def _get_alternatives(self): + '''Get multi-arch alternatives names''' + arch_utils = MultiArchUtils() + main_name = arch_utils.get_main_alternative_name() + other_name = arch_utils.get_other_alternative_name() + return Alternatives(main_name), Alternatives(other_name) + + def available(self): + # we don't offer fglrx in a life CD environment, as we will run out of + # RAM trying to download and install all the packages in the RAM disk. + if os.path.isdir('/rofs'): + logging.debug('Disabling fglrx driver on live system') + return False + + if self.has_hybrid_graphics: + # We disable Hybrid Graphics by default unless a specific + # driver allows it + logging.debug('Disabling %s on a hybrid graphics system' + % (self.package)) + return False + + logging.debug('fglrx.available: falling back to default') + return XorgDriverHandler.available(self) + + def enable_config_hook(self): + # TODO: this method should look for the right Screen section(s) and + # if none can be found, use section 0. use get_devices_from_serverlayout() + + # X.org does not work otherwise + if len(self.xorg_conf.globaldict['Screen']) == 0: + self.xorg_conf.makeSection('Screen', identifier='Default Screen') + + self.xorg_conf.addOption('Screen', 'DefaultDepth', '24', position=0, prefix='') + + # make sure that RGB path is not in the xorg.conf otherwise xorg will crash + it = 0 + for section in self.xorg_conf.globaldict['Files']: + try: + self.xorg_conf.removeOption('Files', 'RgbPath', position=it) + except (XKit.xorgparser.OptionException): + pass + it += 1 + + # remove any Disable "dri2" otherwise amdcccle will crash + module_sections = self.xorg_conf.globaldict['Module'] + have_modules = len(module_sections) > 0 + + if have_modules: + for section in module_sections: + self.xorg_conf.removeOption('Module', 'Disable', value='dri2', position=section) + + def enable(self): + if self.has_hybrid_graphics: + # Do not touch xorg.conf on hybrid graphics + KernelModuleHandler.enable(self) + else: + XorgDriverHandler.enable(self) + + # Set the alternative to FGLRX + fglrx_alternative = self._alternatives.get_alternative_by_name('fglrx', ignore_pattern='-updates') + if not fglrx_alternative: + logging.error('%s: get_alternative_by_name(%s) returned nothing' % ( + self.id(), self.package)) + return + self._alternatives.set_alternative(fglrx_alternative) + other_fglrx_alternative = self._other_alternatives.get_alternative_by_name('fglrx') + if other_fglrx_alternative: + self._other_alternatives.set_alternative(other_fglrx_alternative) + subprocess.call(['update-initramfs', '-u']) + subprocess.call(['update-initramfs', '-u', '-k', os.uname()[2]]) + + def enabled(self): + # See if fglrx is the current alternative + target_alternatives = [alt for alt in + self._alternatives.list_alternatives() + if alt.split('/')[-2] in ('pxpress', 'fglrx')] + current_alternative = self._alternatives.get_current_alternative() + other_target_alternatives = [alt for alt in + self._other_alternatives.list_alternatives() + if alt.split('/')[-2] in ('pxpress', 'fglrx')] + other_current_alternative = self._other_alternatives.get_current_alternative() + + logging.debug('fglrx.enabled(%s): target_alt %s current_alt %s other target alt %s other current alt %s', + self.module, target_alternatives, current_alternative, + other_target_alternatives, other_current_alternative) + + if current_alternative is None: + logging.debug('current alternative of %s is None, not enabled', self.module) + return False + if current_alternative not in target_alternatives or \ + other_current_alternative not in other_target_alternatives: + logging.debug('%s is not the alternative in use', self.module) + return False + + if self.has_hybrid_graphics: + # Do not touch xorg.conf on hybrid graphics + return KernelModuleHandler.enabled(self) + else: + return XorgDriverHandler.enabled(self) + + def disable(self): + if self.has_hybrid_graphics: + # Do not touch xorg.conf on hybrid graphics + KernelModuleHandler.disable(self) + else: + XorgDriverHandler.disable(self) + + # Set the alternative back to open drivers + open_drivers = self._alternatives.get_open_drivers_alternative() + logging.debug('fglrx.disable(%s): open_drivers: %s', self.module, open_drivers) + if open_drivers: + self._alternatives.set_alternative(open_drivers) + other_open_drivers = self._other_alternatives.get_open_drivers_alternative() + logging.debug('fglrx.disable(%s): other_open_drivers: %s', self.module, other_open_drivers) + if other_open_drivers: + self._other_alternatives.set_alternative(other_open_drivers) + subprocess.call(['update-initramfs', '-u']) + subprocess.call(['update-initramfs', '-u', '-k', os.uname()[2]]) + + return False + + def enables_composite(self): + '''Return whether this driver supports the composite extension.''' + + if not self.xorg_conf: + return False + + # the radeon X.org driver supports composite nowadays, so don't force + # installation of fglrx upon those users. Treat absent driver + # configuration as radeon, since that's what X.org should autodetect. + # Only suggest fglrx if people use something else, like vesa. + try: + if self.xorg_conf.getDriver('Device', 0) in ['fglrx', 'ati', 'radeon', None]: + return False + except (XKit.xorgparser.OptionException, XKit.xorgparser.SectionException) as error: + return False # unconfigured driver -> defaults to ati + + return True + + +class FglrxDriverHybrid(FglrxDriver): + '''Abstract base class for Fglrx drivers which support Hybrid graphics.''' + + def __init__(self, backend, package=None): + FglrxDriver.__init__(self, backend, package) + self.hybrid_gfx_pkg = 'fglrx-pxpress' + + def hybrid_available(self): + '''See whether Hybrid Graphics should be enabled or not''' + # Do not provide a driver if Hybrid graphics is available but + # unsupported (we need at least the lts-raring stack) + #if self.has_hybrid_graphics and not self.supports_hybrid_graphics: + # return False + + # Check that the extra package to enable Hybrid graphics is available + if not OSLib.inst.package_available(self.hybrid_gfx_pkg): + return False + + return True + + def available(self): + # we don't offer this driver in a life CD environment, as we will run + # out of RAM trying to download and install all the packages in the RAM + # disk. + if os.path.isdir('/rofs'): + logging.debug('Disabling fglrx driver on live system') + return False + + # See if it's all ready for Hybrid Graphics + if self.has_hybrid_graphics and not self.hybrid_available(): + return False + + logging.debug('fglrx.available: falling back to default') + return XorgDriverHandler.available(self) + + def enable(self): + # First ensure that the package for Hybrid Graphics is + # installed, if the system supports it + if self.has_hybrid_graphics: + try: + self.backend.install_package(self.hybrid_gfx_pkg) + except (ValueError, SystemError): + # Package not available + logging.error('%s: Unable to install the %s package. ' + 'Hybrid graphics won\'t work.', + self.id(), self.hybrid_gfx_pkg) + return + + FglrxDriver.enable(self) + + def enabled(self): + # Check that the extra package to enable Hybrid graphics is + # installed + if (self.has_hybrid_graphics and + not OSLib.inst.package_installed(self.hybrid_gfx_pkg)): + return False + + return FglrxDriver.enabled(self) + + def enable_config_hook(self): + # Do not touch xorg.conf + pass + + def enables_composite(self): + '''Return whether this driver supports the composite extension.''' + return True + + def disable(self): + # Try to remove the package for Hybrid Graphics if any + if self.has_hybrid_graphics: + try: + self.backend.remove_package(self.hybrid_gfx_pkg) + except (ValueError, SystemError): + pass + + FglrxDriver.disable(self) + + +class FglrxDriverUpdate(FglrxDriver): + def __init__(self, backend): + FglrxDriver.__init__(self, backend, 'fglrx-updates') + +class FglrxDriverExperimental9(FglrxDriver): + def __init__(self, backend): + FglrxDriver.__init__(self, backend, 'fglrx-experimental-9') + +class FglrxDriverExperimental12(FglrxDriver): + def __init__(self, backend): + FglrxDriver.__init__(self, backend, 'fglrx-experimental-12') + +class FglrxDriverExperimental13(FglrxDriverHybrid): + def __init__(self, backend): + FglrxDriverHybrid.__init__(self, backend, 'fglrx-experimental-13') + --- jockey-0.9.7.orig/data/handlers/nvidia.py +++ jockey-0.9.7/data/handlers/nvidia.py @@ -0,0 +1,355 @@ +# (c) 2008 Canonical Ltd. +# Authors: Martin Pitt +# Alberto Milone +# License: GPL v2 or later + +import logging, os, os.path + +from jockey.handlers import KernelModuleHandler +from jockey.xorg_driver import XorgDriverHandler +from jockey.oslib import OSLib +import XKit +from NvidiaDetector.nvidiadetector import NvidiaDetection +from NvidiaDetector.alternatives import Alternatives +from NvidiaDetector.alternatives import MultiArchUtils +import subprocess + +# dummy stub for xgettext +def _(x): return x + +class _NvidiaDriverBase(XorgDriverHandler): + '''Abstract base class for a particular NVidia driver version.''' + + def __init__(self, backend, version): + self._free = False + name=_('NVIDIA accelerated graphics driver') + description=_('3D-accelerated proprietary graphics driver for ' + 'NVIDIA cards. Required if you want to run Unity.') + rationale=_('This driver is required to fully utilise ' + 'the 3D potential of NVIDIA graphics cards, as well as provide ' + '2D acceleration of newer cards.\n\n' + 'You need to install this driver if you wish to use the Unity ' + 'desktop, enable desktop effects, or run software that ' + 'requires 3D acceleration, such as some games.') + if 'update' in version: + name=_('NVIDIA accelerated graphics driver (post-release updates)') + elif 'experimental' in version: + name=_('NVIDIA accelerated graphics driver (**experimental** beta)') + description = None + rationale = None + + XorgDriverHandler.__init__(self, backend, 'nvidia_' + version.replace('-', '_'), + 'nvidia-' + version, + None, None, {'NoLogo': 'True'}, + remove_modules=['dri', 'GLcore'], + name=name, + description=description, + rationale=rationale) + + self._module_alias = 'nvidia' + self._recommended = None + self._do_rebind = False + (self._alternatives, self._other_alternatives) = self._get_alternatives() + self.version = version + self.needs_kernel_headers = True + + def _get_alternatives(self): + '''Get multi-arch alternatives names''' + arch_utils = MultiArchUtils() + main_name = arch_utils.get_main_alternative_name() + other_name = arch_utils.get_other_alternative_name() + return Alternatives(main_name), Alternatives(other_name) + + def available(self): + # we don't offer this driver in a life CD environment, as we will run + # out of RAM trying to download and install all the packages in the RAM + # disk. + if os.path.isdir('/rofs'): + logging.debug('Disabling Nvidia driver on live system') + return False + + if self.has_hybrid_graphics: + # We disable Hybrid Graphics by default unless a specific + # driver allows it + logging.debug('Disabling nvidia-%s on a hybrid graphics system' % (self.version)) + return False + + logging.debug('nvidia.available: falling back to default') + return XorgDriverHandler.available(self) + + def enable_config_hook(self): + # make sure that RGB path is not in the xorg.conf otherwise xorg will crash + it = 0 + for section in self.xorg_conf.globaldict['Files']: + try: + self.xorg_conf.removeOption('Files', 'RgbPath', position=it) + except (XKit.xorgparser.OptionException): + pass + it += 1 + + # remove any Disable "dri2" otherwise nvidia-settings and nvidia-xconfig will fail + module_sections = self.xorg_conf.globaldict['Module'] + have_modules = len(module_sections) > 0 + + if have_modules: + for section in module_sections: + self.xorg_conf.removeOption('Module', 'Disable', value='dri2', position=section) + + def enable(self): + if self.has_hybrid_graphics: + # Do not touch xorg.conf on hybrid graphics + KernelModuleHandler.enable(self) + else: + XorgDriverHandler.enable(self) + + # Set the alternative to NVIDIA + nvidia_alternative = self._alternatives.get_alternative_by_name(self.package) + if not nvidia_alternative: + logging.error('%s: get_alternative_by_name(%s) returned nothing' % ( + self.id(), self.package)) + return + self._alternatives.set_alternative(nvidia_alternative) + other_nvidia_alternative = self._other_alternatives.get_alternative_by_name(self.package) + self._other_alternatives.set_alternative(other_nvidia_alternative) + + subprocess.call(['update-initramfs', '-u']) + subprocess.call(['update-initramfs', '-u', '-k', os.uname()[2]]) + + def disable(self): + if self.has_hybrid_graphics: + # Do not touch xorg.conf on hybrid graphics + KernelModuleHandler.disable(self) + else: + XorgDriverHandler.disable(self) + + if self.package: + try: + self.backend.remove_package('nvidia-settings-' + self.version) + except (ValueError, SystemError): + pass + + # Set the alternative back to open drivers + open_drivers = self._alternatives.get_open_drivers_alternative() + logging.debug('NVidia.disable(%s): open_drivers: %s', self.module, open_drivers) + if open_drivers: + self._alternatives.set_alternative(open_drivers) + other_open_drivers = self._other_alternatives.get_open_drivers_alternative() + logging.debug('NVidia.disable(%s): other_open_drivers: %s', self.module, other_open_drivers) + if other_open_drivers: + self._other_alternatives.set_alternative(other_open_drivers) + subprocess.call(['update-initramfs', '-u']) + subprocess.call(['update-initramfs', '-u', '-k', os.uname()[2]]) + + return False + + def recommended(self): + if self._recommended == None: + nd = NvidiaDetection() + self._recommended = self.package == nd.selectDriver() + return self._recommended + + def enabled(self): + # See if nvidia (e.g. nvidia-current) is the current alternative + target_alternative = self._alternatives.get_alternative_by_name(self.package) + current_alternative = self._alternatives.get_current_alternative() + other_target_alternative = self._other_alternatives.get_alternative_by_name(self.package) + other_current_alternative = self._other_alternatives.get_current_alternative() + + logging.debug('NVidia(%s).enabled(): target_alt %s current_alt %s other target alt %s other current alt %s', + self.module, target_alternative, current_alternative, + other_target_alternative, other_current_alternative) + if current_alternative is None: + return False + + if current_alternative != target_alternative or \ + other_current_alternative != other_target_alternative: + logging.debug('%s is not the alternative in use', self.module) + return False + + #if self.xorg_conf has NoneType, AttributeError will be raised + if not self.xorg_conf: + logging.debug('%s: xkit object does not exist!', self.module) + return False + + # Make sure that neither the alias nor the actual module are blacklisted + if OSLib.inst.module_blacklisted(self._module_alias) or OSLib.inst.module_blacklisted(self.module): + logging.debug('%s is blacklisted, so not treating as enabled', self.module) + return False + + kmh_enabled = KernelModuleHandler.enabled(self) + logging.debug('KMH enabled: %s', str(kmh_enabled)) + return KernelModuleHandler.enabled(self) + + def used(self): + '''Return if the handler is currently in use.''' + + if self.changed() and self.enabled(): + return False + + # See if "nvidia" is loaded and if the alias corresponds to nvidia_$flavour + return KernelModuleHandler.module_loaded(self._module_alias) and \ + self._alternatives.resolve_module_alias(self._module_alias) == self.module and \ + (self.package is None or OSLib.inst.package_installed(self.package)) + + def enables_composite(self): + '''Return whether this driver supports the composite extension.''' + + # When using an upstream installation, or -new/-legacy etc., we already + # have composite + if KernelModuleHandler.module_loaded('nvidia'): + logging.debug('enables_composite(): already using nvidia driver from nondefault package') + return False + + # neither vesa nor nv support composite, so safe to say yes here + return True + +class _NvidiaDriverHybridBase(_NvidiaDriverBase): + '''Abstract base class for NVidia drivers which support Hybrid graphics.''' + + def __init__(self, backend, version): + _NvidiaDriverBase.__init__(self, backend, version) + self.hybrid_gfx_pkg = 'nvidia-prime' + + def hybrid_available(self): + '''See if the OS supports Hybrid Graphics''' + # Do not provide a driver if Hybrid graphics is available but + # unsupported (we need at least the lts-raring stack) + if not self.supports_hybrid_graphics: + logging.debug('Hybrid graphics system not supported by the OS') + return False + + # Check that the extra package to enable Hybrid graphics is available + if not OSLib.inst.package_available(self.hybrid_gfx_pkg): + logging.debug('prime package not found') + return False + + return True + + def available(self): + # we don't offer this driver in a life CD environment, as we will run + # out of RAM trying to download and install all the packages in the RAM + # disk. + if os.path.isdir('/rofs'): + logging.debug('Disabling Nvidia driver on live system') + return False + + # See if it's all ready for Hybrid Graphics + if self.has_hybrid_graphics and not self.hybrid_available(): + return False + + logging.debug('nvidia.available: falling back to default') + return XorgDriverHandler.available(self) + + def enable(self): + # First ensure that the package for Hybrid Graphics is + # installed, if the system supports it + if self.has_hybrid_graphics: + try: + self.backend.install_package(self.hybrid_gfx_pkg) + except (ValueError, SystemError): + # Package not available + logging.error('%s: Unable to install the %s package. ' + 'Hybrid graphics won\'t work.', + self.id(), self.hybrid_gfx_pkg) + return + + _NvidiaDriverBase.enable(self) + + def enabled(self): + # Check that the extra package to enable Hybrid graphics is + # installed + if (self.has_hybrid_graphics and + not OSLib.inst.package_installed(self.hybrid_gfx_pkg)): + return False + + return _NvidiaDriverBase.enabled(self) + + def enable_config_hook(self): + # Do not touch xorg.conf + pass + + def disable(self): + # Try to remove the package for Hybrid Graphics if any + if self.has_hybrid_graphics: + try: + self.backend.remove_package(self.hybrid_gfx_pkg) + except (ValueError, SystemError): + pass + + _NvidiaDriverBase.disable(self) + +class NvidiaDriver340(_NvidiaDriverHybridBase): + def __init__(self, backend): + _NvidiaDriverHybridBase.__init__(self, backend, '340') + +class NvidiaDriver340Updates(_NvidiaDriverHybridBase): + def __init__(self, backend): + _NvidiaDriverHybridBase.__init__(self, backend, '340-updates') + +class NvidiaDriver331(_NvidiaDriverHybridBase): + def __init__(self, backend): + _NvidiaDriverHybridBase.__init__(self, backend, '331') + +class NvidiaDriver331Updates(_NvidiaDriverHybridBase): + def __init__(self, backend): + _NvidiaDriverHybridBase.__init__(self, backend, '331-updates') + +class NvidiaDriver319(_NvidiaDriverHybridBase): + def __init__(self, backend): + _NvidiaDriverHybridBase.__init__(self, backend, '319') + +class NvidiaDriver319Updates(_NvidiaDriverHybridBase): + def __init__(self, backend): + _NvidiaDriverHybridBase.__init__(self, backend, '319-updates') + +class NvidiaDriver304(_NvidiaDriverBase): + def __init__(self, backend): + _NvidiaDriverBase.__init__(self, backend, '304') + +class NvidiaDriver304Updates(_NvidiaDriverBase): + def __init__(self, backend): + _NvidiaDriverBase.__init__(self, backend, '304-updates') + +class NvidiaDriverExperimental310(_NvidiaDriverBase): + def __init__(self, backend): + _NvidiaDriverBase.__init__(self, backend, 'experimental-310') + +class NvidiaDriverExperimental304(_NvidiaDriverBase): + def __init__(self, backend): + _NvidiaDriverBase.__init__(self, backend, 'experimental-304') + +class NvidiaDriverCurrent(_NvidiaDriverBase): + def __init__(self, backend): + _NvidiaDriverBase.__init__(self, backend, 'current') + +class NvidiaDriverCurrentUpdates(_NvidiaDriverBase): + def __init__(self, backend): + _NvidiaDriverBase.__init__(self, backend, 'current-updates') + +class NvidiaDriver173(_NvidiaDriverBase): + def __init__(self, backend): + _NvidiaDriverBase.__init__(self, backend, '173') + +class NvidiaDriver173Updates(_NvidiaDriverBase): + def __init__(self, backend): + _NvidiaDriverBase.__init__(self, backend, '173-updates') + +class NvidiaDriver96(_NvidiaDriverBase): + def __init__(self, backend): + _NvidiaDriverBase.__init__(self, backend, '96') + + def enable_config_hook(self): + _NvidiaDriverBase.enable_config_hook(self) + + # ensure we have a screen section + if len(self.xorg_conf.globaldict['Screen']) == 0: + screen = self.xorg_conf.makeSection('Screen', identifier='Default Screen') + + # version 96 needs AddARGBGLXVisuals + if self.version == '96': + self.xorg_conf.addOption('Screen', 'AddARGBGLXVisuals', 'True', optiontype='Option', position=0) + +class NvidiaDriver96Updates(NvidiaDriver96): + def __init__(self, backend): + _NvidiaDriverBase.__init__(self, backend, '96-updates') + --- jockey-0.9.7.orig/data/handlers/pvr-omap4.py +++ jockey-0.9.7/data/handlers/pvr-omap4.py @@ -0,0 +1,196 @@ +# -*- coding: utf-8 -*- +# (c) 2008-2010 Canonical Ltd. +# (c) 2012 Linaro Ltd. +# Authors: Ricardo Salveti de Araujo +# +# Alternatives from nvidia-common, created by +# Alberto Milone +# +# License: GPL v2 or later + +import logging, os, re, subprocess + +from jockey.xorg_driver import XorgDriverHandler +from subprocess import Popen, PIPE, CalledProcessError + +# dummy stub for xgettext +def _(x): return x + +class Alternatives(object): + + def __init__(self, master_link): + self._open_egl_drivers_alternative = 'mesa-egl/ld.so.conf' + self._command = 'update-alternatives' + self._master_link = master_link + + # Make sure that the PATH environment variable is set + if not os.environ.get('PATH'): + os.environ['PATH'] = '/sbin:/usr/sbin:/bin:/usr/bin' + + def list_alternatives(self): + '''Get the list of alternatives for the master link''' + dev_null = open('/dev/null', 'w') + alternatives = [] + p1 = Popen([self._command, '--list', self._master_link], + stdout=PIPE, stderr=dev_null) + p = p1.communicate()[0] + dev_null.close() + c = p.split('\n') + for line in c: + line.strip() and alternatives.append(line.strip()) + + return alternatives + + def get_current_alternative(self): + '''Get the alternative in use''' + dev_null = open('/dev/null', 'w') + current_alternative = None + p1 = Popen([self._command, '--query', self._master_link], + stdout=PIPE, stderr=dev_null) + p = p1.communicate()[0] + dev_null.close() + c = p.split('\n') + for line in c: + if line.strip().startswith('Value:'): + return line.replace('Value:', '').strip() + return None + + def get_alternative_by_name(self, name, ignore_pattern=None): + '''Get the alternative link by providing the driver name + + ignore_pattern allows ignoring a substring in the name''' + if ignore_pattern: + name = name.replace(ignore_pattern, '') + alternatives = self.list_alternatives() + + for alternative in alternatives: + if alternative.split('/')[-2] == name: + return alternative + + return None + + def get_open_egl_drivers_alternative(self): + '''Get the alternative link for open EGL/GLES drivers''' + return self.get_alternative_by_name(self._open_egl_drivers_alternative) + + def set_alternative(self, path): + '''Tries to set an alternative and returns the boolean exit status''' + try: + subprocess.check_call([self._command, '--set', + self._master_link, path]) + self.ldconfig() + except CalledProcessError: + return False + + return True + + def ldconfig(self): + '''Call ldconfig''' + try: + subprocess.check_call(['ldconfig']) + except CalledProcessError: + return False + return True + +class PVROmap4Driver(XorgDriverHandler): + def __init__(self, backend, package=None): + self._free = False + + name=_('PowerVR SGX proprietary graphics driver for OMAP 4') + + XorgDriverHandler.__init__(self, backend, 'omapdrm_pvr', 'pvr-omap4', + None, None, name=name, + description=_('3D-accelerated proprietary graphics driver for ' + 'OMAP 4 SoCs.'), + rationale=_('This driver is required to fully utilise the 3D ' + 'potential of OMAP 4 powered boards.')) + + self.pkg_alternative = 'pvr-omap4-egl' + self._module_alias = 'omapdrm_pvr' + self._alternatives = self._get_alternatives() + self.omap4_re = re.compile('^Hardware.*OMAP4.*') + self.needs_kernel_headers = True + + def _get_architecture(self): + dev_null = open('/dev/null', 'w') + p1 = Popen(['dpkg', '--print-architecture'], stdout=PIPE, + stderr=dev_null) + p = p1.communicate()[0] + dev_null.close() + architecture = p.strip() + return architecture + + def _get_alternatives(self): + '''Get multi-arch alternatives names''' + main_name = "arm-linux-gnueabi_egl_conf" + if self._get_architecture() == "armhf": + main_name = "arm-linux-gnueabihf_egl_conf" + return Alternatives(main_name) + + def available(self): + '''Check /proc/cpuinfo for an OMAP 4 board.''' + if XorgDriverHandler.available(self) == False: + return False + + try: + for l in open('/proc/cpuinfo'): + if self.omap4_re.match(l): + return True + except IOError as e: + logging.error('could not open /proc/cpuinfo: %s' % str(e)) + + return False + + def enable(self): + XorgDriverHandler.enable(self) + + # Set the alternative to PowerVR SGX (EGL) + pvr_omap4_alternative = self._alternatives.get_alternative_by_name( + self.pkg_alternative, ignore_pattern='-updates') + if not pvr_omap4_alternative: + logging.error('%s: get_alternative_by_name(%s) returned nothing' % ( + self.id(), self.pkg_alternative)) + return + self._alternatives.set_alternative(pvr_omap4_alternative) + + def enabled(self): + # See if pvr-omap4 is the current alternative + target_alternative = \ + self._alternatives.get_alternative_by_name(self.pkg_alternative) + current_alternative = self._alternatives.get_current_alternative() + + logging.debug('pvr-omap4.enabled(%s): target_alt %s current_alt %s', + self.module, target_alternative, current_alternative) + + if current_alternative is None: + logging.debug('current alternative of %s is None, not enabled', + self.pkg_alternative) + return False + if current_alternative != target_alternative: + logging.debug('%s is not the alternative in use', + self.pkg_alternative) + return False + + return XorgDriverHandler.enabled(self) + + def disable(self): + XorgDriverHandler.disable(self) + + # Set the alternative back to open drivers + open_drivers = self._alternatives.get_open_egl_drivers_alternative() + logging.debug('pvr-omap4.disable(%s): open_drivers: %s', + self.module, open_drivers) + if open_drivers: + self._alternatives.set_alternative(open_drivers) + + return False + + def enables_composite(self): + '''Return whether this driver supports the composite extension.''' + + if KernelModuleHandler.module_loaded('omapdrm_pvr'): + logging.debug('enables_composite(): already using pvr-omap4 ' + 'driver from nondefault package') + return False + + return True --- jockey-0.9.7.orig/data/handlers/dvb_usb_firmware.py +++ jockey-0.9.7/data/handlers/dvb_usb_firmware.py @@ -0,0 +1,51 @@ +# (c) 2009 Canonical Ltd. +# Author: Martin Pitt +# License: GPL v2 or later + +import logging, subprocess + +from jockey.oslib import OSLib +from jockey.handlers import KernelModuleHandler + +# dummy stub for xgettext +def _(x): return x + +class DvbUsbFirmwareHandler(KernelModuleHandler): + '''Handler for USB DVB cards which need firmware. + + We implement our own available() here, since dvb_usb itself does not have + modaliases (it's a dependency of particular drivers such as dib7000p). + ''' + def __init__(self, ui): + KernelModuleHandler.__init__(self, ui, 'dvb_usb', + name=_('Firmware for DVB cards')) + self.package = 'linux-firmware-nonfree' + self._free = False + self._do_rebind = False # does not work, don't bother + + def id(self): + '''Return an unique identifier of the handler.''' + + i = 'firmware:' + self.module + if self.driver_vendor: + i += ':' + self.driver_vendor.replace(' ', '_') + return i + + def available(self): + r = KernelModuleHandler.available(self) + if r is not None: + return r + return self.module_loaded(self.module) + + def enable(self): + KernelModuleHandler.enable(self) + + # rebinding does not work, we have to unload/reload + mods = [] + proc_modules = open(OSLib.inst.proc_modules) + for line in open(OSLib.inst.proc_modules): + if 'dvb_usb' in line: + mods.append(line.split()[0]) + logging.debug('reloading modules: %s' % ' '.join(mods)) + subprocess.call([OSLib.inst.modprobe_path, '-r'] + mods) + subprocess.call([OSLib.inst.modprobe_path, '-a'] + mods) --- jockey-0.9.7.orig/data/handlers/broadcom_wl.py +++ jockey-0.9.7/data/handlers/broadcom_wl.py @@ -0,0 +1,55 @@ +# (c) 2008 Canonical Ltd. +# Author: Martin Pitt +# License: GPL v2 or later + +import re, os.path, logging, subprocess +from glob import glob + +from jockey.oslib import OSLib +from jockey.handlers import KernelModuleHandler + +# dummy stub for xgettext +def _(x): return x + +class BroadcomWLHandler(KernelModuleHandler): + '''Handler for Broadcom Wifi chipsets which use the wl module.''' + + def __init__(self, ui): + self._free = False + KernelModuleHandler.__init__(self, ui, 'wl', + name=_('Broadcom STA wireless driver')) + self.package = 'bcmwl-kernel-source' + self._auto_install = True + self.needs_kernel_headers = True + + def enabled(self): + km = KernelModuleHandler.enabled(self) + bcm = OSLib.inst.module_blacklisted('bcm43xx') + b43 = OSLib.inst.module_blacklisted('b43') + b43_legacy = OSLib.inst.module_blacklisted('b43legacy') + b43_loaded = KernelModuleHandler.module_loaded('bcm43xx') or \ + KernelModuleHandler.module_loaded('b43') or \ + KernelModuleHandler.module_loaded('b43legacy') + logging.debug('BroadcomWLHandler enabled(): kmod %s, bcm43xx: %s, b43: %s, b43legacy: %s' % ( + km and 'enabled' or 'disabled', + bcm and 'blacklisted' or 'enabled', + b43 and 'blacklisted' or 'enabled', + b43_legacy and 'blacklisted' or 'enabled')) + + return (km and not b43_loaded) or (km and bcm and b43 and b43_legacy) + + def used(self): + '''Return if the handler is currently in use.''' + + return KernelModuleHandler.used(self) and self.enabled() and \ + not (KernelModuleHandler.module_loaded('b43') or + KernelModuleHandler.module_loaded('b43legacy') or + KernelModuleHandler.module_loaded('bcm43xx')) + + def enable(self): + subprocess.call(['/sbin/rmmod', 'b43']) + subprocess.call(['/sbin/rmmod', 'b43legacy']) + subprocess.call(['/sbin/rmmod', 'bcm43xx']) + subprocess.call(['/sbin/rmmod', 'ssb']) + KernelModuleHandler.enable(self) + --- jockey-0.9.7.orig/tests/sandbox.py +++ jockey-0.9.7/tests/sandbox.py @@ -581,7 +581,7 @@ continue raise ValueError('no such package') - def package_installed(self, package): + def package_installed(self, package, *args): '''Return if the given package is installed.''' return package in self.installed_packages @@ -714,7 +714,7 @@ This returns a static string for the test suite. Tests are done by dynamically implementing video_driver_abi(). ''' - return 'X.org-video-1test' + return 'xorg-video-abi-1' #-------------------------------------------------------------------# --- jockey-0.9.7.orig/tests/shipped_handlers.py +++ jockey-0.9.7/tests/shipped_handlers.py @@ -65,9 +65,13 @@ def _run_tests(self): log_offset = sandbox.log.tell() basedir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) - handlers = jockey.detection.get_handlers(self.backend, handler_dir=[ - os.path.join(basedir, 'examples', 'handlers'), - os.path.join(basedir, 'data', 'handlers') ], available_only=False) + if os.path.isdir(os.path.join(basedir, 'examples')): + handler_dir=[os.path.join(basedir, 'examples', 'handlers'), + os.path.join(basedir, 'data', 'handlers')] + else: + handler_dir=['/usr/share/jockey/handlers'] + handlers = jockey.detection.get_handlers(self.backend, + handler_dir=handler_dir, available_only=False) log = sandbox.log.getvalue()[log_offset:] self.failIf('Could not instantiate Handler' in log, log) --- jockey-0.9.7.orig/tests/testarchive.py +++ jockey-0.9.7/tests/testarchive.py @@ -0,0 +1,119 @@ +'''Provide a fake package archive for testing.''' + +# (C) 2012 Martin Pitt +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +import tempfile +import shutil +import os +import subprocess +import atexit + +class Archive: + def __init__(self): + '''Construct a local package test archive. + + The archive is initially empty. You can create new packages with + create_deb(). self.path contains the path of the archive, and + self.apt_source provides an apt source "deb" line. + + It is kept in a temporary directory which gets removed when the Archive + object gets deleted. + ''' + self.path = tempfile.mkdtemp() + atexit.register(shutil.rmtree, self.path) + self.apt_source = 'deb file://%s /' % self.path + + def create_deb(self, name, version='1', architecture='all', + dependencies={}, description='test package', extra_tags={}, + files={}, update_index=True): + '''Build a deb package and add it to the archive. + + The only mandatory argument is the package name. You can additionall + specify the package version (default '1'), architecture (default + 'all'), a dictionary with dependencies (empty by default; for example + {'Depends': 'foo, bar', 'Conflicts: baz'}, a short description + (default: 'test package'), and arbitrary extra tags. + + By default the package is empty. It can get files by specifying a path -> + contents dictionary in 'files'. Paths must be relative. Example: + files={'etc/foo.conf': 'enable=true'} + + The newly created deb automatically gets added to the "Packages" index, + unless update_index is False. + + Return the path to the newly created deb package, in case you only need + the deb itself, not the archive. + ''' + d = tempfile.mkdtemp() + os.mkdir(os.path.join(d, 'DEBIAN')) + with open(os.path.join(d, 'DEBIAN', 'control'), 'w') as f: + f.write('''Package: %s +Maintainer: Test User +Version: %s +Priority: optional +Section: devel +Architecture: %s +''' % (name, version, architecture)) + + for k, v in dependencies.items(): + f.write('%s: %s\n' % (k, v)) + + f.write('''Description: %s + Test dummy package. +''' % description) + + for k, v in extra_tags.items(): + f.write('%s: %s\n' % (k, v)) + + for path, contents in files.items(): + if type(contents) == bytes: + mode = 'wb' + else: + mode = 'w' + pathdir = os.path.join(d, os.path.dirname(path)) + if not os.path.isdir(pathdir): + os.makedirs(pathdir) + with open(os.path.join(d, path), mode) as f: + f.write(contents) + + debpath = os.path.join(self.path, '%s_%s_%s.deb' % (name, version, architecture)) + dpkg = subprocess.Popen(['dpkg', '-b', d, debpath], + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + dpkg.communicate() + assert dpkg.returncode == 0 + + shutil.rmtree(d) + assert os.path.exists(debpath) + + if update_index: + self.update_index() + + return debpath + + def update_index(self): + '''Update the "Packages" index. + + This usually gets done automatically by create_deb(), but needs to be + done if you manually copy debs into the archive or call create_deb with + update_index==False. + ''' + old_cwd = os.getcwd() + try: + os.chdir(self.path) + with open('Packages', 'w') as f: + subprocess.check_call(['apt-ftparchive', 'packages', '.'], stdout=f) + finally: + os.chdir(old_cwd) + +#a = Archive() +#a.create_deb('vanilla') +#a.create_deb('chocolate', dependencies={'Depends': 'foo'}, +# extra_tags={'Modaliases': 'pci-1'}, +# files={'usr/share/doc/chocolate/README': 'hello'}) +#print(a.apt_source) +#subprocess.call(['bash', '-i'], cwd=a.path) --- jockey-0.9.7.orig/tests/fakesysfs.py +++ jockey-0.9.7/tests/fakesysfs.py @@ -0,0 +1,91 @@ +'''Provide a fake sysfs directory for testing.''' + +# (C) 2011, 2012 Martin Pitt +# Adapted from upower's integration test suite (src/linux/integration-test) +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +import tempfile +import shutil +import os + +class SysFS: + def __init__(self): + '''Construct a fake sysfs tree. + + The tree is initially empty. You can populate it with @add and + manipulate it with the other methods on this object. + + It is kept in a temporary directory which gets removed when the SysFS + object gets deleted. + + To use this with e. g. libudev, export the SYSFS_PATH environment + variable to self.sysfs. + ''' + self.sysfs = tempfile.mkdtemp() + + def __del__(self): + shutil.rmtree(self.sysfs) + + def add(self, subsystem, name, attributes, properties=None): + '''Add a new device to the local sysfs tree. + + attributes and (optionally) properties are specified as a normal Python + dictionary. + + Return the device path. + ''' + dev_dir = os.path.join(self.sysfs, 'devices', name) + if not os.path.isdir(dev_dir): + os.makedirs(dev_dir) + class_dir = os.path.join(self.sysfs, 'class', subsystem) + if not os.path.isdir(class_dir): + os.makedirs(class_dir) + + os.symlink(os.path.join('..', '..', 'devices', name), os.path.join(class_dir, name)) + os.symlink(os.path.join('..', '..', 'class', subsystem), os.path.join(dev_dir, 'subsystem')) + + attributes['uevent'] = self._props_to_str(properties) + + for a, v in attributes.items(): + self.set_attribute(dev_dir, a, v) + + return dev_dir + + def get_attribute(self, devpath, name): + '''Get device attribute''' + + with open(os.path.join(devpath, name), 'r') as f: + return f.read() + + def set_attribute(self, devpath, name, value): + '''Set device attribute''' + + with open(os.path.join(devpath, name), 'w') as f: + f.write(value) + + def set_property(self, devpath, name, value): + '''Set device udev property''' + + prop_str = self.get_attribute(devpath, 'uevent') + props = {} + for l in prop_str.splitlines(): + (k, v) = l.split('=') + props[k] = v.rstrip() + + props[name] = value + + self.set_attribute(devpath, 'uevent', self._props_to_str(props)) + + @classmethod + def _props_to_str(cls, properties): + '''Convert a properties dictionary to uevent text representation.''' + + prop_str = '' + if properties: + for k, v in properties.items(): + prop_str += '%s=%s\n' % (k, v) + return prop_str --- jockey-0.9.7.orig/tests/oslib.py +++ jockey-0.9.7/tests/oslib.py @@ -1,4 +1,4 @@ -# -*- coding: UTF-8 -*- +# -*- coding: utf-8 -*- '''oslib tests''' @@ -18,7 +18,7 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -import unittest, os, tempfile, shutil, subprocess +import unittest, os, tempfile, shutil, subprocess, sys, re, apt from jockey.oslib import OSLib import sandbox @@ -35,9 +35,16 @@ def setUp(self): (fd, self.tempfile) = tempfile.mkstemp() os.close(fd) + self._create_apt_sandbox() def tearDown(self): os.unlink(self.tempfile) + apt_root = os.path.join(OSLib.inst.workdir, 'aptroot') + if os.path.isdir(apt_root): + shutil.rmtree(apt_root) + archive = os.path.join(OSLib.inst.workdir, 'archive') + if os.path.isdir(archive): + shutil.rmtree(archive) def test_module_blacklisting(self): '''module_blacklisted() and blacklist_module()''' @@ -167,14 +174,8 @@ self.assert_('/bin/tail' in coreutils_files or '/usr/bin/tail' in coreutils_files) - def test_package_install(self): - '''package installation/removal - - This will just do some very shallow tests if this is not run as root. - ''' - # test package; this is most likely not installed yet (test suite will - # abort if it is) - test_package = 'lrzsz' + def test_package_install_unknown(self): + '''package installation/removal for unknown package''' # use real OSLib here, not test suite's fake implementation o = OSLib() @@ -183,17 +184,112 @@ # this should not crash, since it is not installed o.remove_package('nonexisting', None) - if os.getuid() != 0: - return + def test_package_install_thirdparty_unsigned_indep(self): + '''package installation for unsigned third-party repo, arch indep''' + + archive = self._create_archive() + log_offset = sandbox.log.tell() + self.sandbox_oslib.install_package('myppd', None, 'deb file://' + archive + ' /', + None) + log = sandbox.log.getvalue()[log_offset:] + self.assertTrue('Package failed to install' in log) + + # if we are run as root, this might succeed, and we clean up again + self.sandbox_oslib.remove_package('myppd', None) + + def test_package_install_local_unsigned_binary(self): + '''package installation for unsigned local file:// repo, binary''' + + archive = self._create_archive() + log_offset = sandbox.log.tell() + self.sandbox_oslib.install_package('binary', None, + 'deb file://' + archive + ' /', None) + log = sandbox.log.getvalue()[log_offset:] + self.assertFalse('no trusted origin' in log) + + def test_package_install_thirdparty_unsigned_binary(self): + '''package installation for unsigned third-party repo, binary''' + + archive = self._create_archive() + log_offset = sandbox.log.tell() + httpd.start(18080, archive) + try: + self.sandbox_oslib.install_package('binary', None, + 'deb http://localhost:18080/ /', None) + log = sandbox.log.getvalue()[log_offset:] + self.assertTrue('no trusted origin' in log) + finally: + httpd.stop() + + def test_package_install_thirdparty_signed_binary(self): + '''package installation for signed third-party repo, binary''' + + archive = self._create_archive(signed=True) + self._start_keyserver() + log_offset = sandbox.log.tell() + try: + self.sandbox_oslib.install_package('binary', None, + 'deb file://' + archive + ' /', test_gpg_fp) + log = sandbox.log.getvalue()[log_offset:] + self.assertFalse('no trusted origin' in log) + self.assertTrue('Package failed to install' in log) + + # if we are run as root, this might succeed, and we clean up again + self.sandbox_oslib.remove_package('binary', None) + finally: + self._stop_keyserver() + + def test_package_install_thirdparty_signed_binary_bad_fp(self): + '''package installation for signed third-party repo, binary, bad fingerprint''' + + archive = self._create_archive(signed=True) + self._start_keyserver() + try: + self.sandbox_oslib.install_package('binary', None, + 'deb file://' + archive + ' /', test_gpg_fp.replace('4', '1')) + self.fail('installing binary package with bad GPG key is not allowed') + except SystemError, e: + # this fails as non-root, as apt can't be told to not chroot(RootDir) + self.assert_('failed to import key' in str(e)) + finally: + self._stop_keyserver() - self.failIf(o.package_installed(test_package), - '%s must not be installed for this test' % test_package) + def test_ubuntu_repositories(self): + '''Ubuntu implementation of repository add/removal/query''' + + f = open(self.sandbox_oslib.apt_sources, 'w') + f.write('''deb file:///tmp/ / +deb-src http://foo.com/foo nerdy other +#deb http://foo.com/foo nerdy universe +deb http://foo.com/foo nerdy main +''') - # test without progress reporting - o.install_package(test_package, None) - self.assert_(o.package_installed(test_package)) - o.remove_package(test_package, None) - self.failIf(o.package_installed(test_package)) + f.close() + f = open(self.sandbox_oslib.apt_sources + '.d/fake.list', 'w') + f.write('deb http://ubun.tu test/\ndeb-src http://ubu.tu xxx/\n') + f.close() + + self.assert_(self.sandbox_oslib.repository_enabled('deb file:///tmp/ /')) + self.failIf(self.sandbox_oslib.repository_enabled('deb file:///tmp2/ /')) + self.failIf(self.sandbox_oslib.repository_enabled('deb http://foo.com/foo nerdy other')) + self.failIf(self.sandbox_oslib.repository_enabled('deb http://foo.com/foo nerdy universe')) + self.assert_(self.sandbox_oslib.repository_enabled('deb http://foo.com/foo nerdy main')) + self.assert_(self.sandbox_oslib.repository_enabled('deb http://ubun.tu test/')) + self.failIf(self.sandbox_oslib.repository_enabled('deb http://ubun.tu xxx/')) + + self.failIf(self.sandbox_oslib.repository_enabled('deb http://third.party moo')) + + archive = self._create_archive() + debline = 'deb file://' + archive + ' /' + self.sandbox_oslib._add_repository(debline, None, None) + + self.assert_(self.sandbox_oslib.repository_enabled(debline)) + self.assert_(os.path.exists(self.sandbox_oslib.apt_jockey_source)) + self.sandbox_oslib._remove_repository(debline) + self.failIf(self.sandbox_oslib.repository_enabled(debline)) + self.failIf(os.path.exists(self.sandbox_oslib.apt_jockey_source)) + self.sandbox_oslib._remove_repository(debline) + self.failIf(self.sandbox_oslib.repository_enabled(debline)) def test_has_repositories(self): '''has_repositories() @@ -204,6 +300,51 @@ o = OSLib() self.assertEqual(o.has_repositories(), True) + def test_ubuntu_package_header_modaliases(self): + '''package_header_modaliases() plausibility for Ubuntu packages''' + + o = OSLib() + map = o.package_header_modaliases() + if not map: + return self.skipTest('no data available') + + module_name_re = re.compile('^[a-zA-Z0-9_]+$') + alias_re = re.compile('^[a-z]+:[a-zA-Z0-9_*-]+$') + for p, ma_map in map.iteritems(): + # p should be a valid package name + self.assertNotEqual(o.package_description(p), '') + + for module, aliases in ma_map.iteritems(): + self.assert_(module_name_re.match(module), 'invalid module name ' + module) + self.assertNotEqual(len(aliases), 0) + for a in aliases: + self.assert_(alias_re.match(a), 'invalid modalias of %s: %s' % (module, a)) + + def test_parse_ubuntu_package_header_modalias(self): + '''package_header_modaliases()''' + + dpkg = subprocess.Popen(['dpkg', '--print-architecture'], + stdout=subprocess.PIPE) + system_architecture = dpkg.communicate()[0].strip() + assert dpkg.returncode == 0 + + class MockPackage(): + def architecture(self): + return system_architecture + class MockVersion(): + pass + o = OSLib() + pkg = MockPackage() + pkg.name = 'foo' + pkg.candidate = MockVersion() + mock_record = { 'Package' : 'foo', + 'Modaliases' : 'mod1(pci1, pci2), mod2(pci1)' + } + pkg.candidate.record = mock_record + res = o.package_header_modaliases([pkg]) + self.assertEqual(res, + {'foo': {'mod1': ['pci1', 'pci2'], 'mod2': ['pci1']}}) + @unittest.skipUnless(OSLib.has_defaultroute(), 'online test') def test_ssl_cert_file(self): '''ssl_cert_file() @@ -272,6 +413,22 @@ os.environ['PATH'] = orig_path self.assertEqual(o._gpg_keyring_fingerprints(self.tempfile), []) + def test_ubuntu_xorg_video_abi(self): + o = OSLib() + self.assert_(o.current_xorg_video_abi().startswith('xorg-video-abi-')) + for driver in ('nvidia-current', 'nvidia-304', 'nvidia-173'): + if (o.package_available(driver) and not + o.package_transitional): + for abi in o.video_driver_abi(driver): + self.assert_(abi.startswith('xorg-video-abi-')) + + def test_ubuntu_kernel_headers(self): + o = OSLib() + if o.package_available(o.kernel_header_package): + (short, long) = o.package_description(o.kernel_header_package) + self.assert_(short) + self.assert_(long) + # # Helper methods # @@ -297,3 +454,108 @@ httpd.stop() shutil.rmtree(os.path.join(OSLib.inst.workdir, 'pks')) + @classmethod + def _create_deb(klass, name, arch, dir): + '''Create a dummy deb with given name and architecture. + + Return the full path of the deb. + ''' + d = os.path.join(OSLib.inst.workdir, name) + os.makedirs(os.path.join(d, 'DEBIAN')) + + open(os.path.join(d, 'DEBIAN', 'control'), 'w').write('''Package: %s +Version: 1 +Priority: optional +Section: devel +Architecture: %s +Maintainer: Joe +Description: dummy package + just a test dummy package +''' % (name, arch)) + + debpath = os.path.join(dir, '%s_1_%s.deb' % (name, arch)) + assert subprocess.call(['dpkg', '-b', d, debpath], + stdout=subprocess.PIPE) == 0 + + shutil.rmtree(d) + assert os.path.exists(debpath) + return debpath + + @classmethod + def _create_archive(klass, signed=False): + '''Create a test archive. + + This will create a deb archive with one Arch: all package "myppd" + and one architecture dependent package "binary". The release is + name is 'testy'. + + If signed is True, the Release file will be signed with the test + suite's GPG key. + + Return the path to the archive. + ''' + archive = os.path.join(OSLib.inst.workdir, 'archive') + os.mkdir(archive) + + dpkg = subprocess.Popen(['dpkg-architecture', '-qDEB_HOST_ARCH'], + stdout=subprocess.PIPE) + host_arch = dpkg.communicate()[0].strip() + assert dpkg.returncode == 0 + + klass._create_deb('myppd', 'all', archive) + klass._create_deb('binary', host_arch, archive) + + assert subprocess.call('apt-ftparchive packages . > Packages', shell=True, + cwd=archive) == 0 + assert subprocess.call('apt-ftparchive -o APT::FTPArchive::Release::Suite=testy release . > Release', + shell=True, cwd=archive) == 0 + + if signed: + assert subprocess.call(['gpg', '--homedir', OSLib.inst.workdir, + '--no-default-keyring', '--primary-keyring', + os.path.join(os.path.dirname(__file__), 'data', 'pubring.gpg'), + '--secret-keyring', + os.path.join(os.path.dirname(__file__), 'data', 'secring.gpg'), + '-abs', '--batch', '-o', os.path.join(archive, 'Release.gpg'), + os.path.join(archive, 'Release')]) == 0 + + return archive + + def _create_apt_sandbox(self): + '''Create sandbox for apt and configure it to use it''' + + apt_root = os.path.join(OSLib.inst.workdir, 'aptroot') + + # we need to symlink the apt_root into itself, as Cache.update()'s + # sources_list argument prepends RootDir + os.makedirs(apt_root + os.path.dirname(apt_root)) + os.symlink(apt_root, apt_root + apt_root) + + apt.apt_pkg.init_config() + apt.apt_pkg.config.set('RootDir', apt_root) + apt.apt_pkg.config.set('Debug::NoLocking', 'true') + #apt.apt_pkg.config.set('Debug::pkgDPkgPM', 'true') + apt.apt_pkg.config.clear('DPkg::Post-Invoke') + apt.apt_pkg.config.clear('DPkg::Pre-Install-Pkgs') + apt.apt_pkg.config.clear('APT::Update::Post-Invoke-Success') + + os.makedirs(os.path.join(apt_root, 'etc', 'apt', 'sources.list.d')) + os.makedirs(os.path.join(apt_root, 'etc', 'apt', 'apt.conf.d')) + os.makedirs(os.path.join(apt_root, 'etc', 'apt', 'trusted.gpg.d')) + os.makedirs(os.path.join(apt_root, 'usr', 'lib', 'apt')) + os.makedirs(os.path.join(apt_root, 'var', 'lib', 'apt', 'lists', 'partial')) + os.makedirs(os.path.join(apt_root, 'var', 'cache', 'apt', 'archives', 'partial')) + os.makedirs(os.path.join(apt_root, 'var', 'log', 'apt')) + dpkglib = os.path.join(apt_root, 'var', 'lib', 'dpkg') + os.symlink('/usr/lib/apt/methods', os.path.join(apt_root, 'usr', 'lib', 'apt', 'methods')) + os.makedirs(dpkglib) + open(os.path.join(dpkglib, 'status'), 'w').close() + open(os.path.join(apt_root, 'etc', 'apt', 'sources.list'), 'w').close() + + # create matching OSLib + self.sandbox_oslib = OSLib() + self.sandbox_oslib.apt_jockey_source = apt_root + self.sandbox_oslib.apt_jockey_source + self.sandbox_oslib.apt_trusted_keyring = apt_root + self.sandbox_oslib.apt_trusted_keyring + self.sandbox_oslib.apt_sources = apt_root + self.sandbox_oslib.apt_sources + self.sandbox_oslib.gpg_key_server = 'localhost' + --- jockey-0.9.7.orig/tests/kerneldetection.py +++ jockey-0.9.7/tests/kerneldetection.py @@ -0,0 +1,877 @@ +# +# kerneldetection.py +# +# Copyright 2013 Canonical Ltd. +# +# Author: Alberto Milone +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301, USA. + +import os +import shutil +import tempfile +import unittest +import apt +import aptdaemon.test +import aptdaemon.pkcompat + +import jockey.kerneldetection + +import fakesysfs +import testarchive + + +def gen_fakesys(): + '''Generate a fake SysFS object for testing''' + + s = fakesysfs.SysFS() + # covered by vanilla.deb + s.add('pci', 'white', {'modalias': 'pci:v00001234d00sv00000001sd00bc00sc00i00'}) + # covered by chocolate.deb + s.add('usb', 'black', {'modalias': 'usb:v9876dABCDsv01sd02bc00sc01i05'}) + # covered by nvidia-{current,old}.deb + s.add('pci', 'graphics', {'modalias': 'pci:nvidia', + 'vendor': '0x10DE', + 'device': '0x10C3', + }) + # not covered by any driver package + s.add('pci', 'grey', {'modalias': 'pci:vDEADBEEFd00'}) + s.add('ssb', 'yellow', {}, {'MODALIAS': 'pci:vDEADBEEFd00'}) + + return s + + +def gen_fakearchive(): + '''Generate a fake archive for testing''' + + a = testarchive.Archive() + a.create_deb('vanilla', extra_tags={'Modaliases': + 'vanilla(pci:v00001234d*sv*sd*bc*sc*i*, pci:v0000BEEFd*sv*sd*bc*sc*i*)'}) + a.create_deb('chocolate', dependencies={'Depends': 'xserver-xorg-core'}, + extra_tags={'Modaliases': + 'chocolate(usb:v9876dABCDsv*sd*bc00sc*i*, pci:v0000BEEFd*sv*sd*bc*sc*i00)'}) + + # packages for testing X.org driver ABI installability + a.create_deb('xserver-xorg-core', version='99:1', # higher than system installed one + dependencies={'Provides': 'xorg-video-abi-4'}) + a.create_deb('nvidia-current', dependencies={'Depends': 'xorg-video-abi-4'}, + extra_tags={'Modaliases': 'nv(pci:nvidia, pci:v000010DEd000010C3sv00sd01bc03sc00i00)'}) + a.create_deb('nvidia-old', dependencies={'Depends': 'xorg-video-abi-3'}, + extra_tags={'Modaliases': 'nv(pci:nvidia, pci:v000010DEd000010C3sv00sd01bc03sc00i00)'}) + + # packages not covered by modalises, for testing detection plugins + a.create_deb('special') + a.create_deb('picky') + a.create_deb('special-uninst', dependencies={'Depends': 'xorg-video-abi-3'}) + + return a + + +class KernelDectionTest(unittest.TestCase): + '''Test jockey.kerneldetection''' + + def setUp(self): + '''Create a fake sysfs''' + + self.sys = gen_fakesys() + os.environ['SYSFS_PATH'] = self.sys.sysfs + + # no custom detection plugins by default + self.plugin_dir = tempfile.mkdtemp() + os.environ['UBUNTU_DRIVERS_DETECT_DIR'] = self.plugin_dir + + def tearDown(self): + try: + del os.environ['SYSFS_PATH'] + except KeyError: + pass + shutil.rmtree(self.plugin_dir) + + def test_linux_headers_detection_chroot(self): + '''get_linux_headers_metapackage() for test package repository''' + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('linux-image-3.2.0-23-generic', + extra_tags={'Source': 'linux'}) + archive.create_deb('linux-image-3.2.0-33-generic', + extra_tags={'Source': 'linux'}) + archive.create_deb('linux-image-3.5.0-18-generic', + extra_tags={'Source': + 'linux-lts-quantal'}) + archive.create_deb('linux-image-3.5.0-19-generic', + extra_tags={'Source': + 'linux-lts-quantal'}) + archive.create_deb('linux-image-generic', + extra_tags={'Source': + 'linux-meta'}) + archive.create_deb('linux-image-generic-lts-quantal', + extra_tags={'Source': + 'linux-meta-lts-quantal'}) + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux_headers = kernel_detection.get_linux_headers_metapackage() + self.assertEqual(linux_headers, '') + + # Install kernel packages + for pkg in ('linux-image-3.2.0-23-generic', + 'linux-image-3.2.0-33-generic', + 'linux-image-3.5.0-18-generic', + 'linux-image-3.5.0-19-generic', + 'linux-image-generic', + 'linux-image-generic-lts-quantal'): + cache[pkg].mark_install() + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux_headers = kernel_detection.get_linux_headers_metapackage() + self.assertEqual(linux_headers, 'linux-headers-generic-lts-quantal') + finally: + chroot.remove() + + def test_linux_headers_detection_names_chroot1(self): + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('linux-image-nexus7', + extra_tags={'Source': 'linux-meta-nexus7'}) + archive.create_deb('linux-image-3.1.10-9-nexus7', + extra_tags={'Source': 'linux-nexus7'}) + archive.create_deb('linux-image-omap4', + extra_tags={'Source': + 'linux-meta-ti-omap4'}) + archive.create_deb('linux-image-3.2.0-1419-omap4', + extra_tags={'Source': + 'linux-ti-omap4'}) + archive.create_deb('linux-image-3.5.0-17-highbank', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-highbank', + extra_tags={'Source': + 'linux-meta-highbank'}) + archive.create_deb('linux-image-powerpc-smp', + extra_tags={'Source': + 'linux-meta-powerpc-smp'}) + archive.create_deb('linux-image-3.5.0-18-powerpc-smp', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-powerpc64-smp', + extra_tags={'Source': + 'linux-meta-powerpc64-smp'}) + archive.create_deb('linux-image-3.5.0-17-powerpc64-smp', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-ac100', + extra_tags={'Source': + 'linux-meta-ac100'}) + archive.create_deb('linux-image-3.0.27-1-ac100', + extra_tags={'Source': + 'linux-ac100'}) + + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux_headers = kernel_detection.get_linux_headers_metapackage() + self.assertEqual(linux_headers, '') + + # Install kernel packages + for pkg in ('linux-image-nexus7', + 'linux-image-3.1.10-9-nexus7', + 'linux-image-omap4', + 'linux-image-3.2.0-1419-omap4', + 'linux-image-highbank', + 'linux-image-3.5.0-17-highbank', + 'linux-image-powerpc-smp', + 'linux-image-3.5.0-18-powerpc-smp', + 'linux-image-powerpc64-smp', + 'linux-image-3.5.0-17-powerpc64-smp', + 'linux-image-ac100', + 'linux-image-3.0.27-1-ac100'): + cache[pkg].mark_install() + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux_headers = kernel_detection.get_linux_headers_metapackage() + self.assertEqual(linux_headers, 'linux-headers-powerpc-smp') + finally: + chroot.remove() + + def test_linux_headers_detection_names_chroot2(self): + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('linux-image-nexus7', + extra_tags={'Source': 'linux-meta-nexus7'}) + archive.create_deb('linux-image-3.1.10-9-nexus7', + extra_tags={'Source': 'linux-nexus7'}) + archive.create_deb('linux-image-omap4', + extra_tags={'Source': + 'linux-meta-ti-omap4'}) + archive.create_deb('linux-image-3.2.0-1419-omap4', + extra_tags={'Source': + 'linux-ti-omap4'}) + archive.create_deb('linux-image-3.5.0-17-highbank', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-highbank', + extra_tags={'Source': + 'linux-meta-highbank'}) + archive.create_deb('linux-image-powerpc-smp', + extra_tags={'Source': + 'linux-meta-powerpc-smp'}) + archive.create_deb('linux-image-3.5.0-18-powerpc-smp', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-powerpc64-smp', + extra_tags={'Source': + 'linux-meta-powerpc64-smp'}) + archive.create_deb('linux-image-3.5.0-19-powerpc64-smp', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-ac100', + extra_tags={'Source': + 'linux-meta-ac100'}) + archive.create_deb('linux-image-3.0.27-1-ac100', + extra_tags={'Source': + 'linux-ac100'}) + + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux_headers = kernel_detection.get_linux_headers_metapackage() + self.assertEqual(linux_headers, '') + + # Install kernel packages + for pkg in ('linux-image-nexus7', + 'linux-image-3.1.10-9-nexus7', + 'linux-image-omap4', + 'linux-image-3.2.0-1419-omap4', + 'linux-image-highbank', + 'linux-image-3.5.0-17-highbank', + 'linux-image-powerpc-smp', + 'linux-image-3.5.0-18-powerpc-smp', + 'linux-image-powerpc64-smp', + 'linux-image-3.5.0-19-powerpc64-smp', + 'linux-image-ac100', + 'linux-image-3.0.27-1-ac100'): + cache[pkg].mark_install() + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux_headers = kernel_detection.get_linux_headers_metapackage() + self.assertEqual(linux_headers, 'linux-headers-powerpc64-smp') + finally: + chroot.remove() + + def test_linux_headers_detection_names_chroot3(self): + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('linux-image-nexus7', + extra_tags={'Source': 'linux-meta-nexus7'}) + archive.create_deb('linux-image-3.1.10-9-nexus7', + extra_tags={'Source': 'linux-nexus7'}) + archive.create_deb('linux-image-omap4', + extra_tags={'Source': + 'linux-meta-ti-omap4'}) + archive.create_deb('linux-image-3.8.0-1419-omap4', + extra_tags={'Source': + 'linux-ti-omap4'}) + archive.create_deb('linux-image-3.5.0-17-highbank', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-highbank', + extra_tags={'Source': + 'linux-meta-highbank'}) + archive.create_deb('linux-image-powerpc-smp', + extra_tags={'Source': + 'linux-meta-powerpc-smp'}) + archive.create_deb('linux-image-3.5.0-18-powerpc-smp', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-powerpc64-smp', + extra_tags={'Source': + 'linux-meta-powerpc64-smp'}) + archive.create_deb('linux-image-3.5.0-19-powerpc64-smp', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-ac100', + extra_tags={'Source': + 'linux-meta-ac100'}) + archive.create_deb('linux-image-3.0.27-1-ac100', + extra_tags={'Source': + 'linux-ac100'}) + + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux_headers = kernel_detection.get_linux_headers_metapackage() + self.assertEqual(linux_headers, '') + + # Install kernel packages + for pkg in ('linux-image-nexus7', + 'linux-image-3.1.10-9-nexus7', + 'linux-image-omap4', + 'linux-image-3.8.0-1419-omap4', + 'linux-image-highbank', + 'linux-image-3.5.0-17-highbank', + 'linux-image-powerpc-smp', + 'linux-image-3.5.0-18-powerpc-smp', + 'linux-image-powerpc64-smp', + 'linux-image-3.5.0-19-powerpc64-smp', + 'linux-image-ac100', + 'linux-image-3.0.27-1-ac100'): + cache[pkg].mark_install() + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux_headers = kernel_detection.get_linux_headers_metapackage() + self.assertEqual(linux_headers, 'linux-headers-omap4') + finally: + chroot.remove() + + def test_linux_headers_detection_names_chroot4(self): + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('linux-image-powerpc-smp', + extra_tags={'Source': + 'linux-ppc'}) + archive.create_deb('linux-image-3.8.0-3-powerpc-e500', + extra_tags={'Source': + 'linux-ppc'}) + archive.create_deb('linux-image-3.8.0-1-powerpc-smp', + extra_tags={'Source': + 'linux-ppc'}) + archive.create_deb('linux-image-3.5.0-19-powerpc64-smp', + extra_tags={'Source': + 'linux-ppc'}) + archive.create_deb('linux-image-3.8.0-2-powerpc64-smp', + extra_tags={'Source': + 'linux-ppc'}) + archive.create_deb('linux-image-3.0.27-1-ac100', + extra_tags={'Source': + 'linux-ac100'}) + + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux_headers = kernel_detection.get_linux_headers_metapackage() + self.assertEqual(linux_headers, '') + + # Install kernel packages + for pkg in ('linux-image-powerpc-smp', + 'linux-image-3.8.0-3-powerpc-e500', + 'linux-image-3.8.0-1-powerpc-smp', + 'linux-image-3.5.0-19-powerpc64-smp', + 'linux-image-3.8.0-2-powerpc64-smp', + 'linux-image-3.0.27-1-ac100'): + cache[pkg].mark_install() + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux_headers = kernel_detection.get_linux_headers_metapackage() + self.assertEqual(linux_headers, 'linux-headers-powerpc-e500') + finally: + chroot.remove() + + def test_linux_headers_detection_names_chroot5(self): + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('linux-image-3.2.0-36-lowlatency-pae', + extra_tags={'Source': 'linux-lowlatency'}) + archive.create_deb('linux-image-3.8.0-0-lowlatency', + extra_tags={'Source': 'linux-lowlatency'}) + archive.create_deb('linux-image-3.5.0-18-generic', + extra_tags={'Source': + 'linux-lts-quantal'}) + archive.create_deb('linux-image-3.5.0-19-generic', + extra_tags={'Source': + 'linux-lts-quantal'}) + archive.create_deb('linux-image-generic', + extra_tags={'Source': + 'linux-meta'}) + archive.create_deb('linux-image-generic-lts-quantal', + extra_tags={'Source': + 'linux-meta-lts-quantal'}) + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux_headers = kernel_detection.get_linux_headers_metapackage() + self.assertEqual(linux_headers, '') + + # Install kernel packages + for pkg in ('linux-image-3.2.0-36-lowlatency-pae', + 'linux-image-3.8.0-0-lowlatency', + 'linux-image-3.5.0-18-generic', + 'linux-image-3.5.0-19-generic', + 'linux-image-generic', + 'linux-image-generic-lts-quantal'): + cache[pkg].mark_install() + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux_headers = kernel_detection.get_linux_headers_metapackage() + self.assertEqual(linux_headers, 'linux-headers-lowlatency') + finally: + chroot.remove() + + def test_linux_detection_chroot(self): + '''get_linux_metapackage() for test package repository''' + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('linux-image-3.2.0-23-generic', + extra_tags={'Source': 'linux'}) + archive.create_deb('linux-image-3.2.0-33-generic', + extra_tags={'Source': 'linux'}) + archive.create_deb('linux-image-3.5.0-18-generic', + extra_tags={'Source': + 'linux-lts-quantal'}) + archive.create_deb('linux-image-3.5.0-19-generic', + extra_tags={'Source': + 'linux-lts-quantal'}) + archive.create_deb('linux-image-generic', + extra_tags={'Source': + 'linux-meta'}) + archive.create_deb('linux-image-generic-lts-quantal', + extra_tags={'Source': + 'linux-meta-lts-quantal'}) + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux = kernel_detection.get_linux_metapackage() + self.assertEqual(linux, '') + + # Install kernel packages + for pkg in ('linux-image-3.2.0-23-generic', + 'linux-image-3.2.0-33-generic', + 'linux-image-3.5.0-18-generic', + 'linux-image-3.5.0-19-generic', + 'linux-image-generic', + 'linux-image-generic-lts-quantal'): + cache[pkg].mark_install() + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux = kernel_detection.get_linux_metapackage() + self.assertEqual(linux, 'linux-generic-lts-quantal') + finally: + chroot.remove() + + def test_linux_detection_names_chroot1(self): + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('linux-image-nexus7', + extra_tags={'Source': 'linux-meta-nexus7'}) + archive.create_deb('linux-image-3.1.10-9-nexus7', + extra_tags={'Source': 'linux-nexus7'}) + archive.create_deb('linux-image-omap4', + extra_tags={'Source': + 'linux-meta-ti-omap4'}) + archive.create_deb('linux-image-3.2.0-1419-omap4', + extra_tags={'Source': + 'linux-ti-omap4'}) + archive.create_deb('linux-image-3.5.0-17-highbank', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-highbank', + extra_tags={'Source': + 'linux-meta-highbank'}) + archive.create_deb('linux-image-powerpc-smp', + extra_tags={'Source': + 'linux-meta-powerpc-smp'}) + archive.create_deb('linux-image-3.5.0-18-powerpc-smp', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-powerpc64-smp', + extra_tags={'Source': + 'linux-meta-powerpc64-smp'}) + archive.create_deb('linux-image-3.5.0-17-powerpc64-smp', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-ac100', + extra_tags={'Source': + 'linux-meta-ac100'}) + archive.create_deb('linux-image-3.0.27-1-ac100', + extra_tags={'Source': + 'linux-ac100'}) + + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux = kernel_detection.get_linux_metapackage() + self.assertEqual(linux, '') + + # Install kernel packages + for pkg in ('linux-image-nexus7', + 'linux-image-3.1.10-9-nexus7', + 'linux-image-omap4', + 'linux-image-3.2.0-1419-omap4', + 'linux-image-highbank', + 'linux-image-3.5.0-17-highbank', + 'linux-image-powerpc-smp', + 'linux-image-3.5.0-18-powerpc-smp', + 'linux-image-powerpc64-smp', + 'linux-image-3.5.0-17-powerpc64-smp', + 'linux-image-ac100', + 'linux-image-3.0.27-1-ac100'): + cache[pkg].mark_install() + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux = kernel_detection.get_linux_metapackage() + self.assertEqual(linux, 'linux-powerpc-smp') + finally: + chroot.remove() + + def test_linux_detection_names_chroot2(self): + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('linux-image-nexus7', + extra_tags={'Source': 'linux-meta-nexus7'}) + archive.create_deb('linux-image-3.1.10-9-nexus7', + extra_tags={'Source': 'linux-nexus7'}) + archive.create_deb('linux-image-omap4', + extra_tags={'Source': + 'linux-meta-ti-omap4'}) + archive.create_deb('linux-image-3.2.0-1419-omap4', + extra_tags={'Source': + 'linux-ti-omap4'}) + archive.create_deb('linux-image-3.5.0-17-highbank', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-highbank', + extra_tags={'Source': + 'linux-meta-highbank'}) + archive.create_deb('linux-image-powerpc-smp', + extra_tags={'Source': + 'linux-meta-powerpc-smp'}) + archive.create_deb('linux-image-3.5.0-18-powerpc-smp', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-powerpc64-smp', + extra_tags={'Source': + 'linux-meta-powerpc64-smp'}) + archive.create_deb('linux-image-3.5.0-19-powerpc64-smp', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-ac100', + extra_tags={'Source': + 'linux-meta-ac100'}) + archive.create_deb('linux-image-3.0.27-1-ac100', + extra_tags={'Source': + 'linux-ac100'}) + + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux = kernel_detection.get_linux_metapackage() + self.assertEqual(linux, '') + + # Install kernel packages + for pkg in ('linux-image-nexus7', + 'linux-image-3.1.10-9-nexus7', + 'linux-image-omap4', + 'linux-image-3.2.0-1419-omap4', + 'linux-image-highbank', + 'linux-image-3.5.0-17-highbank', + 'linux-image-powerpc-smp', + 'linux-image-3.5.0-18-powerpc-smp', + 'linux-image-powerpc64-smp', + 'linux-image-3.5.0-19-powerpc64-smp', + 'linux-image-ac100', + 'linux-image-3.0.27-1-ac100'): + cache[pkg].mark_install() + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux = kernel_detection.get_linux_metapackage() + self.assertEqual(linux, 'linux-powerpc64-smp') + finally: + chroot.remove() + + def test_linux_detection_names_chroot3(self): + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('linux-image-nexus7', + extra_tags={'Source': 'linux-meta-nexus7'}) + archive.create_deb('linux-image-3.1.10-9-nexus7', + extra_tags={'Source': 'linux-nexus7'}) + archive.create_deb('linux-image-omap4', + extra_tags={'Source': + 'linux-meta-ti-omap4'}) + archive.create_deb('linux-image-3.8.0-1419-omap4', + extra_tags={'Source': + 'linux-ti-omap4'}) + archive.create_deb('linux-image-3.5.0-17-highbank', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-highbank', + extra_tags={'Source': + 'linux-meta-highbank'}) + archive.create_deb('linux-image-powerpc-smp', + extra_tags={'Source': + 'linux-meta-powerpc-smp'}) + archive.create_deb('linux-image-3.5.0-18-powerpc-smp', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-powerpc64-smp', + extra_tags={'Source': + 'linux-meta-powerpc64-smp'}) + archive.create_deb('linux-image-3.5.0-19-powerpc64-smp', + extra_tags={'Source': + 'linux'}) + archive.create_deb('linux-image-ac100', + extra_tags={'Source': + 'linux-meta-ac100'}) + archive.create_deb('linux-image-3.0.27-1-ac100', + extra_tags={'Source': + 'linux-ac100'}) + + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux = kernel_detection.get_linux_metapackage() + self.assertEqual(linux, '') + + # Install kernel packages + for pkg in ('linux-image-nexus7', + 'linux-image-3.1.10-9-nexus7', + 'linux-image-omap4', + 'linux-image-3.8.0-1419-omap4', + 'linux-image-highbank', + 'linux-image-3.5.0-17-highbank', + 'linux-image-powerpc-smp', + 'linux-image-3.5.0-18-powerpc-smp', + 'linux-image-powerpc64-smp', + 'linux-image-3.5.0-19-powerpc64-smp', + 'linux-image-ac100', + 'linux-image-3.0.27-1-ac100'): + cache[pkg].mark_install() + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux = kernel_detection.get_linux_metapackage() + self.assertEqual(linux, 'linux-omap4') + finally: + chroot.remove() + + def test_linux_detection_names_chroot4(self): + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('linux-image-powerpc-smp', + extra_tags={'Source': + 'linux-ppc'}) + archive.create_deb('linux-image-3.8.0-3-powerpc-e500', + extra_tags={'Source': + 'linux-ppc'}) + archive.create_deb('linux-image-3.8.0-1-powerpc-smp', + extra_tags={'Source': + 'linux-ppc'}) + archive.create_deb('linux-image-3.5.0-19-powerpc64-smp', + extra_tags={'Source': + 'linux-ppc'}) + archive.create_deb('linux-image-3.8.0-2-powerpc64-smp', + extra_tags={'Source': + 'linux-ppc'}) + archive.create_deb('linux-image-3.0.27-1-ac100', + extra_tags={'Source': + 'linux-ac100'}) + + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux = kernel_detection.get_linux_metapackage() + self.assertEqual(linux, '') + + # Install kernel packages + for pkg in ('linux-image-powerpc-smp', + 'linux-image-3.8.0-3-powerpc-e500', + 'linux-image-3.8.0-1-powerpc-smp', + 'linux-image-3.5.0-19-powerpc64-smp', + 'linux-image-3.8.0-2-powerpc64-smp', + 'linux-image-3.0.27-1-ac100'): + cache[pkg].mark_install() + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux = kernel_detection.get_linux_metapackage() + self.assertEqual(linux, 'linux-powerpc-e500') + finally: + chroot.remove() + + def test_linux_detection_names_chroot5(self): + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('linux-image-3.2.0-36-lowlatency-pae', + extra_tags={'Source': 'linux-lowlatency'}) + archive.create_deb('linux-image-3.8.0-0-lowlatency', + extra_tags={'Source': 'linux-lowlatency'}) + archive.create_deb('linux-image-3.5.0-18-generic', + extra_tags={'Source': + 'linux-lts-quantal'}) + archive.create_deb('linux-image-3.5.0-19-generic', + extra_tags={'Source': + 'linux-lts-quantal'}) + archive.create_deb('linux-image-generic', + extra_tags={'Source': + 'linux-meta'}) + archive.create_deb('linux-image-generic-lts-quantal', + extra_tags={'Source': + 'linux-meta-lts-quantal'}) + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux = kernel_detection.get_linux_metapackage() + self.assertEqual(linux, '') + + # Install kernel packages + for pkg in ('linux-image-3.2.0-36-lowlatency-pae', + 'linux-image-3.8.0-0-lowlatency', + 'linux-image-3.5.0-18-generic', + 'linux-image-3.5.0-19-generic', + 'linux-image-generic', + 'linux-image-generic-lts-quantal'): + cache[pkg].mark_install() + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux = kernel_detection.get_linux_metapackage() + self.assertEqual(linux, 'linux-lowlatency') + finally: + chroot.remove() + + def test_linux_detection_names_chroot6(self): + '''get_linux_metapackage() does not raise a KeyError''' + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('linux-image-3.2.0-36-lowlatency-pae') + archive.create_deb('linux-image-3.8.0-0-lowlatency') + archive.create_deb('linux-image-3.5.0-18-generic') + archive.create_deb('linux-image-3.5.0-19-generic') + archive.create_deb('linux-image-generic') + archive.create_deb('linux-image-generic-lts-quantal') + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux = kernel_detection.get_linux_metapackage() + self.assertEqual(linux, '') + + # Install kernel packages + for pkg in ('linux-image-3.2.0-36-lowlatency-pae', + 'linux-image-3.8.0-0-lowlatency', + 'linux-image-3.5.0-18-generic', + 'linux-image-3.5.0-19-generic', + 'linux-image-generic', + 'linux-image-generic-lts-quantal'): + cache[pkg].mark_install() + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + try: + kernel_detection.get_linux_metapackage() + except KeyError: + self.fail("get_linux_metapackage() raised KeyError!") + finally: + chroot.remove() + + def test_linux_detection_names_chroot7(self): + '''get_linux_metapackage() continues despite a KeyError''' + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('linux-image-3.2.0-36-lowlatency-pae') + archive.create_deb('linux-image-3.8.0-0-lowlatency', + extra_tags={'Source': 'linux-lowlatency'}) + archive.create_deb('linux-image-3.5.0-18-generic') + archive.create_deb('linux-image-3.5.0-19-generic') + archive.create_deb('linux-image-generic') + archive.create_deb('linux-image-generic-lts-quantal') + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux = kernel_detection.get_linux_metapackage() + self.assertEqual(linux, '') + + # Install kernel packages + for pkg in ('linux-image-3.2.0-36-lowlatency-pae', + 'linux-image-3.8.0-0-lowlatency', + 'linux-image-3.5.0-18-generic', + 'linux-image-3.5.0-19-generic', + 'linux-image-generic', + 'linux-image-generic-lts-quantal'): + cache[pkg].mark_install() + + kernel_detection = jockey.kerneldetection.KernelDetection(cache) + linux = kernel_detection.get_linux_metapackage() + self.assertEqual(linux, 'linux-lowlatency') + finally: + chroot.remove() + +if __name__ == '__main__': + unittest.main() --- jockey-0.9.7.orig/tests/hybridgraphics.py +++ jockey-0.9.7/tests/hybridgraphics.py @@ -0,0 +1,822 @@ +# +# hybridgraphics.py +# +# Copyright 2013 Canonical Ltd. +# +# Author: Alberto Milone +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301, USA. + +import os +import shutil +import tempfile +import unittest +import apt +import aptdaemon.test +import aptdaemon.pkcompat +import jockey.handlers, jockey.backend +import fakesysfs +import testarchive + +from jockey.oslib import OSLib +from jockey.xorg_driver import XorgDriverHandler + +def gen_fakesys(): + '''Generate a fake SysFS object for testing''' + + s = fakesysfs.SysFS() + # covered by vanilla.deb + s.add('pci', 'white', {'modalias': 'pci:v00001234d00sv00000001sd00bc00sc00i00'}) + # covered by chocolate.deb + s.add('usb', 'black', {'modalias': 'usb:v9876dABCDsv01sd02bc00sc01i05'}) + # covered by nvidia-{current,old}.deb + s.add('pci', 'graphics', {'modalias': 'pci:nvidia', + 'vendor': '0x10DE', + 'device': '0x10C3', + }) + # not covered by any driver package + s.add('pci', 'grey', {'modalias': 'pci:vDEADBEEFd00'}) + s.add('ssb', 'yellow', {}, {'MODALIAS': 'pci:vDEADBEEFd00'}) + + return s + + +def gen_fakearchive(): + '''Generate a fake archive for testing''' + + a = testarchive.Archive() + a.create_deb('vanilla', extra_tags={'Modaliases': + 'vanilla(pci:v00001234d*sv*sd*bc*sc*i*, pci:v0000BEEFd*sv*sd*bc*sc*i*)'}) + a.create_deb('chocolate', dependencies={'Depends': 'xserver-xorg-core'}, + extra_tags={'Modaliases': + 'chocolate(usb:v9876dABCDsv*sd*bc00sc*i*, pci:v0000BEEFd*sv*sd*bc*sc*i00)'}) + + # packages for testing X.org driver ABI installability + a.create_deb('xserver-xorg-core', version='99:1', # higher than system installed one + dependencies={'Provides': 'xorg-video-abi-4'}) + a.create_deb('nvidia-current', dependencies={'Depends': 'xorg-video-abi-4'}, + extra_tags={'Modaliases': 'nv(pci:nvidia, pci:v000010DEd000010C3sv00sd01bc03sc00i00)'}) + a.create_deb('nvidia-old', dependencies={'Depends': 'xorg-video-abi-3'}, + extra_tags={'Modaliases': 'nv(pci:nvidia, pci:v000010DEd000010C3sv00sd01bc03sc00i00)'}) + + # packages not covered by modalises, for testing detection plugins + a.create_deb('special') + a.create_deb('picky') + a.create_deb('special-uninst', dependencies={'Depends': 'xorg-video-abi-3'}) + + return a + +def is_installed(package, cache): + installed = False + + try: + installed = cache[package].marked_install + except KeyError: + # The package is not available + pass + return installed + +class HybridDectionTest(unittest.TestCase): + '''Test jockey hybrid graphics support''' + + def setUp(self): + '''Create a fake sysfs''' + + self.sys = gen_fakesys() + os.environ['SYSFS_PATH'] = self.sys.sysfs + + # no custom detection plugins by default + self.plugin_dir = tempfile.mkdtemp() + os.environ['UBUNTU_DRIVERS_DETECT_DIR'] = self.plugin_dir + + self.backend = jockey.backend.Backend() + + def tearDown(self): + try: + del os.environ['SYSFS_PATH'] + except KeyError: + pass + shutil.rmtree(self.plugin_dir) + + + def test_has_hybrid_graphics_chroot_1(self): + '''_has_hybrid_gfx() for lts-raring stack''' + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('xserver-xorg-core', + extra_tags={'Provides': + 'xorg-video-abi-11, xserver-xorg-core'}) + archive.create_deb('xserver-xorg-core-lts-quantal', + extra_tags={'Provides': + 'xorg-video-abi-13, xserver-xorg-core'}) + archive.create_deb('xserver-xorg-core-lts-raring', + extra_tags={'Provides': + 'xorg-video-abi-13, xserver-xorg-core'}) + archive.create_deb('linux-image-generic-lts-raring') + archive.create_deb('linux-image-generic-lts-saucy') + + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + # Install kernel packages + for pkg in ('xserver-xorg-core-lts-raring', + 'linux-image-generic-lts-raring'): + cache[pkg].mark_install() + + # Set fake kernel and X ABI + kernel = '3.9.0' + x_abi = '13' + + # Single GPU + pcilist_single = ['00:01.0 0300: 8086:0162 (rev 09)'] + + single = XorgDriverHandler(self.backend, 'vanilla3d0', + 'mesa-vanilla0', 'v3d0', + 'vanilla0', + name='Vanilla accelerated graphics driver0', + fake_pcilist=pcilist_single, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assertFalse(single.has_hybrid_graphics) + self.assert_(single.supports_hybrid_graphics) + + # Completely Unsupported GPU vendors + pcilist_multi = ['00:01.0 0300: 1111:0162 (rev 09)', + '00:02.0 0300: 1022:0163'] + + multi = XorgDriverHandler(self.backend, 'vanilla3d00', + 'mesa-vanilla00', 'v3d00', + 'vanilla00', + name='Vanilla accelerated graphics driver00', + fake_pcilist=pcilist_multi, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assertFalse(multi.has_hybrid_graphics) + self.assert_(multi.supports_hybrid_graphics) + + # Intel + Nvidia + pcilist_prime = ['00:01.0 0300: 8086:0162 (rev 09)', + '00:02.0 0300: 10de:0163'] + + prime = XorgDriverHandler(self.backend, 'vanilla3d1', + 'mesa-vanilla1', 'v3d1', + 'vanilla1', + name='Vanilla accelerated graphics driver1', + fake_pcilist=pcilist_prime, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(prime.has_hybrid_graphics) + self.assert_(prime.supports_hybrid_graphics) + + # Intel + AMD + pcilist_pxpress = ['00:01.0 0300: 8086:0162 (rev 09)', + '00:02.0 0300: 1002:0163'] + pxpress = XorgDriverHandler(self.backend, 'vanilla3d2', + 'mesa-vanilla2', 'v3d2', + 'vanilla2', + name='Vanilla accelerated graphics driver2', + fake_pcilist=pcilist_pxpress, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(pxpress.has_hybrid_graphics) + self.assert_(pxpress.supports_hybrid_graphics) + + # AMD + AMD + pcilist_pxpress_noconf = ['00:01.0 0300: 1002:0162 (rev 09)', + '00:02.0 0300: 1002:0163'] + pxpress_noconf = XorgDriverHandler(self.backend, 'vanilla3d3', + 'mesa-vanilla3', 'v3d3', + 'vanilla3', + name='Vanilla accelerated graphics driver3', + fake_pcilist=pcilist_pxpress_noconf, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(pxpress_noconf.has_hybrid_graphics) + self.assert_(pxpress_noconf.supports_hybrid_graphics) + + finally: + chroot.remove() + + def test_has_hybrid_graphics_chroot_2(self): + '''_has_hybrid_gfx() for lts-quantal stack''' + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('xserver-xorg-core', + extra_tags={'Provides': + 'xorg-video-abi-11, xserver-xorg-core'}) + archive.create_deb('xserver-xorg-core-lts-quantal', + extra_tags={'Provides': + 'xorg-video-abi-13, xserver-xorg-core'}) + archive.create_deb('xserver-xorg-core-lts-raring', + extra_tags={'Provides': + 'xorg-video-abi-13, xserver-xorg-core'}) + archive.create_deb('linux-image-generic-lts-quantal') + archive.create_deb('linux-image-generic-lts-raring') + archive.create_deb('linux-image-generic-lts-saucy') + + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + # Install kernel packages + for pkg in ('xserver-xorg-core-lts-quantal', + 'linux-image-generic-lts-quantal'): + cache[pkg].mark_install() + + # Set fake kernel and X ABI + kernel = '3.5.0-36-generic' + x_abi = '13' + + # Single GPU + pcilist_single = ['00:01.0 0300: 8086:0162 (rev 09)'] + + single = XorgDriverHandler(self.backend, 'vanilla3d0', + 'mesa-vanilla0', 'v3d0', + 'vanilla0', + name='Vanilla accelerated graphics driver0', + fake_pcilist=pcilist_single, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assertFalse(single.has_hybrid_graphics) + self.assertFalse(single.supports_hybrid_graphics) + + # Completely Unsupported GPU vendors + pcilist_multi = ['00:01.0 0300: 1111:0162 (rev 09)', + '00:02.0 0300: 1022:0163'] + + multi = XorgDriverHandler(self.backend, 'vanilla3d00', + 'mesa-vanilla00', 'v3d00', + 'vanilla00', + name='Vanilla accelerated graphics driver00', + fake_pcilist=pcilist_multi, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assertFalse(multi.has_hybrid_graphics) + self.assertFalse(multi.supports_hybrid_graphics) + + # Intel + Nvidia + pcilist_prime = ['00:01.0 0300: 8086:0162 (rev 09)', + '00:02.0 0300: 10de:0163'] + + prime = XorgDriverHandler(self.backend, 'vanilla3d1', + 'mesa-vanilla1', 'v3d1', + 'vanilla1', + name='Vanilla accelerated graphics driver1', + fake_pcilist=pcilist_prime, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(prime.has_hybrid_graphics) + self.assertFalse(prime.supports_hybrid_graphics) + + # Intel + AMD + pcilist_pxpress = ['00:01.0 0300: 8086:0162 (rev 09)', + '00:02.0 0300: 1002:0163'] + pxpress = XorgDriverHandler(self.backend, 'vanilla3d2', + 'mesa-vanilla2', 'v3d2', + 'vanilla2', + name='Vanilla accelerated graphics driver2', + fake_pcilist=pcilist_pxpress, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(pxpress.has_hybrid_graphics) + self.assertFalse(pxpress.supports_hybrid_graphics) + + # AMD + AMD + pcilist_pxpress_noconf = ['00:01.0 0300: 1002:0162 (rev 09)', + '00:02.0 0300: 1002:0163'] + pxpress_noconf = XorgDriverHandler(self.backend, 'vanilla3d3', + 'mesa-vanilla3', 'v3d3', + 'vanilla3', + name='Vanilla accelerated graphics driver3', + fake_pcilist=pcilist_pxpress_noconf, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(pxpress_noconf.has_hybrid_graphics) + self.assertFalse(pxpress_noconf.supports_hybrid_graphics) + + finally: + chroot.remove() + + def test_has_hybrid_graphics_chroot_3(self): + '''_has_hybrid_gfx() for 12.04.0 stack''' + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('xserver-xorg-core', + extra_tags={'Provides': + 'xorg-video-abi-11, xserver-xorg-core'}) + archive.create_deb('xserver-xorg-core-lts-quantal', + extra_tags={'Provides': + 'xorg-video-abi-13, xserver-xorg-core'}) + archive.create_deb('xserver-xorg-core-lts-raring', + extra_tags={'Provides': + 'xorg-video-abi-13, xserver-xorg-core'}) + archive.create_deb('linux-image-generic') + archive.create_deb('linux-image-generic-lts-quantal') + archive.create_deb('linux-image-generic-lts-raring') + archive.create_deb('linux-image-generic-lts-saucy') + + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + # Install kernel packages + for pkg in ('xserver-xorg-core', + 'linux-image-generic'): + cache[pkg].mark_install() + + # Set fake kernel and X ABI + kernel = '3.2.0.49.59' + x_abi = '11' + + # Single GPU + pcilist_single = ['00:01.0 0300: 8086:0162 (rev 09)'] + + single = XorgDriverHandler(self.backend, 'vanilla3d0', + 'mesa-vanilla0', 'v3d0', + 'vanilla0', + name='Vanilla accelerated graphics driver0', + fake_pcilist=pcilist_single, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assertFalse(single.has_hybrid_graphics) + self.assertFalse(single.supports_hybrid_graphics) + + # Completely Unsupported GPU vendors + pcilist_multi = ['00:01.0 0300: 1111:0162 (rev 09)', + '00:02.0 0300: 1022:0163'] + + multi = XorgDriverHandler(self.backend, 'vanilla3d00', + 'mesa-vanilla00', 'v3d00', + 'vanilla00', + name='Vanilla accelerated graphics driver00', + fake_pcilist=pcilist_multi, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assertFalse(multi.has_hybrid_graphics) + self.assertFalse(multi.supports_hybrid_graphics) + + # Intel + Nvidia + pcilist_prime = ['00:01.0 0300: 8086:0162 (rev 09)', + '00:02.0 0300: 10de:0163'] + + prime = XorgDriverHandler(self.backend, 'vanilla3d1', + 'mesa-vanilla1', 'v3d1', + 'vanilla1', + name='Vanilla accelerated graphics driver1', + fake_pcilist=pcilist_prime, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(prime.has_hybrid_graphics) + self.assertFalse(prime.supports_hybrid_graphics) + + # Intel + AMD + pcilist_pxpress = ['00:01.0 0300: 8086:0162 (rev 09)', + '00:02.0 0300: 1002:0163'] + pxpress = XorgDriverHandler(self.backend, 'vanilla3d2', + 'mesa-vanilla2', 'v3d2', + 'vanilla2', + name='Vanilla accelerated graphics driver2', + fake_pcilist=pcilist_pxpress, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(pxpress.has_hybrid_graphics) + self.assertFalse(pxpress.supports_hybrid_graphics) + + # AMD + AMD + pcilist_pxpress_noconf = ['00:01.0 0300: 1002:0162 (rev 09)', + '00:02.0 0300: 1002:0163'] + pxpress_noconf = XorgDriverHandler(self.backend, 'vanilla3d3', + 'mesa-vanilla3', 'v3d3', + 'vanilla3', + name='Vanilla accelerated graphics driver3', + fake_pcilist=pcilist_pxpress_noconf, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(pxpress_noconf.has_hybrid_graphics) + self.assertFalse(pxpress_noconf.supports_hybrid_graphics) + + finally: + chroot.remove() + + def test_has_hybrid_graphics_chroot_4(self): + '''_has_hybrid_gfx() for lts-raring stack, different pci class''' + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('xserver-xorg-core', + extra_tags={'Provides': + 'xorg-video-abi-11, xserver-xorg-core'}) + archive.create_deb('xserver-xorg-core-lts-quantal', + extra_tags={'Provides': + 'xorg-video-abi-13, xserver-xorg-core'}) + archive.create_deb('xserver-xorg-core-lts-raring', + extra_tags={'Provides': + 'xorg-video-abi-13, xserver-xorg-core'}) + archive.create_deb('linux-image-generic-lts-raring') + archive.create_deb('linux-image-generic-lts-saucy') + + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + # Install kernel packages + for pkg in ('xserver-xorg-core-lts-raring', + 'linux-image-generic-lts-raring'): + cache[pkg].mark_install() + + # Set fake kernel and X ABI + kernel = '3.9.0' + x_abi = '13' + + # Single GPU + pcilist_single = ['00:01.0 0300: 8086:0162 (rev 09)'] + + single = XorgDriverHandler(self.backend, 'vanilla3d0', + 'mesa-vanilla0', 'v3d0', + 'vanilla0', + name='Vanilla accelerated graphics driver0', + fake_pcilist=pcilist_single, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assertFalse(single.has_hybrid_graphics) + self.assert_(single.supports_hybrid_graphics) + + # Completely Unsupported GPU vendors + pcilist_multi = ['00:01.0 0300: 1111:0162 (rev 09)', + '00:02.0 0302: 1022:0163'] + + multi = XorgDriverHandler(self.backend, 'vanilla3d00', + 'mesa-vanilla00', 'v3d00', + 'vanilla00', + name='Vanilla accelerated graphics driver00', + fake_pcilist=pcilist_multi, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assertFalse(multi.has_hybrid_graphics) + self.assert_(multi.supports_hybrid_graphics) + + # Intel + Nvidia + pcilist_prime = ['00:01.0 0300: 8086:0162 (rev 09)', + '00:02.0 0302: 10de:0163'] + + prime = XorgDriverHandler(self.backend, 'vanilla3d1', + 'mesa-vanilla1', 'v3d1', + 'vanilla1', + name='Vanilla accelerated graphics driver1', + fake_pcilist=pcilist_prime, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(prime.has_hybrid_graphics) + self.assert_(prime.supports_hybrid_graphics) + + # Intel + Nvidia - different pci class + pcilist_prime = ['00:01.0 0300: 8086:0162 (rev 09)', + '00:02.0 0301: 10de:0163'] + + prime = XorgDriverHandler(self.backend, 'vanilla3d1', + 'mesa-vanilla1', 'v3d1', + 'vanilla1', + name='Vanilla accelerated graphics driver1', + fake_pcilist=pcilist_prime, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(prime.has_hybrid_graphics) + self.assert_(prime.supports_hybrid_graphics) + + # Intel + AMD + pcilist_pxpress = ['00:01.0 0300: 8086:0162 (rev 09)', + '00:02.0 0380: 1002:0163'] + pxpress = XorgDriverHandler(self.backend, 'vanilla3d2', + 'mesa-vanilla2', 'v3d2', + 'vanilla2', + name='Vanilla accelerated graphics driver2', + fake_pcilist=pcilist_pxpress, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(pxpress.has_hybrid_graphics) + self.assert_(pxpress.supports_hybrid_graphics) + + # AMD + AMD + pcilist_pxpress_noconf = ['00:01.0 0300: 1002:0162 (rev 09)', + '00:02.0 0301: 1002:0163'] + pxpress_noconf = XorgDriverHandler(self.backend, 'vanilla3d3', + 'mesa-vanilla3', 'v3d3', + 'vanilla3', + name='Vanilla accelerated graphics driver3', + fake_pcilist=pcilist_pxpress_noconf, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(pxpress_noconf.has_hybrid_graphics) + self.assert_(pxpress_noconf.supports_hybrid_graphics) + + finally: + chroot.remove() + + def test_has_hybrid_graphics_chroot_5(self): + '''_has_hybrid_gfx() for lts-saucy stack''' + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('xserver-xorg-core', + extra_tags={'Provides': + 'xorg-video-abi-11, xserver-xorg-core'}) + archive.create_deb('xserver-xorg-core-lts-quantal', + extra_tags={'Provides': + 'xorg-video-abi-13, xserver-xorg-core'}) + archive.create_deb('xserver-xorg-core-lts-raring', + extra_tags={'Provides': + 'xorg-video-abi-13, xserver-xorg-core'}) + archive.create_deb('xserver-xorg-core-lts-saucy', + extra_tags={'Provides': + 'xorg-video-abi-14, xserver-xorg-core'}) + archive.create_deb('xserver-xorg-core-lts-trusty', + extra_tags={'Provides': + 'xorg-video-abi-15, xserver-xorg-core'}) + archive.create_deb('linux-image-generic-lts-raring') + archive.create_deb('linux-image-generic-lts-saucy') + archive.create_deb('linux-image-generic-lts-trusty') + + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + # Install kernel packages + for pkg in ('xserver-xorg-core-lts-saucy', + 'linux-image-generic-lts-saucy'): + cache[pkg].mark_install() + + # Set fake kernel and X ABI + kernel = '3.11.0' + x_abi = '14' + + # Single GPU + pcilist_single = ['00:01.0 0300: 8086:0162 (rev 09)'] + + single = XorgDriverHandler(self.backend, 'vanilla3d0', + 'mesa-vanilla0', 'v3d0', + 'vanilla0', + name='Vanilla accelerated graphics driver0', + fake_pcilist=pcilist_single, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assertFalse(single.has_hybrid_graphics) + self.assert_(single.supports_hybrid_graphics) + + # Completely Unsupported GPU vendors + pcilist_multi = ['00:01.0 0300: 1111:0162 (rev 09)', + '00:02.0 0300: 1022:0163'] + + multi = XorgDriverHandler(self.backend, 'vanilla3d00', + 'mesa-vanilla00', 'v3d00', + 'vanilla00', + name='Vanilla accelerated graphics driver00', + fake_pcilist=pcilist_multi, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assertFalse(multi.has_hybrid_graphics) + self.assert_(multi.supports_hybrid_graphics) + + # Intel + Nvidia + pcilist_prime = ['00:01.0 0300: 8086:0162 (rev 09)', + '00:02.0 0300: 10de:0163'] + + prime = XorgDriverHandler(self.backend, 'vanilla3d1', + 'mesa-vanilla1', 'v3d1', + 'vanilla1', + name='Vanilla accelerated graphics driver1', + fake_pcilist=pcilist_prime, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(prime.has_hybrid_graphics) + self.assert_(prime.supports_hybrid_graphics) + + # Intel + AMD + pcilist_pxpress = ['00:01.0 0300: 8086:0162 (rev 09)', + '00:02.0 0300: 1002:0163'] + pxpress = XorgDriverHandler(self.backend, 'vanilla3d2', + 'mesa-vanilla2', 'v3d2', + 'vanilla2', + name='Vanilla accelerated graphics driver2', + fake_pcilist=pcilist_pxpress, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(pxpress.has_hybrid_graphics) + self.assert_(pxpress.supports_hybrid_graphics) + + # AMD + AMD + pcilist_pxpress_noconf = ['00:01.0 0300: 1002:0162 (rev 09)', + '00:02.0 0300: 1002:0163'] + pxpress_noconf = XorgDriverHandler(self.backend, 'vanilla3d3', + 'mesa-vanilla3', 'v3d3', + 'vanilla3', + name='Vanilla accelerated graphics driver3', + fake_pcilist=pcilist_pxpress_noconf, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(pxpress_noconf.has_hybrid_graphics) + self.assert_(pxpress_noconf.supports_hybrid_graphics) + + finally: + chroot.remove() + + def test_has_hybrid_graphics_chroot_5(self): + '''_has_hybrid_gfx() for lts-trusty stack''' + chroot = aptdaemon.test.Chroot() + try: + chroot.setup() + chroot.add_test_repository() + archive = gen_fakearchive() + archive.create_deb('xserver-xorg-core', + extra_tags={'Provides': + 'xorg-video-abi-11, xserver-xorg-core'}) + archive.create_deb('xserver-xorg-core-lts-quantal', + extra_tags={'Provides': + 'xorg-video-abi-13, xserver-xorg-core'}) + archive.create_deb('xserver-xorg-core-lts-raring', + extra_tags={'Provides': + 'xorg-video-abi-13, xserver-xorg-core'}) + archive.create_deb('xserver-xorg-core-lts-saucy', + extra_tags={'Provides': + 'xorg-video-abi-14, xserver-xorg-core'}) + archive.create_deb('xserver-xorg-core-lts-trusty', + extra_tags={'Provides': + 'xorg-video-abi-15, xserver-xorg-core'}) + archive.create_deb('linux-image-generic-lts-raring') + archive.create_deb('linux-image-generic-lts-saucy') + archive.create_deb('linux-image-generic-lts-trusty') + + chroot.add_repository(archive.path, True, False) + + cache = apt.Cache(rootdir=chroot.path) + + # Install kernel packages + for pkg in ('xserver-xorg-core-lts-trusty', + 'linux-image-generic-lts-trusty'): + cache[pkg].mark_install() + + # Set fake kernel and X ABI + kernel = '3.13.0' + x_abi = '15' + + # Single GPU + pcilist_single = ['00:01.0 0300: 8086:0162 (rev 09)'] + + single = XorgDriverHandler(self.backend, 'vanilla3d0', + 'mesa-vanilla0', 'v3d0', + 'vanilla0', + name='Vanilla accelerated graphics driver0', + fake_pcilist=pcilist_single, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assertFalse(single.has_hybrid_graphics) + self.assert_(single.supports_hybrid_graphics) + + # Completely Unsupported GPU vendors + pcilist_multi = ['00:01.0 0300: 1111:0162 (rev 09)', + '00:02.0 0300: 1022:0163'] + + multi = XorgDriverHandler(self.backend, 'vanilla3d00', + 'mesa-vanilla00', 'v3d00', + 'vanilla00', + name='Vanilla accelerated graphics driver00', + fake_pcilist=pcilist_multi, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assertFalse(multi.has_hybrid_graphics) + self.assert_(multi.supports_hybrid_graphics) + + # Intel + Nvidia + pcilist_prime = ['00:01.0 0300: 8086:0162 (rev 09)', + '00:02.0 0300: 10de:0163'] + + prime = XorgDriverHandler(self.backend, 'vanilla3d1', + 'mesa-vanilla1', 'v3d1', + 'vanilla1', + name='Vanilla accelerated graphics driver1', + fake_pcilist=pcilist_prime, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(prime.has_hybrid_graphics) + self.assert_(prime.supports_hybrid_graphics) + + # Intel + AMD + pcilist_pxpress = ['00:01.0 0300: 8086:0162 (rev 09)', + '00:02.0 0300: 1002:0163'] + pxpress = XorgDriverHandler(self.backend, 'vanilla3d2', + 'mesa-vanilla2', 'v3d2', + 'vanilla2', + name='Vanilla accelerated graphics driver2', + fake_pcilist=pcilist_pxpress, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(pxpress.has_hybrid_graphics) + self.assert_(pxpress.supports_hybrid_graphics) + + # AMD + AMD + pcilist_pxpress_noconf = ['00:01.0 0300: 1002:0162 (rev 09)', + '00:02.0 0300: 1002:0163'] + pxpress_noconf = XorgDriverHandler(self.backend, 'vanilla3d3', + 'mesa-vanilla3', 'v3d3', + 'vanilla3', + name='Vanilla accelerated graphics driver3', + fake_pcilist=pcilist_pxpress_noconf, + fake_kernel=kernel, fake_xabi=x_abi, + fake_inst_func=is_installed, + fake_apt_cache=cache) + + self.assert_(pxpress_noconf.has_hybrid_graphics) + self.assert_(pxpress_noconf.supports_hybrid_graphics) + + finally: + chroot.remove() + + +if __name__ == '__main__': + unittest.main()