Source code for i3pystatus.amdgpu

import os

from i3pystatus import IntervalModule


[docs]class Amdgpu(IntervalModule): """ Shows information about gpu's using the amdgpu driver .. rubric :: Available formatters * `{temp}` * `{sclk}` - Gpu clock speed * `{mclk}` - Memory clock speed * `{fan_speed}` - Fan speed * `{gpu_usage}` - Gpu Usage percent """ settings = ( 'format', 'color', ('card', '[1, 2, ...] card to read (options are in /sys/class/drm/)') ) card = 0 color = None format = '{temp} {mclk} {sclk}' def init(self): self.info_gatherers = [] self.dev_path = '/sys/class/drm/card{}/device/'.format(self.card) self.detect_hwmon() if 'sclk' in self.format: self.info_gatherers.append(self.get_sclk) if 'mclk' in self.format: self.info_gatherers.append(self.get_mclk) if 'temp' in self.format: self.info_gatherers.append(self.get_temp) if 'fan_speed' in self.format: self.info_gatherers.append(self.get_fan_speed) if 'gpu_usage' in self.format: self.info_gatherers.append(self.get_gpu_usage) def detect_hwmon(self): hwmon_base = self.dev_path + 'hwmon/' self.hwmon_path = hwmon_base + os.listdir(hwmon_base)[0] + '/' def run(self): self.data = dict() for gatherer in self.info_gatherers: gatherer() self.output = { 'full_text': self.format.format(**self.data) } if self.color: self.output['color'] = self.color @staticmethod def parse_clk_reading(reading): for l in reading.splitlines(): if l.endswith('*'): return l.split(' ')[1] def get_mclk(self): with open(self.dev_path + 'pp_dpm_mclk') as f: self.data['mclk'] = self.parse_clk_reading(f.read()) def get_sclk(self): with open(self.dev_path + 'pp_dpm_sclk') as f: self.data['sclk'] = self.parse_clk_reading(f.read()) def get_temp(self): with open(self.hwmon_path + 'temp1_input') as f: self.data['temp'] = float(f.read()) / 1000 def get_fan_speed(self): with open(self.hwmon_path + 'fan1_input') as f: self.data['fan_speed'] = f.read().strip() def get_gpu_usage(self): with open(self.dev_path + 'gpu_busy_percent') as f: self.data['gpu_usage'] = f.read().strip()