diff -Nru nvidia-prime-0.8.16~0.20.04.1/debian/changelog nvidia-prime-0.8.16~0.20.04.2/debian/changelog --- nvidia-prime-0.8.16~0.20.04.1/debian/changelog 2021-02-10 11:38:51.000000000 +0000 +++ nvidia-prime-0.8.16~0.20.04.2/debian/changelog 2021-10-28 14:40:04.000000000 +0000 @@ -1,3 +1,20 @@ +nvidia-prime (0.8.16~0.20.04.2) focal; urgency=medium + + [ Jeremy Szu ] + * Set on-demand mode as default nvidia mode (LP: #1942307) + + [ Alberto Milone ] + * prime-select: + - Detect chassis type and enable RTD3 only + on laptops (LP: #1942788). + - on-demand mode doesn't need to depend on + RTD3 (LP: #1942789). + - Don't check the current profile when setting + a profile (LP: #1946476). + - Handle BrokenPipeError (LP: #1965520). + + -- Alberto Milone Thu, 28 Oct 2021 16:40:04 +0200 + nvidia-prime (0.8.16~0.20.04.1) focal; urgency=medium * prime-select: diff -Nru nvidia-prime-0.8.16~0.20.04.1/debian/preinst.in nvidia-prime-0.8.16~0.20.04.2/debian/preinst.in --- nvidia-prime-0.8.16~0.20.04.1/debian/preinst.in 2019-07-23 15:07:34.000000000 +0000 +++ nvidia-prime-0.8.16~0.20.04.2/debian/preinst.in 2021-10-28 14:37:21.000000000 +0000 @@ -25,7 +25,8 @@ fi if [ ! -f /etc/prime-discrete ]; then - echo "on" > /etc/prime-discrete + # Supported if the version of nvidia driver is greater than 450 + echo "on-demand" > /etc/prime-discrete fi ;; diff -Nru nvidia-prime-0.8.16~0.20.04.1/prime-select nvidia-prime-0.8.16~0.20.04.2/prime-select --- nvidia-prime-0.8.16~0.20.04.1/prime-select 2021-02-10 11:38:51.000000000 +0000 +++ nvidia-prime-0.8.16~0.20.04.2/prime-select 2021-10-28 14:40:04.000000000 +0000 @@ -100,6 +100,61 @@ settings.write('%s\n' % nvidia_power) settings.close() + def _is_laptop(self): + # Chassis types: + # + # 01 Other + # 02 Unknown + # 03 Desktop + # 04 Low Profile Desktop + # 05 Pizza Box + # 06 Mini Tower + # 07 Tower + # 08 Portable + # 09 Laptop + # 10 Notebook + # 11 Hand Held + # 12 Docking Station + # 13 All In One + # 14 Sub Notebook + # 15 Space-saving + # 16 Lunch Box + # 17 Main Server Chassis + # 18 Expansion Chassis + # 19 Sub Chassis + # 20 Bus Expansion Chassis + # 21 Peripheral Chassis + # 22 RAID Chassis + # 23 Rack Mount Chassis + # 24 Sealed-case PC + # 25 Multi-system + # 26 CompactPCI + # 27 AdvancedTCA + # 28 Blade + # 29 Blade Enclosing + # 30 Tablet + # 31 Convertible + # 32 Detachable + # 33 IoT Gateway + # 34 Embedded PC + # 35 Mini PC + # 36 Stick PC + path = '/sys/devices/virtual/dmi/id/chassis_type' + + if os.path.isfile(path): + with open(path, 'r') as f: + chassis_type = f.read() + f.close() + if chassis_type: + chassis_type = int(chassis_type.strip()) + else: + return -1 + + if chassis_type in (8, 9, 10, 31): + return 1 + else: + return 0 + def _has_integrated_gpu(self): status = False; @@ -137,14 +192,6 @@ sys.stderr.write('Error: no integrated GPU detected.\n') return False - current_profile = self._get_profile() - - if profile == current_profile: - # No need to do anything if we're already using the desired - # profile - sys.stdout.write('Info: the %s profile is already set\n' % (profile)) - return True - sys.stdout.write('Info: selecting the %s profile\n' % (profile)) self._backup_grub_config() @@ -154,9 +201,11 @@ # (No need to check if nvidia is available) self._enable_nvidia() elif profile == "on-demand": - if self._supports_runtimepm(): - self._enable_runtimepm() - self._enable_kms() + # Enable RTD3 only on laptops + if self._is_laptop() > 0: + if self._supports_runtimepm(): + self._enable_runtimepm() + self._enable_kms() self._disable_nvidia(keep_nvidia_modules=True) else: # Make sure that the installed packages support PRIME @@ -325,11 +374,14 @@ # Check if process is still running while proc.poll()==None: - # Print the spinner - sys.stdout.write(spinner.__next__()) - sys.stdout.flush() - sys.stdout.write('\b') - time.sleep(0.2) + try: + # Print the spinner + sys.stdout.write(spinner.__next__()) + sys.stdout.flush() + sys.stdout.write('\b') + time.sleep(0.2) + except BrokenPipeError: + return False print('Done')