--- /dev/null
- Bumblebee in Debian defaults to using the primus backend, not because we wish
- to diverge from upstream, but simply because virtualgl and libjpeg-turbo are
- not yet packaged. libjpeg-turbo is currently blocked by a number of technical
- and/or legal issues in Debian; see http://bugs.debian.org/612341.
-
- Bumblebee in Ubuntu also defaults to using the primus backend, because
- virtualgl has not yet been packaged for Ubuntu proper. It is however easy to
- switch to using virtualgl by using upstream's PPAs. Follow the instructions at:
+bumblebee for Debian/Ubuntu
+---------------------------
+
- -- Vincent Cheng <Vincentc1208@gmail.com> Wed, 27 Feb 2013 01:07:57 -0800
++Post-installation instructions:
++-------------------------------
++
++You must add your user to the bumblebee group in order to use optirun or
++primusrun, i.e.
++
++ $ sudo adduser $USER bumblebee
++
++where $USER corresponds to your username. Don't forget to log out and log back
++in for this to take effect.
++
++If you have sudo configured for your current user, i.e. your user is a member
++of the sudo group, this step is not needed (the bumblebee package postinst
++script takes care of adding sudo users to the bumblebee group automatically).
++To clarify, sudo is not needed to use bumblebee; it simply makes adding your
++user to the bumblebee group unnecessary.
++
++This step is unnecessary for Ubuntu users since sudo comes pre-configured and
++ready to be used by default (for user accounts created during install).
++
++To test whether bumblebee has been configured correctly, try running the
++glxgears demo (you must first install mesa-utils):
++
++ $ optirun glxgears -info
++
++
++Primus vs. VirtualGL:
++---------------------
++
++Bumblebee in Debian and Ubuntu defaults to using the primus backend, because
++virtualgl has not yet been packaged for Debian/Ubuntu proper. For Ubuntu users,
++it is however easy to switch to using virtualgl by using upstream's PPAs.
++Follow the instructions at:
+https://launchpad.net/~bumblebee/+archive/stable
+
++
++Common issues:
++--------------
++
++- If optirun returns the following error:
++[ERROR]Cannot access secondary GPU - error: Could not load GPU driver
++
++You must edit /etc/bumblebee/bumblebee.conf using your preferred editor as
++root, and change "KernelDriver=nvidia" to "KernelDriver=nvidia-current",
++then restart the bumblebee daemon, i.e.
++
++ $ sudo service bumblebeed restart
++
++(Refer to https://bugs.debian.org/717687 for a brief explanation.)
++
++- If optirun returns the following error:
++[ERROR]Cannot access secondary GPU - error: [XORG] (EE) No devices detected
++
++You may have to set the BusID manually, in /etc/bumblebee/xorg.conf.nvidia.
++To get the BusID, run lspci | egrep 'VGA|3D' in a terminal. Refer to the
++comments in that file for further instructions.
++
++- If optirun returns the following error:
++[ERROR]Cannot access secondary GPU - error: [XORG] (EE) /dev/dri/card0:
++failed to set DRM interface version 1.4: Permission denied
++
++You have to append the following section to /etc/bumblebee/xorg.conf.nvidia:
++
++Section "Screen"
++ Identifier "Default Screen"
++ Device "DiscreteNvidia"
++EndSection
++
++Also refer to https://bugs.debian.org/756522 for a brief explanation.
++
++- If optirun errors out and dmesg reports that the GPU has "fallen off the bus"
++or "nvidia_frontend_open: minor 0, module->open() failed, error -5" on Linux
++>= 3.10 and < 3.19, either stick with an older kernel version (<= 3.9) or
++upgrade to > 3.19, or add rcutree.rcu_idle_gp_delay=1 to your grub command line
++(in /etc/default/grub, then run update-grub and reboot) as a workaround.
++
++This is a known problem upstream and suspected to be an issue with the
++proprietary nvidia driver. Refer to Bumblebee github issue #455 and #615,
++https://github.com/Bumblebee-Project/Bumblebee/issues/455 and
++https://github.com/Bumblebee-Project/Bumblebee/issues/615.
++
++A more up-to-date list of common issues can be found on the Debian/Ubuntu wiki
++pages relating to bumblebee, i.e.:
++
++https://wiki.debian.org/Bumblebee
++https://wiki.ubuntu.com/Bumblebee
++
++A more comprehensive list is available upstream:
++
++https://github.com/Bumblebee-Project/Bumblebee/wiki/Troubleshooting
++
++
++ -- Vincent Cheng <vcheng@debian.org> Sat, 25 Oct 2014 10:13:42 -0700
--- /dev/null
--- /dev/null
++#!/bin/sh
++set -e
++
++case "$1" in
++ configure)
++ # Repair GL on the intel display
++ update-alternatives --force --set \
++ glx /usr/lib/nvidia/bumblebee || true
++ dpkg-trigger register-glx-alternative-nvidia
++
++ # this has a chance of crashing the machine with mainline kernels...
++ grep -q '^nouveau ' /proc/modules && rmmod nouveau || true
++ if [ -e "/etc/init/bumblebeed.conf" ]; then
++ invoke-rc.d bumblebeed restart || true
++ fi
++ ;;
++esac
++
++#DEBHELPER#
--- /dev/null
--- /dev/null
++#!/bin/sh
++set -e
++
++xconffile=/etc/bumblebee/xorg.conf.nvidia
++
++case "$1" in
++ configure)
++ # Repair GL on the intel display
++ for arch in x86_64-linux-gnu i386-linux-gnu; do
++ update-alternatives --force --set \
++ ${arch}_gl_conf /usr/lib/$arch/mesa/ld.so.conf 2>/dev/null || true
++ done
++
++ # assume first device to be discrete in nvidia/nvidia
++ busid=$(lspci -d10de: -nn | grep '\[030[02]\]' | cut -d' ' -f1 | tr . : | head -1)
++
++ if [ -z "$busid" ]; then
++ echo "No Nvidia card found. If you really have an Optimus system,"
++ echo "try selecting the Optimus setup in BIOS and run:"
++ echo "sudo dpkg-reconfigure bumblebee-nvidia"
++ else
++ echo "Selecting $busid as discrete nvidia card. If this is incorrect,"
++ echo "edit the BusID line in $xconffile"
++ sed -i $xconffile -r -e "s/^([\t ]*)#([\t ]*BusID[\t ]*)\"[^\"]*\"$/\\1 \\2\"PCI\:$busid\"/"
++ fi
++
++ ldconfig
++ # this has a chance of crashing the machine with mainline kernels...
++ grep -q '^nouveau ' /proc/modules && rmmod nouveau || true
++ if [ -e "/etc/init/bumblebeed.conf" ]; then
++ invoke-rc.d bumblebeed restart || true
++ fi
++ ;;
++esac
++
++#DEBHELPER#
--- /dev/null
--- /dev/null
++#!/bin/sh
++set -e
++
++case "$1" in
++ remove|abort-install)
++ # Restore the alternatives in case bumblebee is installed on a
++ # non-Optimus system that requires the nvidia driver
++ update-alternatives --force --auto glx 2>/dev/null || true
++ dpkg-trigger register-glx-alternative-nvidia
++ ;;
++esac
++
++#DEBHELPER#
--- /dev/null
--- /dev/null
++#!/bin/sh
++set -e
++
++case "$1" in
++ remove|abort-install)
++ # Restore the alternatives in case bumblebee is installed on a
++ # non-Optimus system that requires the nvidia driver
++ for arch in x86_64-linux-gnu i386-linux-gnu; do
++ update-alternatives --force --auto ${arch}_gl_conf 2>/dev/null || true
++ done
++
++ ldconfig
++ ;;
++esac
++
++#DEBHELPER#
--- /dev/null
- description "Bumblebee supporting nVidia Optimus cards"
+# Upstart job for Bumblebee daemon
+
++description "Bumblebee supporting NVIDIA Optimus cards"
+author "Lekensteyn <lekensteyn@gmail.com>"
+
+# XXX: do we need to stop before / after a graphical DE like kdm?
+start on (login-session-start or desktop-session-start)
+stop on (desktop-shutdown)
+
+# restart in case it crashed for some reason
+respawn
+
+script
+ libopts=
+
+ # When the user installs a nvidia package that is unknown,
+ # ignore the paths in bumblebee.conf and use detected ones
+ if ! driver=$(grep -Po '^Driver=\K.*' /etc/bumblebee/bumblebee.conf) \
+ || [ -z "$driver" ] || [ "$driver" = "nvidia" ]; then
+ # find LibraryPath setting of nvidia section
+ libpath=$(awk -F[=:] '/^\[driver-nvidia\]/{d=1}/^LibraryPath=/{if(d){print $2;exit}}' \
+ /etc/bumblebee/bumblebee.conf) || true
+
+ # pick the first available nvidia installation (not necessary
+ # the latest, e.g. nvidia-current over nvidia-experimental-310)
+ pkgname=$(ls -1d /usr/lib/nvidia*/libGL.so | cut -d/ -f4 | head -1) || true
+
+ # When the default library path does not contain nvidia drivers,
+ # it is possibly not installed. If no driver is installed (no
+ # /usr/lib/nvidia-*), assume that the auto-detection will use
+ # nouveau instead and do not override paths.
+ if [ ! -e "$libpath/libGL.so" -a -n "$pkgname" ] && \
+ modprobe -nq "$pkgname"; then
+ # assume nvidia driver even if nouveau is already loaded
+ libopts="$libopts --driver nvidia"
+ libopts="$libopts --driver-module $pkgname"
+ libopts="$libopts --ldpath /usr/lib/$pkgname:/usr/lib32/$pkgname"
+ libopts="$libopts --module-path /usr/lib/$pkgname/xorg,/usr/lib/xorg/modules"
+ fi
+ fi
+
+ # don't use --daemon as Upstart gets confused by that.
+ exec '/usr/sbin/bumblebeed' --use-syslog $libopts
+end script
--- /dev/null
--- /dev/null
++# This file is installed by bumblebee, do NOT edit!
++# to be used by kmod / module-init-tools, and installed in /etc/modprobe.d/
++# or equivalent
++
++# do not automatically load nouveau as it may prevent nvidia from loading
++blacklist nouveau
++# do not automatically load nvidia as it's unloaded anyway when bumblebeed
++# starts and may fail bumblebeed to disable the card in a race condition.
++# Debian
++blacklist nvidia
++blacklist nvidia-current
++blacklist nvidia-legacy-304xx
++blacklist nvidia-legacy-340xx
++# Ubuntu
++blacklist nvidia
++blacklist nvidia-current
++blacklist nvidia-current-updates
++# 304
++blacklist nvidia-304
++blacklist nvidia-304-updates
++blacklist nvidia-experimental-304
++# 310
++blacklist nvidia-310
++blacklist nvidia-310-updates
++blacklist nvidia-experimental-310
++# 313
++blacklist nvidia-313
++blacklist nvidia-313-updates
++blacklist nvidia-experimental-313
++# 319
++blacklist nvidia-319
++blacklist nvidia-319-updates
++blacklist nvidia-experimental-319
++# 325
++blacklist nvidia-325
++blacklist nvidia-325-updates
++blacklist nvidia-experimental-325
++# 331
++blacklist nvidia-331
++blacklist nvidia-331-updates
++blacklist nvidia-experimental-331
++# 334
++blacklist nvidia-334
++blacklist nvidia-334-updates
++blacklist nvidia-experimental-334
++# 337
++blacklist nvidia-337
++blacklist nvidia-337-updates
++blacklist nvidia-experimental-337
++# 340
++blacklist nvidia-340
++blacklist nvidia-340-updates
++blacklist nvidia-experimental-340
++# 343
++blacklist nvidia-343
++blacklist nvidia-343-updates
++blacklist nvidia-experimental-343
++# 346
++blacklist nvidia-346
++blacklist nvidia-346-updates
++blacklist nvidia-experimental-346
++# 349
++blacklist nvidia-349
++blacklist nvidia-349-updates
++blacklist nvidia-experimental-349
++# 352
++blacklist nvidia-352
++blacklist nvidia-352-updates
++blacklist nvidia-experimental-352
++# 355
++blacklist nvidia-355
++blacklist nvidia-355-updates
++blacklist nvidia-experimental-355
++# 358
++blacklist nvidia-358
++blacklist nvidia-358-updates
++blacklist nvidia-experimental-358
++# 361
++blacklist nvidia-361
++blacklist nvidia-361-updates
++blacklist nvidia-experimental-361
++# 364
++blacklist nvidia-364
++blacklist nvidia-364-updates
++blacklist nvidia-experimental-364
++# 367
++blacklist nvidia-367
++blacklist nvidia-367-updates
++blacklist nvidia-experimental-367
--- /dev/null
++debian/bumblebee.conf usr/share/bumblebee/modprobe.d/
+debian/bumblebee/etc/bumblebee/* usr/share/bumblebee/default-conf/
+scripts/systemd/bumblebeed.service lib/systemd/system/
--- /dev/null
--- /dev/null
++rm_conffile /etc/modprobe.d/bumblebee.conf 3.2.1-6~
++rm_conffile /etc/bash_completion.d/bumblebee 3.2.1-8~
--- /dev/null
- groupadd $BB_GROUP
+#!/bin/sh
+# postinst script for bumblebee
+#
+# see: dh_installdeb(1)
+
+set -e
+
++xconffile=/etc/bumblebee/xorg.conf.nouveau
++
+# group that allows users to use Bumblebee
+BB_GROUP=bumblebee
+
+# add members of these groups automatically to group "bumblebee" for new
+# installations
+USE_GROUPS='adm sudo admin'
+
+case "$1" in
+ configure)
+ # only add a group and members if the configured group does match the
+ # default group and if the group is missing
+ if grep -qx ServerGroup=$BB_GROUP /etc/bumblebee/bumblebee.conf &&
+ ! getent group $BB_GROUP > /dev/null; then
- # rebuild initial ramdisk to include blacklist
- update-initramfs -u
- ;;
++ groupadd --system $BB_GROUP
+ users=$(getent group $USE_GROUPS | cut -d: -f4 | tr , '\n' | sort -u)
+ echo "Adding members from group(s) '$USE_GROUPS' to '$BB_GROUP':"
+ echo $users
+ for user in $users; do
+ gpasswd -a $user $BB_GROUP
+ done
+ fi
- abort-upgrade|abort-remove|abort-deconfigure)
- ;;
+
- *)
- echo "postinst called with unknown argument \`$1'" >&2
- exit 1
+
-
- exit 0
++ # Raring specific issue
++ # Also, do not rely solely on dpkg-vendor (see LP: #1061769)
++ if (which dpkg-vendor >/dev/null && dpkg-vendor --derives-from Ubuntu) || \
++ [ -e /etc/dpkg/origins/ubuntu ]; then
++ # assume first device to be discrete in nvidia/nvidia
++ busid=$(lspci -d10de: -nn | grep '\[030[02]\]' | cut -d' ' -f1 | tr . : | head -1)
++ if [ -z "$busid" ]; then
++ echo "No Nvidia card found. If you really have an Optimus system,"
++ echo "try selecting the Optimus setup in BIOS and run:"
++ echo "sudo dpkg-reconfigure bumblebee"
++ else
++ echo "Selecting $busid as discrete nvidia card. If this is incorrect,"
++ echo "edit the BusID line in $xconffile ."
++ sed -i $xconffile -r -e "s/^([\t ]*)#([\t ]*BusID[\t ]*)\"[^\"]*\"$/\\1 \\2\"PCI\:$busid\"/"
++ fi
++
++ # Only for 3.2.1, remove busid.conf if still present.
++ if [ -e /etc/bumblebee/xorg.conf.d/busid.conf ]; then
++ echo "Deleting old /etc/bumblebee/xorg.conf.d/busid.conf"
++ rm /etc/bumblebee/xorg.conf.d/busid.conf
++ fi
++ fi
++
++ # Do not treat /etc/modprobe.d/bumblebee-nvidia.conf as a conffile
++ # LP: #1242785, https://github.com/Bumblebee-Project/Bumblebee/issues/525
++ cp -f /usr/share/bumblebee/modprobe.d/bumblebee.conf /etc/modprobe.d/bumblebee.conf
++
+ ;;
++ triggered)
++ case "$2" in
++ restart-bumblebeed)
++ # Trigger a restart of the bumblebee service, only if it's already running
++
++ if [ -d /run/systemd/system ]; then
++ if deb-systemd-invoke is-active bumblebeed.service > /dev/null 2>&1; then
++ deb-systemd-invoke restart bumblebeed.service || exit $?
++ fi
++ elif [ -x "/etc/init.d/bumblebeed" ]; then
++ if invoke-rc.d bumblebeed status > /dev/null 2>&1; then
++ invoke-rc.d bumblebeed restart || exit $?
++ fi
++ fi
++ ;;
++ esac
+esac
+
+#DEBHELPER#
--- /dev/null
-
+#!/bin/sh
+# postrm script for bumblebee
+#
+# see: dh_installdeb(1)
+
+set -e
+
- ;;
- remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
- ;;
+case "$1" in
+ purge)
+ groupdel bumblebee || true
+ # keep this as old versions did not mark these files as conffiles
+ for file in bumblebee.conf xorg.conf.nvidia xorg.conf.nouveau; do
+ rm -f /etc/bumblebee/$file
+ done
- *)
- echo "postrm called with unknown argument \`$1'" >&2
- exit 1
+
- esac
+ ;;
- case "$1" in
- purge|remove|abort-install)
- # update initial ramdisk to skip blacklist
- update-initramfs -u
++ remove)
++ # Do not treat /etc/modprobe.d/bumblebee-nvidia.conf as a conffile
++ # LP: #1242785, https://github.com/Bumblebee-Project/Bumblebee/issues/525
++ rm -f /etc/modprobe.d/bumblebee.conf
+
-
- exit 0
+ ;;
+esac
+
+#DEBHELPER#
--- /dev/null
--- /dev/null
++activate update-initramfs
++interest restart-bumblebeed
--- /dev/null
- bumblebee (3.1-1) experimental; urgency=low
++bumblebee (3.2.1-14) unstable; urgency=medium
+
- * New upstream release.
- * Upload to experimental.
++ * Add dependency to lsb-base (>= 3.0-6) to fix Lintian Error
++ * Add blacklist and dependency for nvidia-367*
+
- -- Vincent Cheng <Vincentc1208@gmail.com> Tue, 09 Apr 2013 19:59:13 -0700
++ -- Luca Boccassi <luca.boccassi@gmail.com> Tue, 24 Jan 2017 14:20:27 +0000
+
- bumblebee (3.0.1-1) unstable; urgency=low
++bumblebee (3.2.1-13) unstable; urgency=medium
++
++ * Backport libkmod.patch from upstream develop branch and add build-dep
++ on libkmod-dev. Definitively fixes all issues with multiple kernel
++ modules loading/unloading.
++ * Remove Ubuntu modprobe hack from debian/rules
++ * Add restart-bumblebeed dpkg-trigger, to be used by update-glx when
++ changing the provider of libglx.so and the nvidia kernel module.
++
++ -- Luca Boccassi <luca.boccassi@gmail.com> Sat, 11 Jun 2016 12:49:56 +0100
++
++bumblebee (3.2.1-12) unstable; urgency=medium
++
++ [ Luca Boccassi ]
++ * Set nvidia lib directory to /usr/lib/nvidia/nvidia to solve
++ incompatibility between Bumblebee and concurrent installations of
++ current plus legacyYYYxx Nvidia driver series on the same system.
++ * Add ignore-systemd-logind-noise.patch and
++ ignore-failure-to-set-DRM-interface.patch to ignore red herrings.
++ (Closes: #822665)
++ * Set Ubuntu default kernel driver to nvidia, which is provided as a
++ modprobe alias by the nvidia-XYZ packages.
++
++ [ Vincent Cheng ]
++ * Use dh_strip --dbgsym-migration to cleanly migrate from old-style dbg
++ packages to autogenerated dbgsym packages.
++
++ -- Luca Boccassi <luca.boccassi@gmail.com> Wed, 18 May 2016 00:17:59 +0100
++
++bumblebee (3.2.1-11) unstable; urgency=medium
++
++ [ Andreas Beckmann ]
++ * Team upload.
++ * Drop -dbg package in favor of autogenerated -dbgsym packages.
++ * Update Vcs-* URLs.
++ * Update Standards version to 3.9.8, no changes required.
++ * Drop obsolete Debian NVIDIA package alternatives.
++ * Add support for the 304xx/340xx legacy driver packages available in
++ Debian. (Closes: #802479, #717687)
++ * Use vendor-specific maintainer scripts.
++ * Add Luca Boccassi to Uploaders.
++
++ [ Luca Boccassi ]
++ * Mention kernel cmdline workaround for nvidia module load issues on
++ some hardware, and related upstream tickets, in README.Debian.
++ (Closes: #822330)
++ * Run dh --with autoreconf to regenerate configure, Makefile, etc.
++ * Add xorg-binary-config.patch to allow changing the Xorg binary in
++ bumblebee.conf.
++ * Add dependency on xserver-xorg-core >= 1.18 and set default binary
++ to /usr/lib/xorg/Xorg in order to support xserver-xorg-legacy.
++ (Closes: #815888)
++ * Add 358, 361, 364 in alternate dep and blacklist.
++ * Install modprobe blacklist in /usr/share/bumblebee/modprobe.d/ to avoid
++ clash with the daemon config file.
++ * Delete /etc/modprobe.d/bumblebee.conf already when bumblebee is removed,
++ to not keep the blacklists active until it is purged. (LP: #1242785)
++
++ -- Andreas Beckmann <anbe@debian.org> Sat, 07 May 2016 23:42:16 +0200
++
++bumblebee (3.2.1-10) unstable; urgency=medium
++
++ * Team upload.
++ * Blacklist the nvidia legacy kernel modules available in Debian.
++ * Use the new /usr/lib/nvidia/bumblebee glx alternative.
++ (Closes: #802310, #802245)
++ * Add Depends: glx-alternative-nvidia (>= 0.6.92) (only for Debian).
++ * Trigger the glx-alternative-nvidia package after updating the alternative.
++ * fix-typos.patch: New, fix some typos noticed by Lintian.
++
++ -- Andreas Beckmann <anbe@debian.org> Wed, 21 Oct 2015 02:14:27 +0200
++
++bumblebee (3.2.1-9) unstable; urgency=medium
++
++ [ Luca Boccassi ]
++ * Add modprobe remove in bumblebee.conf on Ubuntu to fix timeout when
++ unloading nvidia-uvm.
++
++ [ Vincent Cheng ]
++ * Add nvidia-355 in alternate dep and blacklist.
++
++ -- Vincent Cheng <vcheng@debian.org> Fri, 14 Aug 2015 23:58:12 -0700
++
++bumblebee (3.2.1-8) unstable; urgency=medium
++
++ [ Luca Boccassi ]
++ * Cherry-pick patch for modprobe -r instead of rmmod (Closes: #793389)
++ * Add nvidia-346, 349, and 352 in alternate dep and blacklist.
++ (LP: #1511560)
++
++ [ Vincent Cheng ]
++ * Move bumblebee bash-completion file from obsolete /etc/bash_completion.d/
++ to /usr/share/bash-completion/completions/.
++
++ -- Vincent Cheng <vcheng@debian.org> Sat, 25 Jul 2015 19:28:48 -0700
++
++bumblebee (3.2.1-7) unstable; urgency=medium
++
++ * Move conffile handling introduced in 3.2.1-6 from bumblebee-nvidia
++ to bumblebee.
++
++ -- Vincent Cheng <vcheng@debian.org> Sat, 25 Oct 2014 17:04:28 -0700
++
++bumblebee (3.2.1-6) unstable; urgency=medium
++
++ * Build with CONF_DRIVER_MODULE_NVIDIA=nvidia-current instead of nvidia.
++ * Stop treating /etc/modprobe.d/bumblebee.conf as a conffile and remove it
++ when removing bumblebee, not just when purging it. (LP: #1242785)
++ - Pre-Depends on dpkg >= 1.15.7.2 for dpkg-maintscript-helper rm_conffile.
++ * Add patches: fix-device-detection.patch, ignore-error-on-X-shutdown.patch,
++ cherry-picked from upstream git. (LP: #1230008)
++ * Allow more nvidia flavours to satisfy bumblebee-nvidia's dependencies
++ (relevant only for Ubuntu).
++ * Update debian/README.Debian.
++ * Update email address.
++ * Update Standards version to 3.9.6, no changes required.
++
++ -- Vincent Cheng <vcheng@debian.org> Sat, 25 Oct 2014 10:13:42 -0700
++
++bumblebee (3.2.1-5) unstable; urgency=medium
++
++ * Allow more nvidia flavours to satisfy bumblebee-nvidia's dependencies
++ (relevant only for Ubuntu). (LP: #1261180)
++ * Update Standards version to 3.9.5, no changes required.
++
++ -- Vincent Cheng <Vincentc1208@gmail.com> Mon, 06 Jan 2014 01:24:33 -0800
++
++bumblebee (3.2.1-4) unstable; urgency=low
++
++ * Use dh-systemd (for systemd-specific additions to maintscripts).
++ (Closes: #715270)
++ * Add bumblebee group as system group (gid in between 100-999) instead
++ of a regular group in postinst. (Closes: #718772)
++
++ -- Vincent Cheng <Vincentc1208@gmail.com> Tue, 20 Aug 2013 02:35:34 -0700
++
++bumblebee (3.2.1-3) unstable; urgency=low
++
++ * Append /usr/lib/primus to CONF_PRIMUS_LD_PATH in d/rules to ease
++ pre-multiarch backports. (Closes: #712665)
++ * Have bumblebee depend on bbswitch-dkms | bbswitch-source, and
++ bumblebee-nvidia depend on all possible m-a built nvidia modules.
++ * Add support for nvidia-325 packaged in Ubuntu (not relevant for Debian).
++
++ -- Vincent Cheng <Vincentc1208@gmail.com> Thu, 11 Jul 2013 01:18:07 -0700
++
++bumblebee (3.2.1-2) unstable; urgency=low
++
++ * Allow more nvidia flavours to satisfy bumblebee-nvidia's dependencies
++ (relevant for Ubuntu).
++
++ -- Vincent Cheng <Vincentc1208@gmail.com> Wed, 29 May 2013 01:45:35 -0700
++
++bumblebee (3.2.1-1) unstable; urgency=low
+
+ [ Aron Xu ]
+ * Initial release (Closes: #659440).
+ * Thanks to Peter Lekensteyn and Bruno Pagani, most stuff taken from the
+ packaging for Ubuntu PPA.
+
+ [ Vincent Cheng ]
+ * Thanks to Igor Urazov for lots of the Debian-specific portions of the
+ packaging.
+
- -- Aron Xu <aron@debian.org> Mon, 14 Jan 2013 22:16:25 +0800
++ -- Vincent Cheng <Vincentc1208@gmail.com> Fri, 03 May 2013 03:04:38 -0700
--- /dev/null
- Priority: optional
+Source: bumblebee
+Section: utils
- Uploaders:
- Aron Xu <aron@debian.org>,
- Vincent Cheng <Vincentc1208@gmail.com>,
- Yunqiang Su <wzssyqa@gmail.com>
- Build-Depends: debhelper (>= 9), libbsd-dev (>= 0.2.0), pkg-config,
- libx11-dev, libglib2.0-dev, help2man
- Standards-Version: 3.9.4
++Priority: extra
+Maintainer: Debian NVIDIA Maintainers <pkg-nvidia-devel@lists.alioth.debian.org>
- Vcs-Git: git://anonscm.debian.org/pkg-nvidia/bumblebee.git
- Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-nvidia/bumblebee.git
++Uploaders:
++ Aron Xu <aron@debian.org>,
++ Vincent Cheng <vcheng@debian.org>,
++ Yunqiang Su <wzssyqa@gmail.com>,
++ Luca Boccassi <luca.boccassi@gmail.com>,
++Build-Depends:
++ debhelper (>= 9),
++ dh-autoreconf,
++ dh-systemd (>= 1.4),
++ help2man,
++ libbsd-dev (>= 0.2.0),
++ libglib2.0-dev,
++ libx11-dev,
++ pkg-config,
++ libkmod-dev,
++Standards-Version: 3.9.8
+Homepage: https://launchpad.net/~bumblebee
- Depends: ${shlibs:Depends}, ${misc:Depends}, bbswitch-dkms
- Recommends: virtualgl | primus
- Suggests: bumblebee-nvidia (= ${binary:Version})
++Vcs-Git: https://anonscm.debian.org/git/pkg-nvidia/bumblebee.git
++Vcs-Browser: https://anonscm.debian.org/cgit/pkg-nvidia/bumblebee.git
+
+Package: bumblebee
+Architecture: linux-any
- GNU/Linux systems. These laptops are built in such a way that the NVIDIA
++Pre-Depends:
++ dpkg (>= 1.15.7.2),
++Depends:
++ bbswitch-dkms | bbswitch-source,
++ lsb-base (>= 3.0-6),
++ xserver-xorg-core (>= 2:1.18),
++ ${misc:Depends},
++ ${shlibs:Depends},
++Recommends:
++ virtualgl | primus,
++Suggests:
++ bumblebee-nvidia (= ${binary:Version}),
+Description: NVIDIA Optimus support for Linux
+ Bumblebee is an effort to make NVIDIA Optimus enabled laptops work in
- It disables the discrete graphics card if no client is detected, and start
++ GNU/Linux systems. These laptops are built in such a way that the NVIDIA
+ graphics card can be used on demand so that battery life is improved and
+ temperature is kept low.
+ .
- runs on the intergrated graphics. The ability to use discrete graphics
++ It disables the discrete graphics card if no client is detected, and starts
+ an X server making use of NVIDIA card if requested then let software GL
+ implementations (such as VirtualGL) copy frames to the visible display that
- Depends: ${shlibs:Depends}, ${misc:Depends}, bumblebee (= ${binary:Version}),
- nvidia-glx | nvidia-304 | nvidia-304-updates | nvidia-experimental-304 |
++ runs on the integrated graphics. The ability to use discrete graphics
+ depends on the driver: open source nouveau and proprietary nvidia.
+
+Package: bumblebee-nvidia
+Architecture: amd64 i386
+Section: contrib/utils
- nvidia-313 | nvidia-313-updates | nvidia-experimental-313
- Recommends: virtualgl | primus-nvidia
++Depends:
++ bumblebee (= ${binary:Version}),
++ ${misc:Depends},
++ ${nvidia:Depends},
++# proprietary NVIDIA packages in Debian
++ nvidia-driver |
++ nvidia-legacy-340xx-driver |
++ nvidia-legacy-304xx-driver |
++ nvidia-kernel-dkms |
++ nvidia-legacy-340xx-kernel-dkms |
++ nvidia-legacy-304xx-kernel-dkms |
++# proprietary NVIDIA packages in Ubuntu
++ nvidia | nvidia-current | nvidia-current-updates | nvidia-driver-binary |
++ nvidia-304 | nvidia-304-updates | nvidia-experimental-304 |
+ nvidia-310 | nvidia-310-updates | nvidia-experimental-310 |
-
- Package: bumblebee-dbg
- Priority: extra
- Architecture: linux-any
- Section: debug
- Depends: ${misc:Depends}, bumblebee (= ${binary:Version})
- Description: NVIDIA Optimus support - debugging symbols
- This package contains the debugging symbols for bumblebee.
++ nvidia-313 | nvidia-313-updates | nvidia-experimental-313 |
++ nvidia-319 | nvidia-319-updates | nvidia-experimental-319 |
++ nvidia-325 | nvidia-325-updates | nvidia-experimental-325 |
++ nvidia-331 | nvidia-331-updates | nvidia-experimental-331 |
++ nvidia-334 | nvidia-334-updates | nvidia-experimental-334 |
++ nvidia-337 | nvidia-337-updates | nvidia-experimental-337 |
++ nvidia-340 | nvidia-340-updates | nvidia-experimental-340 |
++ nvidia-343 | nvidia-343-updates | nvidia-experimental-343 |
++ nvidia-346 | nvidia-346-updates | nvidia-experimental-346 |
++ nvidia-349 | nvidia-349-updates | nvidia-experimental-349 |
++ nvidia-352 | nvidia-352-updates | nvidia-experimental-352 |
++ nvidia-355 | nvidia-355-updates | nvidia-experimental-355 |
++ nvidia-358 | nvidia-358-updates | nvidia-experimental-358 |
++ nvidia-361 | nvidia-361-updates | nvidia-experimental-361 |
++ nvidia-364 | nvidia-364-updates | nvidia-experimental-364 |
++ nvidia-367 | nvidia-367-updates | nvidia-experimental-367
+Description: NVIDIA Optimus support using the proprietary NVIDIA driver
+ This metapackage ensures that the proprietary NVIDIA driver is installed in a
+ way such that 3D acceleration does not break. It does so by configuring the
+ OpenGL library path to use the Mesa graphics library.
--- /dev/null
- 2013 Vincent Cheng <Vincentc1208@gmail.com>
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: bumblebee
+Source: https://github.com/Bumblebee-Project/Bumblebee
+
+Files: *
+Copyright: 2011-2013 Bumblebee Project <bumblebee@lists.launchpad.net>
+License: GPL-3.0+
+
+Files: debian/*
+Copyright: 2011-2013 Peter Lekensteyn <lekensteyn@gmail.com>
+ 2011-2013 Bruno Pagani <bruno.n.pagani@gmail.com>
+ 2012 Igor Urazov <z0rc3r@gmail.com>
+ 2013 Aron Xu <aron@debian.org>
++ 2013 Vincent Cheng <vcheng@debian.org>
+License: GPL-3.0+
+
+License: GPL-3.0+
+ 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 3 of the License, or
+ (at your option) any later version.
+ .
+ This package 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, see <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU General
+ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
--- /dev/null
--- /dev/null
++Description: Fix detection of devices on bus numbers larger than 9
++Origin: upstream, https://github.com/Bumblebee-Project/Bumblebee/commit/2073f8537412aa47755eb6f3f22a114403e5285b
++Bug: https://github.com/Bumblebee-Project/Bumblebee/issues/573
++
++--- a/src/bbsecondary.c
+++++ b/src/bbsecondary.c
++@@ -138,7 +138,7 @@
++ if (!bb_is_running(bb_status.x_pid)) {
++ char pci_id[12];
++ static char *x_conf_file;
++- snprintf(pci_id, 12, "PCI:%02x:%02x:%o", pci_bus_id_discrete->bus,
+++ snprintf(pci_id, 12, "PCI:%02d:%02d:%o", pci_bus_id_discrete->bus,
++ pci_bus_id_discrete->slot, pci_bus_id_discrete->func);
++ if (!x_conf_file) {
++ x_conf_file = xorg_path_w_driver(bb_config.x_conf_file, bb_config.driver);
--- /dev/null
--- /dev/null
++Author: Andreas Beckmann <anbe@debian.org>
++Description: fix some typos found by Lintian
++
++--- a/src/bbconfig.c
+++++ b/src/bbconfig.c
++@@ -201,11 +201,11 @@ void print_usage(int exit_val) {
++ }
++ /* common options */
++ fputs("\
++- -q, --quiet, --silent supresses all logging messages\n\
+++ -q, --quiet, --silent suppresses all logging messages\n\
++ -v, --verbose increase the verbosity level of log messages. It\n\
++ can be specified up to two times (or five if\n\
++ --quiet is used)\n\
++- --debug show all logging messsages by setting the verbosity\n\
+++ --debug show all logging messages by setting the verbosity\n\
++ level to the maximum\n\
++ -C, --config FILE retrieve settings for Bumblebee from FILE\n", out);
++ if (is_optirun) {
++--- a/src/module.c
+++++ b/src/module.c
++@@ -64,7 +64,7 @@ int module_is_loaded(char *driver) {
++ *
++ * @param module_name The filename of the module to be loaded
++ * @param driver The name of the driver to be loaded
++- * @return 1 if the driver is succesfully loaded, 0 otherwise
+++ * @return 1 if the driver is successfully loaded, 0 otherwise
++ */
++ int module_load(char *module_name, char *driver) {
++ if (module_is_loaded(driver) == 0) {
++@@ -89,7 +89,7 @@ int module_load(char *module_name, char
++ * giving up
++ *
++ * @param driver The name of the driver (not a filename)
++- * @return 1 if the driver is succesfully unloaded, 0 otherwise
+++ * @return 1 if the driver is successfully unloaded, 0 otherwise
++ */
++ int module_unload(char *driver) {
++ if (module_is_loaded(driver) == 1) {
++--- a/src/optirun.c
+++++ b/src/optirun.c
++@@ -62,7 +62,7 @@ static void handle_signal(int sig) {
++
++ /**
++ * Prints the status of the Bumblebee server if available
++- * @return EXIT_SUCCESS if the status is succesfully retrieved,
+++ * @return EXIT_SUCCESS if the status is successfully retrieved,
++ * EXIT_FAILURE otherwise
++ */
++ static int report_daemon_status(void) {
++--- a/src/switch/sw_bbswitch.c
+++++ b/src/switch/sw_bbswitch.c
++@@ -98,7 +98,7 @@ int bbswitch_is_available(struct switch_
++ * recognized by bbswitch. Assuming that vga_switcheroo was not told to OFF
++ * the device */
++ if (module_load("bbswitch", "bbswitch")) {
++- bb_log(LOG_DEBUG, "succesfully loaded bbswitch\n");
+++ bb_log(LOG_DEBUG, "successfully loaded bbswitch\n");
++ /* hurrah, bbswitch could be loaded which means that the module is
++ * available and that the card is supported */
++ return 1;
++--- a/src/bbrun.c
+++++ b/src/bbrun.c
++@@ -170,7 +170,7 @@ int bb_run_fork(char **argv, int detache
++ exitcode = 128 + WTERMSIG(status);
++ }
++ } else {
++- bb_log(LOG_ERR, "waitpid(%i) faild with %s\n", pid, strerror(errno));
+++ bb_log(LOG_ERR, "waitpid(%i) failed with %s\n", pid, strerror(errno));
++ }
++ pidlist_remove(pid);
++ } else {
--- /dev/null
--- /dev/null
++Description: Ignore error on X shutdown
++Origin: upstream, https://github.com/Bumblebee-Project/Bumblebee/commit/25387e92822fb1a56fa43f1f9f636b987018d068
++
++--- a/src/bblogger.c
+++++ b/src/bblogger.c
++@@ -144,7 +144,8 @@
++ /* Error lines are errors. */
++ if (strncmp(string, "(EE)", 4) == 0){
++ if (strstr(string, "Failed to load module \"kbd\"") ||
++- strstr(string, "No input driver matching")) {
+++ strstr(string, "No input driver matching") ||
+++ strstr(string, "Server terminated successfully")) {
++ /* non-fatal errors */
++ prio = LOG_DEBUG;
++ } else {
--- /dev/null
--- /dev/null
++From: Luca Boccassi <luca.boccassi@gmail.com>
++Date: Sat, 14 May 2016 21:44:00 +0100
++Subject: Ignore failure to set DRM interface
++
++This always fail due to problems in libdrm, but does not affect
++Bumblebee's functionality. See GH-652 for more details.
++---
++ src/bblogger.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/src/bblogger.c b/src/bblogger.c
++index c882275..ba3787e 100644
++--- a/src/bblogger.c
+++++ b/src/bblogger.c
++@@ -146,6 +146,7 @@ static void parse_xorg_output(char * string){
++ if (strstr(string, "Failed to load module \"kbd\"") ||
++ strstr(string, "No input driver matching") ||
++ strstr(string, "systemd-logind: failed to get session:") ||
+++ strstr(string, "failed to set DRM interface version 1.4:") ||
++ strstr(string, "Server terminated successfully")) {
++ /* non-fatal errors */
++ prio = LOG_DEBUG;
--- /dev/null
--- /dev/null
++From: Peter Wu <peter@lekensteyn.nl>
++Date: Thu, 30 Oct 2014 10:22:07 +0100
++Subject: Ignore systemd-logind noise
++
++This "error" appears when not run under logind. As it is not fatal,
++ignore it. (It also appears on my KDE desktop using KDM.)
++
++Error message reported in bugs GH-600, GH-582.
++---
++ src/bblogger.c | 3 ++-
++ 1 file changed, 2 insertions(+), 1 deletion(-)
++
++diff --git a/src/bblogger.c b/src/bblogger.c
++index aaadba9..c882275 100644
++--- a/src/bblogger.c
+++++ b/src/bblogger.c
++@@ -145,6 +145,7 @@ static void parse_xorg_output(char * string){
++ if (strncmp(string, "(EE)", 4) == 0){
++ if (strstr(string, "Failed to load module \"kbd\"") ||
++ strstr(string, "No input driver matching") ||
+++ strstr(string, "systemd-logind: failed to get session:") ||
++ strstr(string, "Server terminated successfully")) {
++ /* non-fatal errors */
++ prio = LOG_DEBUG;
++@@ -201,7 +202,7 @@ static void parse_xorg_output(char * string){
++ }
++ }
++ }
++-
+++
++ /* do the actual logging */
++ bb_log(prio, "[XORG] %s\n", string);
++ }
--- /dev/null
--- /dev/null
++From: =?utf-8?q?Ond=C5=99ej_Jano=C5=A1=C3=ADk?= <j.ondra14@gmail.com>
++Date: Thu, 5 May 2016 18:48:43 +0200
++Subject: module: use libkmod2 instead of modprobe
++
++---
++ Makefile.am | 8 +--
++ README.markdown | 1 +
++ configure.ac | 1 +
++ src/bbconfig.c | 12 ++--
++ src/bbconfig.h | 2 +
++ src/bblogger.c | 4 +-
++ src/bumblebeed.c | 12 ++++
++ src/module.c | 185 +++++++++++++++++++++++++++++++++++++------------------
++ src/optirun.c | 1 -
++ 9 files changed, 152 insertions(+), 74 deletions(-)
++
++diff --git a/Makefile.am b/Makefile.am
++index 0f38a54..25e32d5 100644
++--- a/Makefile.am
+++++ b/Makefile.am
++@@ -10,7 +10,7 @@ AM_CPPFLAGS = ${regular_CPPFLAGS} \
++ -DCONF_XORG='"$(bumblebeedconfdir)/xorg.conf.DRIVER"' \
++ -DCONF_XORG_DIR='"$(bumblebeedconfdir)/xorg.conf.d"'
++ AM_CFLAGS = ${regular_CFLAGS} \
++- ${x11_CFLAGS} ${libbsd_CFLAGS} ${glib_CFLAGS} \
+++ ${x11_CFLAGS} ${libbsd_CFLAGS} ${glib_CFLAGS} ${kmod_CFLAGS} \
++ -Wextra -funsigned-char -DGITVERSION='"${GITVERSION}"'
++
++ noinst_SCRIPTS = scripts/systemd/bumblebeed.service \
++@@ -49,13 +49,13 @@ sbin_PROGRAMS = bin/bumblebeed
++ bin_PROGRAMS = bin/optirun
++
++ bin_optirun_SOURCES = src/module.c src/bbconfig.c src/bblogger.c src/bbrun.c \
++- src/bbsocket.c src/driver.c src/optirun.c src/bbsocketclient.c
++-bin_optirun_LDADD = ${glib_LIBS} -lrt
+++ src/bbsocket.c src/optirun.c src/bbsocketclient.c
+++bin_optirun_LDADD = ${glib_LIBS} ${kmod_LIBS} -lrt
++ bin_bumblebeed_SOURCES = src/pci.c src/bbconfig.c src/bblogger.c src/bbrun.c \
++ src/bbsocket.c src/module.c src/bbsecondary.c src/switch/switching.c \
++ src/switch/sw_bbswitch.c src/switch/sw_switcheroo.c \
++ src/driver.c src/bumblebeed.c
++-bin_bumblebeed_LDADD = ${x11_LIBS} ${libbsd_LIBS} ${glib_LIBS} -lrt
+++bin_bumblebeed_LDADD = ${x11_LIBS} ${libbsd_LIBS} ${glib_LIBS} ${kmod_LIBS} -lrt
++
++ dist_doc_DATA = $(relnotes) README.markdown
++ bumblebeedconf_DATA = conf/bumblebee.conf conf/xorg.conf.nouveau conf/xorg.conf.nvidia
++diff --git a/README.markdown b/README.markdown
++index b534a6c..5c2baa5 100644
++--- a/README.markdown
+++++ b/README.markdown
++@@ -19,6 +19,7 @@ The following packages are dependencies for the build process:
++ - pkg-config
++ - glib-2.0 and development headers
++ - libx11 and development headers
+++- libkmod2 and development headers
++ - libbsd and development headers (if pidfile support is enabled, default yes)
++ - help2man (optional, it is needed for building manual pages)
++
++diff --git a/configure.ac b/configure.ac
++index 4e22314..d5194b8 100644
++--- a/configure.ac
+++++ b/configure.ac
++@@ -132,6 +132,7 @@ AC_SUBST([regular_CFLAGS])
++ # Checks for header files.
++ PKG_CHECK_MODULES([x11], [x11])
++ PKG_CHECK_MODULES([glib], [glib-2.0])
+++PKG_CHECK_MODULES([kmod], [libkmod])
++ AS_IF([test "x$with_pidfile" != xno], [
++ PKG_CHECK_MODULES([libbsd], [libbsd >= 0.2.0])
++ PKG_CHECK_EXISTS([libbsd = 0.2.0], [AC_DEFINE(HAVE_LIBBSD_020)])
++diff --git a/src/bbconfig.c b/src/bbconfig.c
++index 4f5ac7a..62a3306 100644
++--- a/src/bbconfig.c
+++++ b/src/bbconfig.c
++@@ -251,12 +251,6 @@ Bumblebee homepage: <http://Bumblebee-Project.org/>\n", out);
++ */
++ static int bbconfig_parse_common(int opt, char *value) {
++ switch (opt) {
++- case 'q'://quiet mode
++- bb_status.verbosity = VERB_NONE;
++- break;
++- case OPT_DEBUG://debug mode
++- bb_status.verbosity = VERB_ALL;
++- break;
++ case 'd'://X display number
++ set_string_value(&bb_config.x_display, value);
++ break;
++@@ -307,6 +301,12 @@ void bbconfig_parse_opts(int argc, char *argv[], int conf_round) {
++ bb_status.verbosity++;
++ }
++ break;
+++ case 'q'://quiet mode
+++ bb_status.verbosity = VERB_NONE;
+++ break;
+++ case OPT_DEBUG://debug mode
+++ bb_status.verbosity = VERB_ALL;
+++ break;
++ case 's': /* Unix socket to use for communication */
++ set_string_value(&bb_config.socket_path, optarg);
++ break;
++diff --git a/src/bbconfig.h b/src/bbconfig.h
++index 656286b..a19f5d3 100644
++--- a/src/bbconfig.h
+++++ b/src/bbconfig.h
++@@ -26,6 +26,7 @@
++ #include <unistd.h> //for pid_t
++ #include <limits.h> //for CHAR_MAX
++ #include <glib.h>
+++#include <libkmod.h>
++
++ /* Daemon states */
++ #define BB_DAEMON 1
++@@ -118,6 +119,7 @@ struct bb_status_struct {
++ int x_pipe[2];//pipes for reading/writing output from X's stdout/stderr
++ gboolean use_syslog;
++ char *program_name;
+++ struct kmod_ctx *kmod_ctx;
++ };
++
++ /* Structure containing the configuration. */
++diff --git a/src/bblogger.c b/src/bblogger.c
++index ba3787e..7c13c93 100644
++--- a/src/bblogger.c
+++++ b/src/bblogger.c
++@@ -228,7 +228,7 @@ void check_xorg_pipe(void){
++ /* line / buffer is full, process the remaining buffer the next round */
++ repeat = 1;
++ }
++- }else{
+++ } else {
++ if (r == 0 || (errno != EAGAIN && r == -1)){
++ /* the pipe is closed/invalid. Clean up. */
++ if (bb_status.x_pipe[0] != -1){close(bb_status.x_pipe[0]); bb_status.x_pipe[0] = -1;}
++@@ -257,5 +257,5 @@ void check_xorg_pipe(void){
++ memmove(x_output_buffer, next_part, x_buffer_pos);
++ }
++ }
++- }while(repeat);
+++ }while (repeat);
++ }/* check_xorg_pipe */
++diff --git a/src/bumblebeed.c b/src/bumblebeed.c
++index a911da9..6e0ade5 100644
++--- a/src/bumblebeed.c
+++++ b/src/bumblebeed.c
++@@ -34,6 +34,7 @@
++ #include <string.h>
++ #include <errno.h>
++ #include <getopt.h>
+++#include <libkmod.h>
++ #ifdef WITH_PIDFILE
++ #ifdef HAVE_LIBBSD_020
++ #include <libutil.h>
++@@ -488,6 +489,14 @@ int main(int argc, char* argv[]) {
++
++ free(pci_id_igd);
++
+++ // kmod context have to be available for driver detection
+++ bb_status.kmod_ctx = kmod_new(NULL, NULL);
+++ if (bb_status.kmod_ctx == NULL) {
+++ bb_log(LOG_ERR, "kmod_new() failed!\n");
+++ bb_closelog();
+++ exit(EXIT_FAILURE);
+++ }
+++
++ GKeyFile *bbcfg = bbconfig_parse_conf();
++ bbconfig_parse_opts(argc, argv, PARSE_STAGE_DRIVER);
++ driver_detect();
++@@ -500,6 +509,7 @@ int main(int argc, char* argv[]) {
++
++ /* dump the config after detecting the driver */
++ config_dump();
+++
++ if (config_validate() != 0) {
++ return (EXIT_FAILURE);
++ }
++@@ -572,5 +582,7 @@ int main(int argc, char* argv[]) {
++ //close X pipe, if any parts of it are open still
++ if (bb_status.x_pipe[0] != -1){close(bb_status.x_pipe[0]); bb_status.x_pipe[0] = -1;}
++ if (bb_status.x_pipe[1] != -1){close(bb_status.x_pipe[1]); bb_status.x_pipe[1] = -1;}
+++ //cleanup kmod context
+++ kmod_unref(bb_status.kmod_ctx);
++ return (EXIT_SUCCESS);
++ }
++diff --git a/src/module.c b/src/module.c
++index bb32e15..ef3e84c 100644
++--- a/src/module.c
+++++ b/src/module.c
++@@ -24,91 +24,152 @@
++ #include <ctype.h>
++ #include <stdlib.h>
++ #include <unistd.h>
+++#include <libkmod.h>
+++#include <errno.h>
++ #include "module.h"
++ #include "bblogger.h"
++ #include "bbrun.h"
+++#include "bbconfig.h"
+++
+++int module_unload_recursive(struct kmod_module *mod);
++
++ /**
++- * Checks in /proc/modules whether a kernel module is loaded
+++ * Checks whether a kernel module is loaded
++ *
++ * @param driver The name of the driver (not a filename)
++ * @return 1 if the module is loaded, 0 otherwise
++ */
++ int module_is_loaded(char *driver) {
++- // use the same buffer length as lsmod
++- char buffer[4096];
++- FILE * bbs = fopen("/proc/modules", "r");
++- int ret = 0;
++- /* assume mod_len <= sizeof(buffer) */
++- int mod_len = strlen(driver);
+++ int err, state;
+++ struct kmod_module *mod;
++
++- if (bbs == 0) {//error opening, return -1
++- bb_log(LOG_DEBUG, "Couldn't open /proc/modules");
++- return -1;
+++ err = kmod_module_new_from_name(bb_status.kmod_ctx, driver, &mod);
+++ if (err < 0) {
+++ bb_log(LOG_DEBUG, "kmod_module_new_from_name(%s) failed (err: %d).\n",
+++ driver, err);
+++ return 0;
++ }
++- while (fgets(buffer, sizeof(buffer), bbs)) {
++- /* match "module" with "module " and not "module-blah" */
++- if (!strncmp(buffer, driver, mod_len) && isspace(buffer[mod_len])) {
++- /* module is found */
++- ret = 1;
++- break;
++- }
++- }
++- fclose(bbs);
++- return ret;
+++
+++ state = kmod_module_get_initstate(mod);
+++ kmod_module_unref(mod);
+++
+++ return state == KMOD_MODULE_LIVE;
++ }
++
++ /**
++- * Attempts to load a module. If the module has not been loaded after ten
++- * seconds, give up
+++ * Attempts to load a module.
++ *
++ * @param module_name The filename of the module to be loaded
++ * @param driver The name of the driver to be loaded
++ * @return 1 if the driver is successfully loaded, 0 otherwise
++ */
++ int module_load(char *module_name, char *driver) {
+++ int err = 0;
+++ int flags = KMOD_PROBE_IGNORE_LOADED;
+++ struct kmod_list *l, *list = NULL;
+++
++ if (module_is_loaded(driver) == 0) {
++ /* the module has not loaded yet, try to load it */
++- bb_log(LOG_INFO, "Loading driver %s (module %s)\n", driver, module_name);
++- char *mod_argv[] = {
++- "modprobe",
++- module_name,
++- NULL
++- };
++- bb_run_fork_wait(mod_argv, 10);
++- if (module_is_loaded(driver) == 0) {
++- bb_log(LOG_ERR, "Module %s could not be loaded (timeout?)\n", module_name);
+++
+++ bb_log(LOG_INFO, "Loading driver '%s' (module '%s')\n", driver, module_name);
+++ err = kmod_module_new_from_lookup(bb_status.kmod_ctx, module_name, &list);
+++
+++ if (err < 0) {
+++ bb_log(LOG_DEBUG, "kmod_module_new_from_lookup(%s) failed (err: %d).\n",
+++ module_name, err);
+++ return 0;
+++ }
+++
+++ if (list == NULL) {
+++ bb_log(LOG_ERR, "Module '%s' not found.\n", module_name);
++ return 0;
++ }
+++
+++ kmod_list_foreach(l, list) {
+++ struct kmod_module *mod = kmod_module_get_module(l);
+++
+++ bb_log(LOG_DEBUG, "Loading module '%s'.\n", kmod_module_get_name(mod));
+++ err = kmod_module_probe_insert_module(mod, flags, NULL, NULL, NULL, 0);
+++
+++ if (err < 0) {
+++ bb_log(LOG_DEBUG, "kmod_module_probe_insert_module(%s) failed (err: %d).\n",
+++ kmod_module_get_name(mod), err);
+++ }
+++
+++ kmod_module_unref(mod);
+++
+++ if (err < 0) {
+++ break;
+++ }
+++ }
+++
+++ kmod_module_unref_list(list);
+++ }
+++
+++ return err >= 0;
+++}
+++
+++/**
+++ * Unloads module and modules that are depending on this module.
+++ *
+++ * @param mod Reference to libkmod module
+++ * @return 1 if the module is successfully unloaded, 0 otherwise
+++ */
+++int module_unload_recursive(struct kmod_module *mod) {
+++ int err = 0, flags = 0, refcnt;
+++ struct kmod_list *holders;
+++
+++ holders = kmod_module_get_holders(mod);
+++ if (holders != NULL) {
+++ struct kmod_list *itr;
+++
+++ kmod_list_foreach(itr, holders) {
+++ struct kmod_module *hm = kmod_module_get_module(itr);
+++ err = module_unload_recursive(hm);
+++ kmod_module_unref(hm);
+++
+++ if (err < 0) {
+++ break;
+++ }
+++ }
+++ kmod_module_unref_list(holders);
++ }
++- return 1;
+++
+++ refcnt = kmod_module_get_refcnt(mod);
+++ if (refcnt == 0) {
+++ bb_log(LOG_INFO, "Unloading module %s\n", kmod_module_get_name(mod));
+++ err = kmod_module_remove_module(mod, flags);
+++ } else {
+++ bb_log(LOG_ERR, "Failed to unload module '%s' (ref count: %d).\n",
+++ kmod_module_get_name(mod), refcnt);
+++ err = 1;
+++ }
+++
+++ return err == 0;
++ }
++
++ /**
++- * Attempts to unload a module if loaded, for ten seconds before
++- * giving up
+++ * Attempts to unload a module if loaded.
++ *
++ * @param driver The name of the driver (not a filename)
++ * @return 1 if the driver is successfully unloaded, 0 otherwise
++ */
++ int module_unload(char *driver) {
+++ int err;
+++ struct kmod_module *mod;
++ if (module_is_loaded(driver) == 1) {
++- int retries = 30;
++- bb_log(LOG_INFO, "Unloading %s driver\n", driver);
++- char *mod_argv[] = {
++- "modprobe",
++- "-r",
++- driver,
++- NULL
++- };
++- bb_run_fork_wait(mod_argv, 10);
++- while (retries-- > 0 && module_is_loaded(driver) == 1) {
++- usleep(100000);
++- }
++- if (module_is_loaded(driver) == 1) {
++- bb_log(LOG_ERR, "Unloading %s driver timed out.\n", driver);
+++ err = kmod_module_new_from_name(bb_status.kmod_ctx, driver, &mod);
+++
+++ if (err < 0) {
+++ bb_log(LOG_DEBUG, "kmod_module_new_from_name(%s) failed (err: %d).\n",
+++ driver, err);
++ return 0;
++ }
+++
+++ err = module_unload_recursive(mod);
+++ kmod_module_unref(mod);
+++
+++ return err;
++ }
++ return 1;
++ }
++@@ -120,18 +181,20 @@ int module_unload(char *driver) {
++ * @return 1 if the module is available for loading, 0 otherwise
++ */
++ int module_is_available(char *module_name) {
++- /* HACK to support call from optirun */
++- char *modprobe_bin = "/sbin/modprobe";
++- if (access(modprobe_bin, X_OK)) {
++- /* if /sbin/modprobe is not found, pray that PATH contains it */
++- modprobe_bin = "modprobe";
+++ int err, available;
+++ struct kmod_list *list = NULL;
+++
+++ err = kmod_module_new_from_lookup(bb_status.kmod_ctx, module_name, &list);
+++
+++ if (err < 0) {
+++ bb_log(LOG_DEBUG, "kmod_module_new_from_lookup(%s) failed (err: %d).\n",
+++ module_name, err);
+++ return 0;
++ }
++- char *mod_argv[] = {
++- modprobe_bin,
++- "--dry-run",
++- "--quiet",
++- module_name,
++- NULL
++- };
++- return bb_run_fork(mod_argv, 1) == EXIT_SUCCESS;
+++
+++ available = list != NULL;
+++
+++ kmod_module_unref_list(list);
+++
+++ return available;
++ }
++diff --git a/src/optirun.c b/src/optirun.c
++index bcc6c13..f05f05c 100644
++--- a/src/optirun.c
+++++ b/src/optirun.c
++@@ -37,7 +37,6 @@
++ #include "bbsocketclient.h"
++ #include "bblogger.h"
++ #include "bbrun.h"
++-#include "driver.h"
++
++
++ /**
--- /dev/null
--- /dev/null
++Description: With the introduction of nvidia-uvm module, unloading nvidia module will fail unless nvidia-uvm is unloaded. GH-565 suggests using "remove" or "softdep" modprobe.d clauses to teach modprobe to handle that for us; "rmmod" does not have that functionality, so switch to "modprobe -r".
++Origin: upstream, https://github.com/Bumblebee-Project/Bumblebee/commit/1ada79fe5916961fc4e4917f8c63bb184908d986
++Bug: https://github.com/Bumblebee-Project/Bumblebee/issues/565
++Bug-Debian: 793389
++
++--- a/src/module.c
+++++ b/src/module.c
++@@ -96,7 +96,8 @@ int module_unload(char *driver) {
++ int retries = 30;
++ bb_log(LOG_INFO, "Unloading %s driver\n", driver);
++ char *mod_argv[] = {
++- "rmmod",
+++ "modprobe",
+++ "-r",
++ driver,
++ NULL
++ };
--- /dev/null
- 008-primus-libs-fix.patch
++fix-device-detection.patch
++ignore-error-on-X-shutdown.patch
++modprobe-r-instead-of-rmmod.patch
++fix-typos.patch
++xorg-binary-config.patch
++ignore-systemd-logind-noise.patch
++ignore-failure-to-set-DRM-interface.patch
++libkmod.patch
--- /dev/null
--- /dev/null
++From: Rogier 'DocWilco' Mulhuijzen <github@bsdchicks.com>
++Date: Sat, 27 Feb 2016 12:43:41 -0800
++Subject: Add config option to set Xorg binary to run
++
++Also add Xorg commandline binary to debug output
++---
++ Makefile.am | 1 +
++ conf/bumblebee.conf.in | 2 ++
++ configure.ac | 6 ++++++
++ src/bbconfig.c | 6 ++++++
++ src/bbconfig.h | 1 +
++ src/bbsecondary.c | 8 +++++++-
++ src/bbsecondary.h | 8 --------
++ 7 files changed, 23 insertions(+), 9 deletions(-)
++
++--- a/Makefile.am
+++++ b/Makefile.am
++@@ -70,6 +70,7 @@
++
++ do_subst = sed -e 's|[@]GITVERSION[@]|$(GITVERSION)|g' \
++ -e 's|[@]CONF_XDISP[@]|$(CONF_XDISP)|g' \
+++ -e 's|[@]CONF_XORG_BINARY[@]|$(CONF_XORG_BINARY)|g' \
++ -e 's|[@]CONF_SOCKPATH[@]|$(CONF_SOCKPATH)|g' \
++ -e 's|[@]CONF_GID[@]|$(CONF_GID)|g' \
++ -e 's|[@]CONF_PM_METHOD[@]|$(CONF_PM_METHOD)|g' \
++--- a/conf/bumblebee.conf.in
+++++ b/conf/bumblebee.conf.in
++@@ -22,6 +22,8 @@
++ Driver=@CONF_DRIVER@
++ # Directory with a dummy config file to pass as a -configdir to secondary X
++ XorgConfDir=@XCONFDDIR@
+++# Xorg binary to run
+++XorgBinary=@CONF_XORG_BINARY@
++
++ ## Client options. Will take effect on the next optirun executed.
++ [optirun]
++--- a/configure.ac
+++++ b/configure.ac
++@@ -32,6 +32,16 @@
++ AC_DEFINE_SUBST(CONF_VGLCOMPRESS, "proxy", [vglclient transport method])
++ AC_DEFINE_SUBST(CONF_TURNOFFATEXIT, "false", [state of card when shutting off daemon])
++
+++# OpenSUSE: /usr/bin/X -> /var/lib/X11/X -> /usr/bin/Xorg
+++# Fedora, Arch Linux: /usr/bin/X -> /usr/bin/Xorg
+++# Ubuntu: /usr/bin/X is a custom binary doing authorization and then executes
+++# /etc/X11/X -> /usr/bin/Xorg
+++AC_DEFINE_CONF(CONF_XORG_BINARY, [Xorg binary to run], [
+++if test "x" = "x$CONF_XORG_BINARY"; then
+++ CONF_XORG_BINARY=Xorg
+++fi
+++])
+++
++ AC_DEFINE_CONF(CONF_BRIDGE, [optirun display/render bridge, valid values are auto (default), primus and virtualgl], [
++ case $CONF_BRIDGE in
++ auto|primus|virtualgl) ;;
++--- a/src/bbconfig.c
+++++ b/src/bbconfig.c
++@@ -425,6 +425,10 @@
++ if (g_key_file_has_key(bbcfg, section, key, NULL)) {
++ free_and_set_value(&bb_config.x_conf_dir, g_key_file_get_string(bbcfg, section, key, NULL));
++ }
+++ key = "XorgBinary";
+++ if (g_key_file_has_key(bbcfg, section, key, NULL)) {
+++ free_and_set_value(&bb_config.xorg_binary, g_key_file_get_string(bbcfg, section, key, NULL));
+++ }
++ return bbcfg;
++ }
++
++@@ -517,6 +521,7 @@
++ set_string_value(&bb_config.gid_name, CONF_GID);
++ set_string_value(&bb_config.x_conf_file, CONF_XORG);
++ set_string_value(&bb_config.x_conf_dir, CONF_XORG_DIR);
+++ set_string_value(&bb_config.xorg_binary, CONF_XORG_BINARY);
++ set_string_value(&bb_config.optirun_bridge, CONF_BRIDGE);
++ set_string_value(&bb_config.primus_ld_path, CONF_PRIMUS_LD_PATH);
++ set_string_value(&bb_config.vgl_compress, CONF_VGLCOMPRESS);
++@@ -550,6 +555,7 @@
++ #endif
++ bb_log(LOG_DEBUG, " xorg.conf file: %s\n", bb_config.x_conf_file);
++ bb_log(LOG_DEBUG, " xorg.conf.d dir: %s\n", bb_config.x_conf_dir);
+++ bb_log(LOG_DEBUG, " Xorg binary: %s\n", bb_config.xorg_binary);
++ bb_log(LOG_DEBUG, " ModulePath: %s\n", bb_config.mod_path);
++ bb_log(LOG_DEBUG, " GID name: %s\n", bb_config.gid_name);
++ bb_log(LOG_DEBUG, " Power method: %s\n",
++--- a/src/bbconfig.h
+++++ b/src/bbconfig.h
++@@ -122,6 +122,7 @@
++
++ /* Structure containing the configuration. */
++ struct bb_config_struct {
+++ char * xorg_binary; /// Xorg binary to run.
++ char * x_display; /// X display number to use.
++ char * x_conf_file; /// Path to the X configuration file.
++ char * x_conf_dir; /// Path to the dummy X configuration directory.
++--- a/src/bbsecondary.c
+++++ b/src/bbsecondary.c
++@@ -146,7 +146,7 @@
++
++ bb_log(LOG_INFO, "Starting X server on display %s.\n", bb_config.x_display);
++ char *x_argv[] = {
++- XORG_BINARY,
+++ bb_config.xorg_binary,
++ bb_config.x_display,
++ "-config", x_conf_file,
++ "-configdir", bb_config.x_conf_dir,
++@@ -158,6 +158,12 @@
++ "-modulepath", bb_config.mod_path, // keep last
++ NULL
++ };
+++ char **argvp;
+++ bb_log(LOG_DEBUG, "X server command line:");
+++ for (argvp = x_argv; argvp && *argvp; argvp++) {
+++ bb_log(LOG_DEBUG, " %s", *argvp);
+++ }
+++ bb_log(LOG_DEBUG, "\n");
++ enum {n_x_args = sizeof(x_argv) / sizeof(x_argv[0])};
++ if (!*bb_config.mod_path) {
++ x_argv[n_x_args - 3] = 0; //remove -modulepath if not set
++--- a/src/bbsecondary.h
+++++ b/src/bbsecondary.h
++@@ -20,14 +20,6 @@
++ */
++ #pragma once
++
++-/**
++- * OpenSUSE: /usr/bin/X -> /var/lib/X11/X -> /usr/bin/Xorg
++- * Fedora, Arch Linux: /usr/bin/X -> /usr/bin/Xorg
++- * Ubuntu: /usr/bin/X is a custom binary doing authorization and then executes
++- * /etc/X11/X -> /usr/bin/Xorg
++- */
++-#define XORG_BINARY "Xorg"
++-
++ /* PCI Bus ID of the discrete video card */
++ struct pci_bus_id *pci_bus_id_discrete;
++
--- /dev/null
- dh $@
+#!/usr/bin/make -f
+# -*- makefile -*-
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
++VENDOR := $(shell dpkg-vendor --derives-from Ubuntu && echo Ubuntu || echo Debian)
++
++bbnv_depends_Debian = glx-alternative-nvidia (>= 0.6.92)
++bbnv_depends_Ubuntu =
++
++MAINTSCRIPTS_GENERATED = debian/bumblebee-nvidia.postinst
++MAINTSCRIPTS_GENERATED += debian/bumblebee-nvidia.postrm
++
+%:
- override_dh_auto_configure:
- # Ubuntu and Debian's packaging of nvidia's proprietary driver differ greatly
- ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes)
++ dh $@ --with systemd,autoreconf
+
- CONF_DRIVER_MODULE_NVIDIA=nvidia-current \
++configure-for-Ubuntu:
+ dh_auto_configure -- \
- CONF_MODPATH_NVIDIA=/usr/lib/nvidia-current/xorg,/usr/lib/xorg/modules
- else
++ CONF_DRIVER_MODULE_NVIDIA=nvidia \
+ CONF_LDPATH_NVIDIA=/usr/lib/nvidia-current:/usr/lib32/nvidia-current \
- CONF_MODPATH_NVIDIA=/usr/lib/nvidia,/usr/lib/xorg/modules
- endif
++ CONF_MODPATH_NVIDIA=/usr/lib/nvidia-current/xorg,/usr/lib/xorg/modules \
++ CONF_PRIMUS_LD_PATH=/usr/lib/x86_64-linux-gnu/primus:/usr/lib/i386-linux-gnu/primus \
++ CONF_XORG_BINARY=/usr/lib/xorg/Xorg
++
++configure-for-Debian:
+ dh_auto_configure -- \
+ CONF_DRIVER_MODULE_NVIDIA=nvidia \
+ CONF_LDPATH_NVIDIA=/usr/lib/x86_64-linux-gnu/nvidia:/usr/lib/i386-linux-gnu/nvidia:/usr/lib/nvidia \
- dh_strip --dbg-package=bumblebee-dbg
++ CONF_MODPATH_NVIDIA=/usr/lib/nvidia/nvidia,/usr/lib/xorg/modules \
++ CONF_PRIMUS_LD_PATH=/usr/lib/x86_64-linux-gnu/primus:/usr/lib/i386-linux-gnu/primus:/usr/lib/primus:/usr/lib32/primus \
++ CONF_XORG_BINARY=/usr/lib/xorg/Xorg
++
++override_dh_auto_configure: $(MAINTSCRIPTS_GENERATED)
++override_dh_auto_configure: configure-for-$(VENDOR)
+
+override_dh_auto_install:
+ dh_auto_install --destdir=debian/bumblebee/
+
++override_dh_clean:
++ dh_clean
++ $(RM) $(MAINTSCRIPTS_GENERATED)
++
++override_dh_install:
++ dh_install
++
++ # Install bash-completion file to non-obsolete directory
++ mkdir -p debian/bumblebee/usr/share/bash-completion/completions/
++ mv debian/bumblebee/etc/bash_completion.d/bumblebee \
++ debian/bumblebee/usr/share/bash-completion/completions/
++ rm -rf debian/bumblebee/etc/bash_completion.d/
++
+override_dh_installinit:
+ dh_installinit --name=bumblebeed
+
+override_dh_strip:
++ dh_strip --dbgsym-migration='bumblebee-dbg (<< 3.2.1-11)'
++
++override_dh_gencontrol:
++ dh_gencontrol -- -V'nvidia:Depends=$(bbnv_depends_$(VENDOR))'
++
++debian/%: debian/%.$(VENDOR)
++ cp -a $< $@