17a192d395ce5d7e5945afa684146d5b0abc53480mbligh/* 27a192d395ce5d7e5945afa684146d5b0abc53480mbligh * Copyright 2007, Intel Corporation 37a192d395ce5d7e5945afa684146d5b0abc53480mbligh * 47a192d395ce5d7e5945afa684146d5b0abc53480mbligh * This file is part of PowerTOP 57a192d395ce5d7e5945afa684146d5b0abc53480mbligh * 67a192d395ce5d7e5945afa684146d5b0abc53480mbligh * This program file is free software; you can redistribute it and/or modify it 77a192d395ce5d7e5945afa684146d5b0abc53480mbligh * under the terms of the GNU General Public License as published by the 87a192d395ce5d7e5945afa684146d5b0abc53480mbligh * Free Software Foundation; version 2 of the License. 97a192d395ce5d7e5945afa684146d5b0abc53480mbligh * 107a192d395ce5d7e5945afa684146d5b0abc53480mbligh * This program is distributed in the hope that it will be useful, but WITHOUT 117a192d395ce5d7e5945afa684146d5b0abc53480mbligh * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 127a192d395ce5d7e5945afa684146d5b0abc53480mbligh * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 137a192d395ce5d7e5945afa684146d5b0abc53480mbligh * for more details. 147a192d395ce5d7e5945afa684146d5b0abc53480mbligh * 157a192d395ce5d7e5945afa684146d5b0abc53480mbligh * You should have received a copy of the GNU General Public License 167a192d395ce5d7e5945afa684146d5b0abc53480mbligh * along with this program in a file named COPYING; if not, write to the 177a192d395ce5d7e5945afa684146d5b0abc53480mbligh * Free Software Foundation, Inc., 187a192d395ce5d7e5945afa684146d5b0abc53480mbligh * 51 Franklin Street, Fifth Floor, 197a192d395ce5d7e5945afa684146d5b0abc53480mbligh * Boston, MA 02110-1301 USA 207a192d395ce5d7e5945afa684146d5b0abc53480mbligh * 217a192d395ce5d7e5945afa684146d5b0abc53480mbligh * Authors: 227a192d395ce5d7e5945afa684146d5b0abc53480mbligh * Arjan van de Ven <arjan@linux.intel.com> 237a192d395ce5d7e5945afa684146d5b0abc53480mbligh */ 247a192d395ce5d7e5945afa684146d5b0abc53480mbligh 257a192d395ce5d7e5945afa684146d5b0abc53480mbligh#include <unistd.h> 267a192d395ce5d7e5945afa684146d5b0abc53480mbligh#include <stdio.h> 277a192d395ce5d7e5945afa684146d5b0abc53480mbligh#include <stdlib.h> 287a192d395ce5d7e5945afa684146d5b0abc53480mbligh#include <string.h> 297a192d395ce5d7e5945afa684146d5b0abc53480mbligh#include <stdint.h> 307a192d395ce5d7e5945afa684146d5b0abc53480mbligh#include <sys/types.h> 317a192d395ce5d7e5945afa684146d5b0abc53480mbligh#include <dirent.h> 327a192d395ce5d7e5945afa684146d5b0abc53480mbligh 337a192d395ce5d7e5945afa684146d5b0abc53480mbligh#include "powertop.h" 347a192d395ce5d7e5945afa684146d5b0abc53480mbligh 357a192d395ce5d7e5945afa684146d5b0abc53480mblighint has_no_xrandr; 367a192d395ce5d7e5945afa684146d5b0abc53480mbligh 377a192d395ce5d7e5945afa684146d5b0abc53480mblighstatic void activate_noTV(void) 387a192d395ce5d7e5945afa684146d5b0abc53480mbligh{ 397a192d395ce5d7e5945afa684146d5b0abc53480mbligh system("xrandr --auto &> /dev/null"); 407a192d395ce5d7e5945afa684146d5b0abc53480mbligh system("xrandr --output TV --off &> /dev/null"); 417a192d395ce5d7e5945afa684146d5b0abc53480mbligh} 427a192d395ce5d7e5945afa684146d5b0abc53480mbligh 437a192d395ce5d7e5945afa684146d5b0abc53480mblighvoid suggest_xrandr_TV_off(void) 447a192d395ce5d7e5945afa684146d5b0abc53480mbligh{ 457a192d395ce5d7e5945afa684146d5b0abc53480mbligh FILE *file; 467a192d395ce5d7e5945afa684146d5b0abc53480mbligh int has_tv = 0; 477a192d395ce5d7e5945afa684146d5b0abc53480mbligh int has_tv_active = 0; 487a192d395ce5d7e5945afa684146d5b0abc53480mbligh char line[1024]; 497a192d395ce5d7e5945afa684146d5b0abc53480mbligh 507a192d395ce5d7e5945afa684146d5b0abc53480mbligh if (has_no_xrandr) 517a192d395ce5d7e5945afa684146d5b0abc53480mbligh return; 527a192d395ce5d7e5945afa684146d5b0abc53480mbligh 537a192d395ce5d7e5945afa684146d5b0abc53480mbligh memset(line, 0, 1024); 547a192d395ce5d7e5945afa684146d5b0abc53480mbligh file = popen("xrandr 2> /dev/null", "r"); 557a192d395ce5d7e5945afa684146d5b0abc53480mbligh if (!file || feof(file)) { 567a192d395ce5d7e5945afa684146d5b0abc53480mbligh has_no_xrandr = 1; 577a192d395ce5d7e5945afa684146d5b0abc53480mbligh return; 587a192d395ce5d7e5945afa684146d5b0abc53480mbligh } 597a192d395ce5d7e5945afa684146d5b0abc53480mbligh while (!feof(file)) { 607a192d395ce5d7e5945afa684146d5b0abc53480mbligh if (fgets(line, 1024, file)==NULL) 617a192d395ce5d7e5945afa684146d5b0abc53480mbligh break; 627a192d395ce5d7e5945afa684146d5b0abc53480mbligh if (line[0]!=' ') { 637a192d395ce5d7e5945afa684146d5b0abc53480mbligh if (line[0]=='T' && line[1]=='V' && line[2]==' ') 647a192d395ce5d7e5945afa684146d5b0abc53480mbligh has_tv = 1; 657a192d395ce5d7e5945afa684146d5b0abc53480mbligh else 667a192d395ce5d7e5945afa684146d5b0abc53480mbligh has_tv = 0; 677a192d395ce5d7e5945afa684146d5b0abc53480mbligh } else { 687a192d395ce5d7e5945afa684146d5b0abc53480mbligh if (strchr(line,'*') && has_tv) 697a192d395ce5d7e5945afa684146d5b0abc53480mbligh has_tv_active = 1; 707a192d395ce5d7e5945afa684146d5b0abc53480mbligh } 717a192d395ce5d7e5945afa684146d5b0abc53480mbligh 727a192d395ce5d7e5945afa684146d5b0abc53480mbligh } 737a192d395ce5d7e5945afa684146d5b0abc53480mbligh pclose(file); 747a192d395ce5d7e5945afa684146d5b0abc53480mbligh if (has_tv_active) 757a192d395ce5d7e5945afa684146d5b0abc53480mbligh add_suggestion(_("Suggestion: disable TV out via: \n" 767a192d395ce5d7e5945afa684146d5b0abc53480mbligh " xrandr --output TV --off \n" 777a192d395ce5d7e5945afa684146d5b0abc53480mbligh "or press the V key."), 787a192d395ce5d7e5945afa684146d5b0abc53480mbligh 35, 'V', _(" V - Disable TV out "), activate_noTV); 797a192d395ce5d7e5945afa684146d5b0abc53480mbligh /* check this only once if no suggestion needed */ 807a192d395ce5d7e5945afa684146d5b0abc53480mbligh else 817a192d395ce5d7e5945afa684146d5b0abc53480mbligh has_no_xrandr = 1; 827a192d395ce5d7e5945afa684146d5b0abc53480mbligh} 83