You are not logged in.
OK, all the time in the screenshots thread we get "What gtk theme is that?", "What is that in the corner?", blah blah blah.
Now, while we try to encourage people to post that with their screenie why don't we make a simple script that grabs info from from the gtkrc's, .xinitrc, etc, and outputs into a nice cowsay-like soundbite?
If we pkg it we can throw in a depends and/or a variety of screenshot taking commands. Then all you have to do it get your nice screenie up, open a term, run foo and *bingo* all the info and no need to run a screenshot command. Easy :-P
It'll take some good awk skills so it'll practice for me! I'll post the basic outline later.
.:update:.
There has been some great work made on this so I have moved the thread here for more attention.
Offline
Can you list what info you'd want?
Offline
Why? Are you bored?
I figured:
From .xinitrc
Anything that follows exec that will give us window manager and few startup apps in many cases.
once we have a few of those in an array we can try and get a few version=`@app --version`, type grabs
Grab the font and theme name from gtkrc2 and wherever KDE keeps it....just for starters...
A list of screenshot commands people use would be good. Then we can use which to check which apps are installed and use the appropriate command.
Offline
i think it's a nice idea...i offer myself as beta tester when you'll have something
/me tracks this topic :oops:
Offline
indeed a nice idea!
want to beta test too if possible
atm i make my screenshots with 'scrot' if it helps.
btw to the gtkrc thing: iirc xfce, gnome, gtk-alone(no of both dm in use) and kde use slightly diffrent places for them? well i dont know, but if its the case it would be more difficult to program this i think
cheers,
detto
Offline
hmmmmm well, i just installed arch LAST night. So far, I really like it Saw this post and thought i'd get it started. I didn't write it in awk, but in bash. It requires 4 programs but usually you want these anyway. Not sure WHAT all you wanted in the list/output, but at least this is a start. Hope you like it.
#!/bin/bash
# Arch Screenshot Taker
# Script takes a screenshot after a 4 second delay, and writes to the image file data.
# Do some error checking
# Requires 4 programs (all useful anyway ;) )... wrjpgcom,imagemagick,rdjpgcom,jhead
if [[ -z $( type -p wrjpgcom ) ]]; then echo -e "The program wrjpgcom -- NOT INSTALLED !";exit ;fi
if [[ -z $( type -p convert ) ]]; then echo -e "ImageMagick -- NOT INSTALLED !";exit ;fi
if [[ -z $( type -p rdjpgcom ) ]]; then echo -e "The program wrjpgcom -- NOT INSTALLED !";exit ;fi
if [[ -z $( type -p jhead ) ]]; then echo -e "The program jhead -- NOT INSTALLED !";exit ;fi
# Check to make sure that a name was given after the command name.
if [[ -z "$1" ]] ; then
echo " ";
echo " ######### COMMAND FAILED ########## ";
echo " USAGE: $0 screenshotname";
echo " EXAMPLE: $0 screenshot1";
echo " Note: There is a 5 second delay after starting";
echo " the program before the screenshot is taken.";
echo " ######### COMMAND FAILED ########## ";echo " ";
else
# Move to the users root directory to store screenshots
cd ~
# Take the screenshot. Change 5 second delay by changing from "pause 5" to something else.
import -window root -pause 5 ${1}.jpg # 5 second delay before screenshot is taken.
# Find some information we want written to the metadata of the image.
windowmanager=`grep -v "#" ~/.xinitrc | grep "exec" > /tmp/wm; cut -b 11- /tmp/wm;rm -f /tmp/wm`
jhead ${1}.jpg > /tmp/wm
filename=`grep "File name" /tmp/wm`
filesize=`grep "File size" /tmp/wm`
filedate=`grep "File date" /tmp/wm`
resolution=`grep "Resolution" /tmp/wm`
rm -f /tmp/wm
processor=`uname -mip`
kernel=`uname -sr`
# REPLACE COMMENTS - First write replaces all comments
wrjpgcom -replace -comment "Screenshot by $USER" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
# Append Comments - All following writes to meta data are appended, instead of replaced.
# wrjpgcom -comment "The window manager is $windowmanager" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
wrjpgcom -comment "---------------------------------" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
wrjpgcom -comment "${filename}" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
wrjpgcom -comment "${filesize}" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
wrjpgcom -comment "${filedate}" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
wrjpgcom -comment "${resolution}" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
wrjpgcom -comment "Window Mngr : ${windowmanager}" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
wrjpgcom -comment "Kernel : ${kernel}" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
wrjpgcom -comment "Processor : ${processor}" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
# Echo out the Meta Data stored on the image.
echo "";
rdjpgcom ${1}.jpg
# Note Konqueror only reads the LAST comment entered... but rdjpcon will read them ALL.
fi
exit 0
Output on the command line looks like this:
[crouse@crouse ~]$ ./archshot.sh screen4.jpg
Screenshot by crouse
---------------------------------
File name : screen4.jpg
File size : 84072 bytes
File date : 2006:08:19 16:44:29
Resolution : 1024 x 768
Window Mngr : kde
Kernel : Linux 2.6.17-ARCH
Processor : i686 Intel(R) Xeon(TM) CPU 1.70GHz GenuineIntel
[crouse@crouse ~]$
Offline
Well, I guess that is start but you only have one thing on there that people ask about in the screenshot thread! I like the idea of gathering kernel info etc but it's not really important in this context. People are much more interested in what apps are running in the screenshot, what gtk/kde/openbox theme it is, what icon set is being used, what font, etc, etc.
I like the implementation though! Here are a few changes I would make though so it is a bit more easy to expand:
--- ast.orig 2006-08-20 09:25:41.000000000 +0100
+++ ast 2006-08-20 09:34:47.000000000 +0100
@@ -2,6 +2,11 @@
# Arch Screenshot Taker
# Script takes a screenshot after a 4 second delay, and writes to the image file data.
+jpg_txt()
+{
+ wrjpgcom -comment "${1}" ${shotname}.jpg > _${shotname}.jpg ; mv _${shotname}.jpg ${shotname}.jpg
+}
+
# Do some error checking
# Requires 4 programs (all useful anyway ;) )... wrjpgcom,imagemagick,rdjpgcom,jhead
if [[ -z $( type -p wrjpgcom ) ]]; then echo -e "The program wrjpgcom -- NOT INSTALLED !";exit ;fi
@@ -20,14 +25,16 @@
echo " ######### COMMAND FAILED ########## ";echo " ";
else
+shotname=${1}
+
# Move to the users root directory to store screenshots
-cd ~
+cd $HOME
# Take the screenshot. Change 5 second delay by changing from "pause 5" to something else.
-import -window root -pause 5 ${1}.jpg # 5 second delay before screenshot is taken.
+import -window root -pause 5 ${shotname}.jpg # 5 second delay before screenshot is taken.
# Find some information we want written to the metadata of the image.
windowmanager=`grep -v "#" ~/.xinitrc | grep "exec" > /tmp/wm; cut -b 11- /tmp/wm;rm -f /tmp/wm`
-jhead ${1}.jpg > /tmp/wm
+jhead ${shotname}.jpg > /tmp/wm
filename=`grep "File name" /tmp/wm`
filesize=`grep "File size" /tmp/wm`
filedate=`grep "File date" /tmp/wm`
@@ -38,22 +45,23 @@
# REPLACE COMMENTS - First write replaces all comments
-wrjpgcom -replace -comment "Screenshot by $USER" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
+wrjpgcom -replace -comment "Screenshot by $USER" ${shotname}.jpg > _${shotname}.jpg ; mv _${shotname}.jpg ${shotname}.jpg
# Append Comments - All following writes to meta data are appended, instead of replaced.
-# wrjpgcom -comment "The window manager is $windowmanager" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
-wrjpgcom -comment "---------------------------------" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
-wrjpgcom -comment "${filename}" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
-wrjpgcom -comment "${filesize}" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
-wrjpgcom -comment "${filedate}" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
-wrjpgcom -comment "${resolution}" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
-wrjpgcom -comment "Window Mngr : ${windowmanager}" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
-wrjpgcom -comment "Kernel : ${kernel}" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
-wrjpgcom -comment "Processor : ${processor}" ${1}.jpg > _${1}.jpg ; mv _${1}.jpg ${1}.jpg
+# jpg_txt "The window manager is $windowmanager"
+
+jpg_txt "---------------------------------"
+jpg_txt "${filename}"
+jpg_txt "${filesize}"
+jpg_txt "${filedate}"
+jpg_txt "${resolution}"
+jpg_txt "Window Mngr : ${windowmanager}"
+jpg_txt "Kernel : ${kernel}"
+jpg_txt "Processor : ${processor}"
# Echo out the Meta Data stored on the image.
echo "";
-rdjpgcom ${1}.jpg
+rdjpgcom ${shotname}.jpg
# Note Konqueror only reads the LAST comment entered... but rdjpcon will read them ALL.
fi
I hope I understood it properly and didn't break it!
Offline
Thanks, Yeah..... the only thing i "knew" for sure was that you would want the window manager name probably..... and i wasn't quite sure how to figure out what apps/themes were running.... i've only been running arch for 2 days (linux for years..but have just started with arch)
It might be possible to pull out some data from a
ps auxf > /tmp/ps ........ shows all the currently running processes, but i'm running kde right now, so i'm not sure what all/where to look for other wm processes.
Interesting idea... and i look forward to seeing what else everyone comes up with and where to find specific information.
Offline
I started this when I first seen this thread and its come up again recently, its very hack-ish with a mix of awk and sed.
It supports Xfce,Gnome,Openbox and Openbox-Gnome, but adding support of other DE should be easy.
#!/bin/bash
if [ "$1" = "-e" ]; then
DE="$2"
if [ "$2" = "Xfce" ];then
WM=`grep Xfwm/ThemeName ~/.config/xfce4/mcs_settings/xfwm4.xml | awk -F "value="" {'print $2'} | sed s@"/>@@g`
UI=`grep Net/ThemeName ~/.config/xfce4/mcs_settings/gtk.xml | awk -F "value="" {'print $2'} | sed s@"/>@@g`
elif [ "$2" = "Gnome" ]; then
WM=`gconftool-2 -g /apps/metacity/general/theme`
UI=`gconftool-2 -g /desktop/gnome/interface/gtk_theme`
elif [ "$2" = "Openbox" ]; then
THEME_LINE=`grep -n "<theme>" ~/.config/openbox/rc.xml | cut -d ":" -f1`
WM=` sed -n $(($THEME_LINE+1))p ~/.config/openbox/rc.xml | sed s/.*<name>// | sed s/<name>//`
UI=`grep include ~/.gtkrc-2.0 | grep gtk-2.0 | awk -F "/gtk-2.0/gtkrc" {'print $1'} | awk -F "/" {'print $NF'}`
elif [ "$2" = "Openbox-Gnome" ];then
THEME_LINE=`grep -n "<theme>" ~/.config/openbox/rc.xml | cut -d ":" -f1`
WM=` sed -n $(($THEME_LINE+1))p ~/.config/openbox/rc.xml | sed s/.*<name>// | sed s/<name>//`
UI=`gconftool-2 -g /desktop/gnome/interface/gtk_theme`
else
echo "Environment $2 not surported"
exit
fi
elif [ "$1" = "-h" ]; then
echo "-e <environment> - Get info for surrported environments.
surrported environment:
Xfce,Gnome,Openbox,Openbox-Gnome
or you do "environment WM UI""
exit
else
DE=$1
UI=$2
WM=$3
fi
echo ""$'e[0;34m'"
__
_=(SDGJT=_
_GTDJHGGFCVS) OS: "$'e[0;37m'"`cat /etc/arch-release`"$'e[0;34m'"
,GTDJGGDTDFBGX0 Kernel: "$'e[0;37m'"`uname -r`"$'e[0;34m'"
JDJDIJHRORVFSBSVL"$'e[0;30m'"-=+=,_"$'e[0;34m'" DE: "$'e[0;37m'"$DE"$'e[0;34m'"
IJFDUFHJNXIXCDXDSV,"$'e[0;30m'" "DEBL"$'e[0;34m'" WM Theme: "$'e[0;37m'"$WM"$'e[0;34m'"
|LKDSDJTDU=OUSCSBFLD."$'e[0;30m'" '?ZWX,"$'e[0;34m'" UI Theme: "$'e[0;37m'"$UI"$'e[0;34m'"
LMDSDSWH=' `?DCBOSI"$'e[0;30m'" DRDS],"$'e[0;34m'"
SDDFDFH' `0YEWD,"$'e[0;30m'" )HDROD"$'e[0;34m'"
!KMDOCG '&GSU|"$'e[0;30m'"_GFHRGO'"$'e[0;34m'"
HKLSGP' "$'e[0;30m'"__"$'e[0;34m'"TKM0"$'e[0;30m'"GHRBV)'"$'e[0;34m'"
JSNRVW' "$'e[0;30m'"__+MNAEC"$'e[0;34m'"IOI,"$'e[0;30m'"BN'"$'e[0;34m'"
HELK[' "$'e[0;30m'" __,=OFFXCBGHC"$'e[0;34m'"FD)
JKGHEH"$'e[0;30m'"_-#DASDFSLSV='"$'e[0;34m'" 'EF
!EHTI !H
`0F' '!
"
To run it do "script -e xfce" or gnome/whatever.
Offline
I actually like this idea, So i've spent 20 minutes working up a script like it. Not the best or "universalist", but i'll try to get it as close as possible.
#!/usr/bin/perl
use Switch;
@wm = ("metacity", "fluxbox", "openbox",
"blackbox", "wmii", "wm", "compiz",
"emerald");
@de = ("gnome");
## You can add more if needed
$x = 0;
$y = 0;
$defaultde = 0;
$found = 0;
$quite = 0; #Prints 'debugging' messages
$version = `cat /etc/arch-release`;
$version =~ s/s+/ /g;
$kernel = `uname -r`;
$kernel =~ s/s+/ /g;
if( @ARGV < 1 ) {
print "No enviroment selected, going by defaults..n" unless $quite == 1;
$defaultde = 1;
} else {
while( $x < @de && $found == 0) {
if( $ARGV[0] =~ /$de[$x]/i ) {
print "DE($ARGV[0]) supported...n" unless $quite == 1;
$found = 1;
}
$x++;
}
die("$ARGV[0] is NOT supported...n") unless $found == 1;
$x = 0;
$found = 0;
}
if( $defaultde == 1 ) {
if( !open(GTKRC, "<", "$ENV{HOME}/.gtkrc-2.0") ) {
print ".gtkrc-2.0 not found...n";
} else {
while( <GTKRC> ) {
if( /include "$ENV{HOME}/.themes/(.+)/gtk-(1|2).0/gtkrc"/ ){
$GTKTHEME = $1;
}
if( /gtk-icon-theme-name.*=.*"(.+)"/ ) {
$GTKICON = $1;
}
if( /gtk-font-name.*=.*"(.+)"/ ) {
$GTKFONT = $1;
}
}
close(GTKRC);
}
if( !open(FEH, "<", "$ENV{HOME}/.fehbg") ) {
print "Feh file not found...n";
} else {
while( <FEH> ) {
if( /feh .+ $ENV{HOME}(.+)/ ) {
$1 =~ /.*/(.+)$/;
$WALL = $1;
}
}
close(FEH);
}
open(XINT, "<", "$ENV{HOME}/.xinitrc")
|| die("$!nFailed to open "~/.xinitrc" for reading...n");
while( <XINT> ) {
next if /^#/;
next if /^s+/;
@exec = split(/&/);
foreach (@exec) {
s/^s+/n/;
s/s+$//;
next if /eval `cat .+/.fehbg`/;
/exec (.+)/ && push(@startup, $1);
}
}
close(XINT);
## Processes First
findWM();
## Couldn't find a WM in PS? Lets check the .xinitrc
if( $WMS eq "" ) {
$WMS = "Unknown";
print "Now checking your .xinitrc for a WM...n" unless $quite == 1;
while( $x < @wm && $found == 0) {
while( $y < @startup ) {
print "Trying '$wm[$x]' with '$startup[$y]'n" unless $quite == 1;
if( $wm[$x] eq $startup[$y] ) {
$WMS = $wm[$x];
print "Found $WMS as WMn" unless $quite == 1;
#unshift(@startup, $WMS);
# Could save the rest of the array for
# showing what else EXEC's ?
# Who knows, you decide!
$found = 1;
last;
}
$y++;
}
$y = 0;
$x++;
}
getWMtheme($WMS) unless $found == 0;
}
} else {
grabDEinfo($ARGV[0]);
}
print "e[0;34m
__
_=(SDGJT=_
_GTDJHGGFCVS) OS: e[0;37m$versione[0;34m
,GTDJGGDTDFBGX0 Kernel: e[0;37m$kernele[0;34m
JDJDIJHRORVFSBSVLe[0;30m-=+=,_e[0;34m WM: e[0;37m$WMSe[0;34m
IJFDUFHJNXIXCDXDSV,e[0;30m "DEBLe[0;34m WM Theme: e[0;37m$WMTHEMEe[0;34m
|LKDSDJTDU=OUSCSBFLD.e[0;30m '?ZWX,e[0;34m GTK Theme: e[0;37m$GTKTHEMEe[0;34m
LMDSDSWH=' `?DCBOSIe[0;30m DRDS],e[0;34m Icons: e[0;37m$GTKICONe[0;34m
SDDFDFH' `0YEWD,e[0;30m )HDRODe[0;34m Wallpaper: e[0;37m$WALLe[0;34m
!KMDOCG '&GSU|e[0;30m_GFHRGOe[0;34m GTK Font: e[0;37m$GTKFONTe[0;34m
HKLSGP' e[0;30m__e[0;34mTKM0e[0;30mGHRBV)e[0;34m
JSNRVW' e[0;30m__+MNAECe[0;34mIOI,e[0;30mBNe[0;34m
HELK[' e[0;30m __,=OFFXCBGHCe[0;34mFD)
JKGHEHe[0;30m_-#DASDFSLSV=e[0;34m 'EF
!EHTI !H
`0F' '!
";
sub getWMtheme {
my $wm = shift @_;
switch ($wm) {
case "openbox" {
open(FILE, "<", "$ENV{HOME}/.config/openbox/rc.xml")
|| die("$!nFailed to open OpenBox rc.xml...n");
while( <FILE> ) {
if( /<name>(.+)</name>/ ) {
print "OB Theme found as $1n" unless $quite == 1;
$WMTHEME = $1;
last;
}
}
close(FILE);
}
case "metacity" {
$WMTHEME = `gconftool-2 -g /apps/metacity/general/theme`;
}
case "fluxbox" {
open(FILE, "<", "$ENV{HOME}/.fluxbox/init")
|| die("$!nFailed to open Fluxbox init file...n");
while( <FILE> ) {
if( /session.styleFile: /.+/(.+)$/ ) {
print "FB Theme found as $1n";
$WMTHEME = $1;
last;
}
}
close(FILE);
}
case "blackbox" {
open(FILE, "<", "$ENV{HOME}/.blackboxrc")
|| die("$!nFailed to open Blackbox .blackboxrc file...n");
while( <FILE> ) {
if( /session.styleFile: /.+/(.+)$/ ) {
print "BB Theme found as $1n";
$WMTHEME = $1;
last;
}
}
close(FILE);
}
else {
$WMTHEME = "Unknown";
}
}
}
sub grabDEinfo {
my $de = shift @_;
switch($de) {
case /gnome/i {
$GTKTHEME = `gconftool-2 -g /desktop/gnome/interface/gtk_theme`;
$GTKICON = `gconftool-2 -g /desktop/gnome/interface/icon_theme`;
$WALL = `gconftool-2 -g /desktop/gnome/background/picture_filename`;
$GTKFONT = `gconftool-2 -g /desktop/gnome/interface/font_name`;
$WALL =~ //.*/(.+)$/;
findWM();
}
}
}
sub findWM {
my $x = 0;
my $found = 0;
$WMS = "Unknown";
$WMTHEME = "Unknown";
print "Trying to find your WM...n" unless $quite == 1;
while( $x < @wm && $found == 0) {
print "Testing $wm[$x] in the PS list..n";
$WMS = `ps -A | awk '{print $4}' | grep $wm[$x]`;
$WMS =~ s/n//;
if( $WMS =~ /^$wm[$x]$/ ) {
print "Found $WMS as your WM..n" unless $quite == 1;
getWMtheme($WMS);
$found = 1;
}
$x++;
}
$found == 0 && print "WM not found, Maybe your WM isn't in the array?...n" unless $quite == 1;
}
[!!] Updated:: 0.2
Checks through the PS list for a DE, rather than basing it on .xinitrc
Added untested support for GNOME
Added more WM Theme checks ( Blackbox, Openbox, Metacity, Fluxbox). Please MSG me with more WM that you use and their config files
rawr
Offline
I tried using your script, but it errors out for me. It's probabily because I don't use feh to set my background.
$ ./info.pl
No enviroment selected, going by defaults..
No such file or directory
Failed to open "~/.fehbg" for reading...
Offline
What DE do you use? I added GNOME support, but its still untested...
rawr
Offline
I'm running fluxbox. Also, I use esetroot to set the background, if thats of any use.
Offline
Any luck with the updated script? ( not with the wallpaper part )
rawr
Offline
No, the new script fails the same way that the first one does. If you need any other info, let me know. I just mentioned that I use esetroot because thats the only lead I had on what might be causing this.
Offline
Try now, it should run through if it found certin files or not
rawr
Offline
Yeah, it works now, although it doesn't find anything past my WM. Also, after running it, the normal text in my terminal turned from white to the blue used in the output. Perhaps you didn't turn off the output color after you were done?
Offline
btw, you can use imagemagic to write the text you script generates on the screenshot itself
Offline
Great work, guys! If you can iron out the bugs I'll add a link to the next screenshot thread
To be honest the background is not a major concern - i mean what use is the name anyway? I rename all the backgrounds I D/L so that is no use to anyone.
As long as you can get GTK theme, icons, WM/DE, that's great. What about KDE though?
You also need to add ion3, fvwm, ratpoison, dwm to the wm list
Am going to sticky this to the desktop env forum so more people see it.
Offline
To be honest the background is not a major concern - i mean what use is the name anyway? I rename all the backgrounds I D/L so that is no use to anyone.
So we can give a special parametr where user might input the URL for backgorunds. For example:
./screen -u http://iamforg.com/forggie.jpg
Kermit.
Offline
I haven't started digging around for this, but if anyone wants to implement it for KDE, plenty of information can be found in ~/.kde/share/config/kdeglobals.
Maybe I'll do that bit if I got time on the weekend.
Some PKGBUILDs: http://members.lycos.co.uk/sweiss3
Offline
If you guys are interested the code i edited to read the gtk settings from gtkrc-2.0 instead of gconf let me know.
Edit: nevermind
Offline
Updated::
+ recoded to be based of the PS list
If you want more WM to be supported please post their config files, Also i still need KDE's files.
XFCE is yet to be tested. Please post any errors, mistakes or improvements.
#!/usr/bin/perl
use Switch;
@wm = ("fluxbox", "openbox", "blackbox",
"xfwm", "metacity");
%de = ("gnome", "gnome-session",
"xfce", "xfce",
"kde", "kde");
$quite = 0; # Prints little debugging messages if set to 0;
$tryWP = 1; # trys to find your wallpaper if set to 0;
## Dont alter after this ##
my $isDE = 0;
my $version = `cat /etc/arch-release`;
my $kernel = `uname -r`;
$version =~ s/s+/ /g;
$kernel =~ s/s+/ /g;
parsePS(2);
$isDE == 0 && print "No DE found, not running one?..n" unless $quite == 1;
if( $isDE == 0 ) {
if( !open(GTKRC, "<", "$ENV{HOME}/.gtkrc-2.0") ) {
print "$ENV{HOME}.gtkrc-2.0 -> $!...n";
} else {
while( <GTKRC> ) {
if( /include "$ENV{HOME}/.themes/(.+)/gtk-(1|2).0/gtkrc"/ ){
$THEME = $1;
}
if( /gtk-icon-theme-name.*=.*"(.+)"/ ) {
$ICON = $1;
}
if( /gtk-font-name.*=.*"(.+)"/ ) {
$FONT = $1;
}
}
close(GTKRC);
}
## Processes First
parsePS(1);
## Couldn't find a WM in PS
$WM =~ /Unknown/ && print "No WM found, yours isn't on the list?...n" unless $quite == 1;
} else {
grabDEinfo($DE);
}
print "e[0;34m
__
_=(SDGJT=_
_GTDJHGGFCVS) OS: e[0;37m$versione[0;34m
,GTDJGGDTDFBGX0 Kernel: e[0;37m$kernele[0;34m
JDJDIJHRORVFSBSVLe[0;30m-=+=,_e[0;34m DE: e[0;37m$DEe[0;34m
IJFDUFHJNXIXCDXDSV,e[0;30m "DEBLe[0;34m WM: e[0;37m$WMe[0;34m
|LKDSDJTDU=OUSCSBFLD.e[0;30m '?ZWX,e[0;34m WM Theme: e[0;37m$WMTHEMEe[0;34m
LMDSDSWH' `?DCBOSIe[0;30m DRDS],e[0;34m Theme: e[0;37m$THEMEe[0;34m
SDDFDFH' `0YEWD,e[0;30m )HDRODe[0;34m Icons: e[0;37m$ICONe[0;34m
!KMDOCG &GSU|e[0;30m_GFHRGO'e[0;34m Font: e[0;37m$FONTe[0;34m
HKLSGP' e[0;30m__e[0;34mTKM0e[0;30mGHRBV)'e[0;34m
JSNRVW' e[0;30m__+MNAECe[0;34mIOI,e[0;30mBN'e[0;34m
HELK[' e[0;30m __,=OFFXCBGHCe[0;34mFD)
JKGHEHe[0;30m_-#DASDFSLSV='e[0;34m 'EF
!EHTI !H
`0F' '!
";
sub parsePS {
my $x = 0;
my $y = 0;
my $found = 0;
my $psl = `ps -A | awk {'print $4'}`;
@psl = split(/n/, $psl);
switch (shift @_) {
case 1 {
$WM = "Unknown";
while( $x < @wm && $found == 0 ) {
while( $y < @psl ) {
print "Testing '$psl[$y]' with '$wm[$x]'n" unless $quite == 1;
if( $psl[$y] =~ /$wm[$x]/ ) {
$WM = $wm[$x];
print "WM found as $WMn" unless $quite == 1;
getWMtheme();
$found = 1;
last;
}
$y++;
}
$y = 0;
$x++;
$found == 1 && last;
}
}
case 2 {
$isDE = 0;
$DE = "None";
while( ($dev, $devid) = each(%de) ) {
while( $x < @psl ) {
print "Testing '$psl[$x]' with '$devid'n" unless $quite == 1;
if( $psl[$x] =~ /$devid/ ) {
$DE = $dev;
print "DE found as $DEn" unless $quite == 1;
$found = 1;
$isDE = 1;
last;
}
$x++;
}
$x = 0;
$found == 1 && last;
}
}
}
}
sub getWMtheme {
switch($WM) {
case "openbox" {
open(FILE, "<", "$ENV{HOME}/.config/openbox/rc.xml")
|| die("$!nFailed to open OpenBox rc.xml...n");
while( <FILE> ) {
if( /<name>(.+)</name>/ ) {
print "OB Theme found as $1n" unless $quite == 1;
$WMTHEME = $1;
last;
}
}
close(FILE);
}
case "metacity" {
$WMTHEME = `gconftool-2 -g /apps/metacity/general/theme`;
}
case "fluxbox" {
open(FILE, "<", "$ENV{HOME}/.fluxbox/init")
|| die("$!nFailed to open Fluxbox init file...n");
while( <FILE> ) {
if( /session.styleFile: /.+/(.+)$/ ) {
print "FB Theme found as $1n";
$WMTHEME = $1;
last;
}
}
close(FILE);
}
case "blackbox" {
open(FILE, "<", "$ENV{HOME}/.blackboxrc")
|| die("$!nFailed to open Blackbox .blackboxrc file...n");
while( <FILE> ) {
if( /session.styleFile: /.+/(.+)$/ ) {
print "BB Theme found as $1n";
$WMTHEME = $1;
last;
}
}
close(FILE);
}
case "xfwm" {
open(FILE, "<", "$ENV{HOME}/.config/xfce4/mcs_settings/xfwm4.xml")
|| die("XFCE4 -> $!...n");
while( <FILE> ) {
if( /<option name="Xfwm/ThemeName" type="string" value="(.+)"/>/ ) {
$WMTHEME = $1;
}
}
close(FILE);
}
else {
$WMTHEME = "Unknown";
}
}
}
sub grabDEinfo {
switch(shift @_) {
case "gnome" {
$THEME = `gconftool-2 -g /desktop/gnome/interface/gtk_theme`;
$ICON = `gconftool-2 -g /desktop/gnome/interface/icon_theme`;
$FONT = `gconftool-2 -g /desktop/gnome/interface/font_name`;
parsePS(1);
}
case "xfce" {
open(FILE, "<", "$ENV{HOME}/.config/xfce4/mcs_settings/gtk.xml")
|| die("XFCE4 GTK -> $!...n");
while( <FILE> ) {
if( /<option name="Gtk/FontName" type="string" value="(.+)"/>/ ) {
$FONT = $1;
}
if( /<option name="Net/IconThemeName" type="string" value="(.+)"/>/ ) {
$ICON = $1;
}
if( /<option name="Net/ThemeName" type="string" value="(.+)"/>/ ) {
$THEME = $1;
}
}
close(FILE);
parsePS(1);
}
}
}
rawr
Offline
xfce now works here
__
_=(SDGJT=_
_GTDJHGGFCVS) OS: Arch Linux 0.7.2 (Gimmick)
,GTDJGGDTDFBGX0 Kernel: 2.6.18-ARCH
JDJDIJHRORVFSBSVL-=+=,_ DE: xfce
IJFDUFHJNXIXCDXDSV, "DEBL WM: xfwm
|LKDSDJTDU=OUSCSBFLD. '?ZWX, WM Theme: Gilouche
LMDSDSWH' `?DCBOSI DRDS], Theme: MurrinaGraphite
SDDFDFH' `0YEWD, )HDROD Icons: Tango
!KMDOCG &GSU|_GFHRGO' Font: Verdana 8
HKLSGP' __TKM0GHRBV)'
JSNRVW' __+MNAECIOI,BN'
HELK[' __,=OFFXCBGHCFD)
JKGHEH_-#DASDFSLSV=' 'EF
!EHTI !H
`0F' '!
There's still the bug that the color doesn't get turned off though, and it turns your prompt blue.
I am a gated community.
Offline
The gtk-theme and icon-theme weren't working for me. I guessed it was because my gtk theme is in /usr/share/themes and I specify my icon theme in gtkrc.mine. So I changed/added to your script a little. I'm not a programmer really, so take it as you will.
Just the part I added to.
parsePS(2);
$isDE == 0 && print "No DE found, not running one?..n" unless $quite == 1;
if( $isDE == 0 ) {
if( !open(GTKRC, "<ENV> $!...n";
} else {
while( <GTKRC> ) {
if( /include "/usr/share/themes/(.+)/gtk-(1|2).0/gtkrc"/ ){
$THEME = $1;
}
if( /gtk-icon-theme-name.*=.*"(.+)"/ ) {
$ICON = $1;
}
if( /gtk-font-name.*=.*"(.+)"/ ) {
$FONT = $1;
}
}
close(GTKRC);
if( !open(GTKRCMINE, "<ENV> $!...n";
} else {
while ( <GTKRCMINE> ) {
if( /gtk-icon-theme-name.*=.*"(.+)"/ ) {
$ICON = $1;
}
}
close(GTKRCMINE);
}
}
At least it works completely for me now
[URL=http://img138.imageshack.us/img138/3822/screenscriptmx6.png][/URL]
Offline