From: Luca Boccassi Date: Wed, 6 Feb 2019 11:57:48 +0000 (+0000) Subject: Import bumblebee_3.2.1-20.debian.tar.xz X-Git-Tag: archive/raspbian/3.2.1-26+rpi1~1^2^2~11^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=c829483175d44ed5d206efb6e0fb9d74e4c08203;p=bumblebee.git Import bumblebee_3.2.1-20.debian.tar.xz [dgit import tarball bumblebee 3.2.1-20 bumblebee_3.2.1-20.debian.tar.xz] --- c829483175d44ed5d206efb6e0fb9d74e4c08203 diff --git a/README.Debian b/README.Debian new file mode 100644 index 0000000..32bd53b --- /dev/null +++ b/README.Debian @@ -0,0 +1,96 @@ +bumblebee for Debian/Ubuntu +--------------------------- + +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 Sat, 25 Oct 2014 10:13:42 -0700 diff --git a/bumblebee-nvidia.lintian-overrides b/bumblebee-nvidia.lintian-overrides new file mode 100644 index 0000000..d01c112 --- /dev/null +++ b/bumblebee-nvidia.lintian-overrides @@ -0,0 +1,2 @@ +bumblebee-nvidia: postinst-has-useless-call-to-ldconfig +bumblebee-nvidia: postrm-has-useless-call-to-ldconfig diff --git a/bumblebee-nvidia.postinst.Debian b/bumblebee-nvidia.postinst.Debian new file mode 100644 index 0000000..736fd81 --- /dev/null +++ b/bumblebee-nvidia.postinst.Debian @@ -0,0 +1,19 @@ +#!/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# diff --git a/bumblebee-nvidia.postinst.Ubuntu b/bumblebee-nvidia.postinst.Ubuntu new file mode 100644 index 0000000..f1279b5 --- /dev/null +++ b/bumblebee-nvidia.postinst.Ubuntu @@ -0,0 +1,36 @@ +#!/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# diff --git a/bumblebee-nvidia.postrm.Debian b/bumblebee-nvidia.postrm.Debian new file mode 100644 index 0000000..ce08c6f --- /dev/null +++ b/bumblebee-nvidia.postrm.Debian @@ -0,0 +1,13 @@ +#!/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# diff --git a/bumblebee-nvidia.postrm.Ubuntu b/bumblebee-nvidia.postrm.Ubuntu new file mode 100644 index 0000000..2a88c43 --- /dev/null +++ b/bumblebee-nvidia.postrm.Ubuntu @@ -0,0 +1,16 @@ +#!/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# diff --git a/bumblebee.bumblebeed.init b/bumblebee.bumblebeed.init new file mode 100644 index 0000000..a29ca39 --- /dev/null +++ b/bumblebee.bumblebeed.init @@ -0,0 +1,156 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: bumblebeed +# Required-Start: $local_fs $remote_fs $syslog +# Required-Stop: $local_fs $remote_fs $syslog +# Should-Start: kdm gdm lightdm nvidia-kernel +# Should-Stop: kdm gdm lightdm nvidia-kernel +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Bumblebee supporting NVIDIA Optimus cards +# Description: Daemon responsible for handling power management for +# NVIDIA Optimus cards and handling optirun requests which +# allows the discrete card to be used +### END INIT INFO + +# Author: Aron Xu + +# PATH should only include /usr/* if it runs after the mountnfs.sh script +PATH=/sbin:/usr/sbin:/bin:/usr/bin +DESC=bumblebeed # Introduce a short description here +NAME=bumblebeed # Introduce the short server's name here +DAEMON=/usr/sbin/bumblebeed # Introduce the server's location here +DAEMON_ARGS="--daemon" # Arguments to run the daemon with +PIDFILE=/var/run/$NAME.pid +SCRIPTNAME=/etc/init.d/$NAME + +# Exit if the package is not installed +[ -x $DAEMON ] || exit 0 + +# Read configuration variable file if it is present +[ -r /etc/default/$NAME ] && . /etc/default/$NAME + +# Load the VERBOSE setting and other rcS variables +. /lib/init/vars.sh + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. +. /lib/lsb/init-functions + +# +# Function that starts the daemon/service +# +do_start() +{ + # Return + # 0 if daemon has been started + # 1 if daemon was already running + # 2 if daemon could not be started + start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ + || return 1 + start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ + $DAEMON_ARGS \ + || return 2 + # Add code here, if necessary, that waits for the process to be ready + # to handle requests from services started subsequently which depend + # on this one. As a last resort, sleep for some time. +} + +# +# Function that stops the daemon/service +# +do_stop() +{ + # Return + # 0 if daemon has been stopped + # 1 if daemon was already stopped + # 2 if daemon could not be stopped + # other if a failure occurred + start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME + RETVAL="$?" + [ "$RETVAL" = 2 ] && return 2 + # Wait for children to finish too if this is a daemon that forks + # and if the daemon is only ever run from this initscript. + # If the above conditions are not satisfied then add some other code + # that waits for the process to drop all resources that could be + # needed by services started subsequently. A last resort is to + # sleep for some time. + start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON + [ "$?" = 2 ] && return 2 + # Many daemons don't delete their pidfiles when they exit. + rm -f $PIDFILE + return "$RETVAL" +} + +# +# Function that sends a SIGHUP to the daemon/service +# +do_reload() { + # + # If the daemon can reload its configuration without + # restarting (for example, when it is sent a SIGHUP), + # then implement that here. + # + start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME + return 0 +} + +case "$1" in + start) + [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME" + do_start + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + stop) + [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" + do_stop + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + status) + status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? + ;; + #reload|force-reload) + # + # If do_reload() is not implemented then leave this commented out + # and leave 'force-reload' as an alias for 'restart'. + # + #log_daemon_msg "Reloading $DESC" "$NAME" + #do_reload + #log_end_msg $? + #;; + restart|force-reload) + # + # If the "reload" option is implemented then remove the + # 'force-reload' alias + # + log_daemon_msg "Restarting $DESC" "$NAME" + do_stop + case "$?" in + 0|1) + do_start + case "$?" in + 0) log_end_msg 0 ;; + 1) log_end_msg 1 ;; # Old process is still running + *) log_end_msg 1 ;; # Failed to start + esac + ;; + *) + # Failed to stop + log_end_msg 1 + ;; + esac + ;; + *) + #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 + echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 + exit 3 + ;; +esac + +: diff --git a/bumblebee.conf b/bumblebee.conf new file mode 100644 index 0000000..ae00b31 --- /dev/null +++ b/bumblebee.conf @@ -0,0 +1,105 @@ +# 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 +# 375 +blacklist nvidia-375 +blacklist nvidia-375-updates +blacklist nvidia-experimental-375 +# 378 +blacklist nvidia-378 +blacklist nvidia-378-updates +blacklist nvidia-experimental-378 +# 381 +blacklist nvidia-381 +blacklist nvidia-381-updates +blacklist nvidia-experimental-381 +# 384 +blacklist nvidia-384 +blacklist nvidia-384-updates +blacklist nvidia-experimental-384 diff --git a/bumblebee.install b/bumblebee.install new file mode 100644 index 0000000..7b9ba94 --- /dev/null +++ b/bumblebee.install @@ -0,0 +1,3 @@ +debian/bumblebee.conf usr/share/bumblebee/modprobe.d/ +debian/bumblebee/etc/bumblebee/* usr/share/bumblebee/default-conf/ +scripts/systemd/bumblebeed.service lib/systemd/system/ diff --git a/bumblebee.maintscript b/bumblebee.maintscript new file mode 100644 index 0000000..0c2ed42 --- /dev/null +++ b/bumblebee.maintscript @@ -0,0 +1,3 @@ +rm_conffile /etc/modprobe.d/bumblebee.conf 3.2.1-6~ +rm_conffile /etc/bash_completion.d/bumblebee 3.2.1-8~ +rm_conffile /etc/init/bumblebeed.conf 3.2.1-18~ diff --git a/bumblebee.postinst b/bumblebee.postinst new file mode 100644 index 0000000..2613bc0 --- /dev/null +++ b/bumblebee.postinst @@ -0,0 +1,79 @@ +#!/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 + 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 + + + # 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# diff --git a/bumblebee.postrm b/bumblebee.postrm new file mode 100644 index 0000000..b014aaa --- /dev/null +++ b/bumblebee.postrm @@ -0,0 +1,25 @@ +#!/bin/sh +# postrm script for bumblebee +# +# see: dh_installdeb(1) + +set -e + +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 + + ;; + 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 + + ;; +esac + +#DEBHELPER# diff --git a/bumblebee.triggers b/bumblebee.triggers new file mode 100644 index 0000000..d7fea6c --- /dev/null +++ b/bumblebee.triggers @@ -0,0 +1,2 @@ +activate-noawait update-initramfs +interest-noawait restart-bumblebeed diff --git a/changelog b/changelog new file mode 100644 index 0000000..7002d38 --- /dev/null +++ b/changelog @@ -0,0 +1,239 @@ +bumblebee (3.2.1-20) unstable; urgency=medium + + [ Andreas Beckmann ] + * Drop versioned constraints that are satisfied in wheezy. + * Switch to debhelper-compat (= 12). + + [ Luca Boccassi ] + * Enable all hardening build flags. + * bumblebee-nvidia: add Ubuntu's dependencies for 390 and 410 series. + + -- Luca Boccassi Wed, 06 Feb 2019 11:57:48 +0000 + +bumblebee (3.2.1-19) unstable; urgency=medium + + * Use wildcard to install bash completion file. + * Backport patch to support AMD APU setups. + * Backport patch to support nvidia drivers without bbswitch. + * Bump Standards-Version to 4.3.0, no changes. + * Set debhelper compat to 11. + + -- Luca Boccassi Mon, 31 Dec 2018 18:12:20 +0000 + +bumblebee (3.2.1-18) unstable; urgency=medium + + [ Andreas Beckmann ] + * Add support for the 390xx legacy driver package available in Debian. + (Closes: #916448) + * The dbgsym migration was done in stretch. + * Switch Vcs-* URLs to salsa.debian.org. + * Set Rules-Requires-Root: no. + + [ Luca Boccassi ] + * Bump Standards-Version to 4.2.1. + * Remove obsolete conffile /etc/init/bumblebeed.conf. Thanks Ansgar! + (Closes: #914979) + + -- Luca Boccassi Fri, 14 Dec 2018 16:02:16 +0000 + +bumblebee (3.2.1-17) unstable; urgency=medium + + * Switch the triggers to -noawait to fix Lintian warning and to make + things easier for apt/dpkg. Both restarting bumblebeed and re-building + the initramfs can be deferred. + * B-D on debhelper (>= 9.20160709) instead of dh-systemd to fix L:E. + * Switch Uploaders field to bluca@debian.org email address. + * Switch from priority extra to optional to fix L:W and comply with + Policy 4.0.1. + * Do not ship Upstart file anymore, fixes L:W. + * Add 387 series to dependencies for Ubuntu. + * Bump Standards-Version to 4.1.2. + + -- Luca Boccassi Fri, 08 Dec 2017 23:07:05 +0000 + +bumblebee (3.2.1-16) unstable; urgency=medium + + * Ubuntu: fix typo in modprobe, really support 378 + + -- Luca Boccassi Sun, 02 Jul 2017 10:36:52 +0100 + +bumblebee (3.2.1-15) unstable; urgency=medium + + * Use https in debian/copyright + * Bump Standards-Version to 4.0.0 + * Ubuntu: add support for 375, 378, 381 and 384 + + -- Luca Boccassi Sat, 01 Jul 2017 19:43:52 +0100 + +bumblebee (3.2.1-14) unstable; urgency=medium + + * Add dependency to lsb-base (>= 3.0-6) to fix Lintian Error + * Add blacklist and dependency for nvidia-367* + + -- Luca Boccassi Tue, 24 Jan 2017 14:20:27 +0000 + +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 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 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 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 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 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 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 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 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 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 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 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 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. + + -- Vincent Cheng Fri, 03 May 2013 03:04:38 -0700 diff --git a/control b/control new file mode 100644 index 0000000..b372e32 --- /dev/null +++ b/control @@ -0,0 +1,96 @@ +Source: bumblebee +Section: utils +Priority: optional +Maintainer: Debian NVIDIA Maintainers +Uploaders: + Aron Xu , + Vincent Cheng , + Yunqiang Su , + Luca Boccassi , +Build-Depends: + debhelper-compat (= 12), + help2man, + libbsd-dev, + libglib2.0-dev, + libx11-dev, + pkg-config, + libkmod-dev, +Rules-Requires-Root: no +Standards-Version: 4.3.0 +Homepage: https://launchpad.net/~bumblebee +Vcs-Browser: https://salsa.debian.org/nvidia-team/bumblebee +Vcs-Git: https://salsa.debian.org/nvidia-team/bumblebee.git + +Package: bumblebee +Architecture: linux-any +Pre-Depends: + ${misc:Pre-Depends}, +Depends: + bbswitch-dkms | bbswitch-source, + lsb-base, + 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 + 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. + . + 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 + 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 +Depends: + bumblebee (= ${binary:Version}), + ${misc:Depends}, + ${nvidia:Depends}, +# proprietary NVIDIA packages in Debian + nvidia-driver | + nvidia-legacy-390xx-driver | + nvidia-legacy-340xx-driver | + nvidia-legacy-304xx-driver | + nvidia-kernel-dkms | + nvidia-legacy-390xx-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 | + 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 | + nvidia-375 | nvidia-375-updates | nvidia-experimental-375 | + nvidia-378 | nvidia-378-updates | nvidia-experimental-378 | + nvidia-381 | nvidia-381-updates | nvidia-experimental-381 | + nvidia-384 | nvidia-384-updates | nvidia-experimental-384 | + nvidia-387 | nvidia-387-updates | nvidia-experimental-387 | + nvidia-driver-390 | + nvidia-driver-410 +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. diff --git a/copyright b/copyright new file mode 100644 index 0000000..b35dcbf --- /dev/null +++ b/copyright @@ -0,0 +1,32 @@ +Format: https://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 +License: GPL-3.0+ + +Files: debian/* +Copyright: 2011-2013 Peter Lekensteyn + 2011-2013 Bruno Pagani + 2012 Igor Urazov + 2013 Aron Xu + 2013 Vincent Cheng +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 . + . + On Debian systems, the complete text of the GNU General + Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". diff --git a/patches/amd-apu.patch b/patches/amd-apu.patch new file mode 100644 index 0000000..9fda6e6 --- /dev/null +++ b/patches/amd-apu.patch @@ -0,0 +1,35 @@ +Description: Support for AMD APU+NVIDIA setup +Origin: upstream, https://github.com/Bumblebee-Project/Bumblebee/pull/1009 +--- a/src/bumblebeed.c ++++ b/src/bumblebeed.c +@@ -464,12 +464,19 @@ int main(int argc, char* argv[]) { + + /* First look for an intel card */ + struct pci_bus_id *pci_id_igd = pci_find_gfx_by_vendor(PCI_VENDOR_ID_INTEL, 0); ++ ++ /* Then look for an amd card */ ++ if (!pci_id_igd) { ++ bb_log(LOG_INFO, "No Intel video card found, testing for system with an AMD APU.\n"); ++ pci_id_igd = pci_find_gfx_by_vendor(PCI_VENDOR_ID_AMD, 0); ++ } ++ + if (!pci_id_igd) { + /* This is no Optimus configuration. But maybe it's a + dual-nvidia configuration. Let us test that. + */ + pci_id_igd = pci_find_gfx_by_vendor(PCI_VENDOR_ID_NVIDIA, 1); +- bb_log(LOG_INFO, "No Intel video card found, testing for dual-nvidia system.\n"); ++ bb_log(LOG_INFO, "No Intel/AMD video card found, testing for dual-nvidia system.\n"); + + if (!pci_id_igd) { + /* Ok, this is not a double gpu setup supported (there is at most +--- a/src/pci.h ++++ b/src/pci.h +@@ -21,6 +21,7 @@ + #pragma once + #include /* necessary for int32_t */ + ++#define PCI_VENDOR_ID_AMD 0x1002 + #define PCI_VENDOR_ID_NVIDIA 0x10de + #define PCI_VENDOR_ID_INTEL 0x8086 + #define PCI_CLASS_DISPLAY_VGA 0x0300 diff --git a/patches/fix-device-detection.patch b/patches/fix-device-detection.patch new file mode 100644 index 0000000..791ad63 --- /dev/null +++ b/patches/fix-device-detection.patch @@ -0,0 +1,15 @@ +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); diff --git a/patches/fix-typos.patch b/patches/fix-typos.patch new file mode 100644 index 0000000..4da4823 --- /dev/null +++ b/patches/fix-typos.patch @@ -0,0 +1,72 @@ +Author: Andreas Beckmann +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 { diff --git a/patches/ignore-error-on-X-shutdown.patch b/patches/ignore-error-on-X-shutdown.patch new file mode 100644 index 0000000..323a333 --- /dev/null +++ b/patches/ignore-error-on-X-shutdown.patch @@ -0,0 +1,15 @@ +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 { diff --git a/patches/ignore-failure-to-set-DRM-interface.patch b/patches/ignore-failure-to-set-DRM-interface.patch new file mode 100644 index 0000000..fbf9a77 --- /dev/null +++ b/patches/ignore-failure-to-set-DRM-interface.patch @@ -0,0 +1,22 @@ +From: Luca Boccassi +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; diff --git a/patches/ignore-systemd-logind-noise.patch b/patches/ignore-systemd-logind-noise.patch new file mode 100644 index 0000000..cbe48b4 --- /dev/null +++ b/patches/ignore-systemd-logind-noise.patch @@ -0,0 +1,33 @@ +From: Peter Wu +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); + } diff --git a/patches/libkmod.patch b/patches/libkmod.patch new file mode 100644 index 0000000..f29068f --- /dev/null +++ b/patches/libkmod.patch @@ -0,0 +1,434 @@ +From: =?utf-8?q?Ond=C5=99ej_Jano=C5=A1=C3=ADk?= +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: \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 //for pid_t + #include //for CHAR_MAX + #include ++#include + + /* 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 + #include + #include ++#include + #ifdef WITH_PIDFILE + #ifdef HAVE_LIBBSD_020 + #include +@@ -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 + #include + #include ++#include ++#include + #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" + + + /** diff --git a/patches/modprobe-r-instead-of-rmmod.patch b/patches/modprobe-r-instead-of-rmmod.patch new file mode 100644 index 0000000..97c62c3 --- /dev/null +++ b/patches/modprobe-r-instead-of-rmmod.patch @@ -0,0 +1,21 @@ +Description: switch from "rmmod" to "modprobe -r" + 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: https://bugs.debian.org/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 + }; diff --git a/patches/no-bbswitch.patch b/patches/no-bbswitch.patch new file mode 100644 index 0000000..65f43f4 --- /dev/null +++ b/patches/no-bbswitch.patch @@ -0,0 +1,82 @@ +Description: Add option to always unload the driver on exit +Origin: upstream, https://github.com/Bumblebee-Project/Bumblebee/pull/983 +--- a/src/bbconfig.c ++++ b/src/bbconfig.c +@@ -462,6 +462,10 @@ void bbconfig_parse_conf_driver(GKeyFile + g_free(module_name); + } + } ++ key = "AlwaysUnloadKernelDriver"; ++ if (g_key_file_has_key(bbcfg, section, key, NULL)) { ++ bb_config.force_driver_unload = g_key_file_get_boolean(bbcfg, section, key, NULL); ++ } + key = "LibraryPath"; + if (g_key_file_has_key(bbcfg, section, key, NULL)) { + free_and_set_value(&bb_config.ld_path, g_key_file_get_string(bbcfg, section, key, NULL)); +--- a/src/bbconfig.h ++++ b/src/bbconfig.h +@@ -145,6 +145,7 @@ struct bb_config_struct { + char * module_name; /* Kernel module to be loaded for the driver. + * If empty, driver will be used. This is + * for Ubuntu which uses nvidia-current */ ++ int force_driver_unload; /* Force driver unload, even without active PM method */ + int card_shutdown_state; + #ifdef WITH_PIDFILE + char *pid_file; /* pid file for storing the daemons PID */ +--- a/src/bbsecondary.c ++++ b/src/bbsecondary.c +@@ -223,24 +223,31 @@ bool start_secondary(bool need_secondary + static void switch_and_unload(void) + { + char driver[BUFFER_SIZE]; ++ int unload_driver = 0; + +- if (bb_config.pm_method == PM_DISABLED && bb_status.runmode != BB_RUN_EXIT) { ++ if (bb_config.pm_method == PM_DISABLED && !bb_config.force_driver_unload && bb_status.runmode != BB_RUN_EXIT) { + /* do not disable the card if PM is disabled unless exiting */ + return; + } + + //if card is on and can be switched, switch it off ++ if (switcher && switcher->need_driver_unloaded) { ++ /* do not unload the drivers nor disable the card if the card is not on */ ++ if (switcher->status() != SWITCH_ON) { ++ return; ++ } ++ unload_driver = 1; ++ } ++ ++ if (unload_driver || bb_config.force_driver_unload) { ++ /* unload the driver loaded by the graphica card */ ++ if (pci_get_driver(driver, pci_bus_id_discrete, sizeof driver)) { ++ module_unload(driver); ++ } ++ } ++ + if (switcher) { + if (switcher->need_driver_unloaded) { +- /* do not unload the drivers nor disable the card if the card is not on */ +- if (switcher->status() != SWITCH_ON) { +- return; +- } +- /* unload the driver loaded by the graphica card */ +- if (pci_get_driver(driver, pci_bus_id_discrete, sizeof driver)) { +- module_unload(driver); +- } +- + //only turn card off if no drivers are loaded + if (pci_get_driver(NULL, pci_bus_id_discrete, 0)) { + bb_log(LOG_DEBUG, "Drivers are still loaded, unable to disable card\n"); +--- a/conf/bumblebee.conf.in ++++ b/conf/bumblebee.conf.in +@@ -62,6 +62,10 @@ LibraryPath=@CONF_LDPATH_NVIDIA@ + # default Xorg modules path + XorgModulePath=@CONF_MODPATH_NVIDIA@ + XorgConfFile=@BBCONFDIR@/xorg.conf.nvidia ++# If set to true, will always unload the kernel module(s) even with ++# PMMethod=none - useful for newer Optimus models on which the kernel power ++# management works out of the box to power the card on/off without bbswitch. ++AlwaysUnloadKernelDriver=false + + ## Section with nouveau driver specific options, only parsed if Driver=nouveau + [driver-nouveau] diff --git a/patches/series b/patches/series new file mode 100644 index 0000000..dd19db3 --- /dev/null +++ b/patches/series @@ -0,0 +1,10 @@ +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 +amd-apu.patch +no-bbswitch.patch diff --git a/patches/xorg-binary-config.patch b/patches/xorg-binary-config.patch new file mode 100644 index 0000000..e4c751d --- /dev/null +++ b/patches/xorg-binary-config.patch @@ -0,0 +1,135 @@ +From: Rogier 'DocWilco' Mulhuijzen +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; + diff --git a/rules b/rules new file mode 100755 index 0000000..a5b0318 --- /dev/null +++ b/rules @@ -0,0 +1,64 @@ +#!/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 + +DPKG_EXPORT_BUILDFLAGS = 1 +export DEB_BUILD_MAINT_OPTIONS = hardening=+all +include /usr/share/dpkg/default.mk + +%: + dh $@ + +configure-for-Ubuntu: + dh_auto_configure -- \ + CONF_DRIVER_MODULE_NVIDIA=nvidia \ + CONF_LDPATH_NVIDIA=/usr/lib/nvidia-current:/usr/lib32/nvidia-current \ + 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 \ + 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/* \ + debian/bumblebee/usr/share/bash-completion/completions/ + rm -rf debian/bumblebee/etc/bash_completion.d/ + +override_dh_installinit: + dh_installinit --name=bumblebeed + +override_dh_gencontrol: + dh_gencontrol -- -V'nvidia:Depends=$(bbnv_depends_$(VENDOR))' + +debian/%: debian/%.$(VENDOR) + cp -a $< $@ diff --git a/source/format b/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/watch b/watch new file mode 100644 index 0000000..721a8b6 --- /dev/null +++ b/watch @@ -0,0 +1,2 @@ +version=3 +https://github.com/Bumblebee-Project/Bumblebee/tags .*/v?(\d.*)\.(?:tgz|tbz2|tar\.(?:gz|bz2|xz))