desktop icon zum shell script

K

kimi

blub
hallo leute,

ich habe eine frage, die sicher schon oft gestellt wurde, nur konnte ich leider mit den von mir gefundenen threads und lösungen nichts anfangen.

ich will einen desktop-icon zu einem programm erstellen, welches ich nicht über den paketmanager installiert habe, sondern das als java-programm daherkommt. es gibt ein shellskript im entsprechenden ordner, welches das programm startet.

bisher konnte ich es nur mit

Code:
 cd /pfad/zum/programm/

./programm

starten.

Einen Icon zu erstellen, dessen befehl "/pfad/zum/programm/programm" lautet, bringt leider nichts. aber es gibt doch bestimmt eine möglichkeit, auch solche programme vom desktop aus zu starten?

es handelt sich um lightzone, ein bildbearbeitungsprogramm, welches übrigens seehr zu empfehlen ist. auch den torcs strecken editor könnte man so starten.

Nun bin ich selber hier mit meinem latein am ende (was freilich nix heißen muss) und wollte fragen, ob mir hier jemand helfen kann?

Vielen dank schon einmal,

grüße

kimi
 
müsst doch eigentlich gehen mit /pfad/zum/programm/programm

hast du im script

Code:
#!/pfad/zur/shell
...
...
...
...
 
Shebangs werden von shells interpretiert. Wer sagt denn, dass Icons in einer extra-shell gelauncht werden? Wenns ein bash-Skript ist, versuchs mal mit dem Befehl:
Code:
bash /pfad/zun/skript.sh
Oder direkt das Java-Programm ausführen, sollte (afaik, könnte mich irren) mit:
Code:
java /pfad/zun/skript.jv
gehn.

Edit: Es hätte btw nicht geschadet, wenn du zumindest die DE und den WM angegeben hättest...
 
Du kannst deinem Lieblingsshellemulator (zb konsole oder gnome-terminal, eterm und wie sie alle heisen) auch ein Programm mit geben, dass sie ausfuehren sollen, ich hab das zb fuer irssi (mit konsole)

Code:
konsole -e /usr/bin/irssi
 
vielen dank für die schnellen antworten. ich habe kde und kubuntu installiert.

ich habe den icon-befehl jetzt auf
Code:
 konsole -e /usr/local/LightZone
umgeändert, dann öffnet sich die konsole kurz und schluss war.
könnte das daran legen dass das script nicht auf .sh endet? es hat schlicht garkeine endung. muss ich das dann umbenennen?

grüße und nomel vielen dank

kimi
 
setzt mal den "." davor, der fehlt ja offensichtlich.


Ciao
 
Nein, tut er offensichtlich nicht.

@TE: Was soll das Skript eigentlich tun? Ein externes Java-Programm starten? Warum startest du das Java-Programm nicht "direkt"? Ist das alles Textbasiert oder gibts ne GUI? Etc. pp.
 
gott: naja, ich hab oben nur gesehn, wie er das Script mit Punkt startet und im unteren Pfad fehlt er, daher meine Annahme.

ciao
 
es geht um LightZone, ein Fotobearbeitungsprogramm (s.o.). Da gibt es ein Startscrpit, mit dem ich es starte, genau wie maniadrive (hab ich allerdings inzwischen ein deb), torcs track editor, usw und so fort. ein readme ist nicht dabei, daher weiß ich aber auch nicht, was ich da für ein java dingens starten soll. wenn mich einer eines besseren belehren kann, bin ich sofort dabei...
es handelt sich übrigens, wie die anderen programme, die ich so starte, um gui programme (java programme teilweise), von denen keine pakete vorhanden sind. es tut mir leid, dass ich nicht mehr infos geben kann, weiß allerdings nicht, wo ich noch weitere herbekommen sollte. mich verwundert halt, dass in der easylinux, wo ich auf das programm gestoßen bin, einfach steht "oder erstlellen sie einen icon, passende grafik findet sich im verzeichnis bla."

viele grüße,

kimi
 
@ saeckereier:
Code:
seba@Sebastian:/usr/local/LightZone$ ls -l ./LightZone
-rwxr-xr-x 1 root root 7761 2008-04-20 00:35 ./LightZone
vielleicht hilft es etwas weiter...

grüße

kimi

EDIT:

ich habe jetzt einfach eine verknüpfung gesetzt zum skript, dann kann man es starten. nur halt den icon nicht verändern..^^ man hat halt dann die vorschau auf das script auf dem desktop. nicht schön, aber es funktioniert.
 
Zuletzt bearbeitet:
achso, sorry so hatte ich das nicht verstanden, kann ich natürlich machen.

Code:
#! /bin/sh

# Uncomment the following line to override the JVM search sequence
# INSTALL4J_JAVA_HOME_OVERRIDE=
# Uncomment the following line to add additional VM parameters
# INSTALL4J_ADD_VM_PARAMS=

read_db_entry() {
  if [ -n "$INSTALL4J_NO_DB" ]; then
    return 1
  fi
  db_file=$HOME/.install4j
  if [ ! -f "$db_file" ]; then
    return 1
  fi
  if [ ! -x "$java_exc" ]; then
    return 1
  fi
  found=1
  exec 7< $db_file
  while read r_type r_dir r_ver_major r_ver_minor r_ver_micro r_ver_patch<&7; do
    if [ "$r_type" = "JRE_VERSION" ]; then
      if [ "$r_dir" = "$test_dir" ]; then
        ver_major=$r_ver_major
        ver_minor=$r_ver_minor
        ver_micro=$r_ver_micro
        ver_patch=$r_ver_patch
        found=0
        break
      fi
    fi
  done
  exec 7<&-

  return $found
}

create_db_entry() {
  tested_jvm=true
  echo testing JVM in $test_dir ...
  version_output=`"$bin_dir/java" -version 2>&1`
  is_gcj=`expr "$version_output" : '.*libgcj'`
  if [ "$is_gcj" = "0" ]; then
    java_version=`expr "$version_output" : '.*"\(.*\)".*'`
    ver_major=`expr "$java_version" : '\([0-9][0-9]*\)\..*'`
    ver_minor=`expr "$java_version" : '[0-9][0-9]*\.\([0-9][0-9]*\)\..*'`
    ver_micro=`expr "$java_version" : '[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\).*'`
    ver_patch=`expr "$java_version" : '.*_\(.*\)'`
  fi
  if [ "$ver_patch" = "" ]; then
    ver_patch=0
  fi
  if [ -n "$INSTALL4J_NO_DB" ]; then
    return
  fi
  db_new_file=${db_file}_new
  if [ -f "$db_file" ]; then
    awk '$1 != "'"$test_dir"'" {print $0}' $db_file > $db_new_file
    rm $db_file
    mv $db_new_file $db_file
  fi
  dir_escaped=`echo "$test_dir" | sed -e 's/ /\\\\ /g'`
  echo "JRE_VERSION	$dir_escaped	$ver_major	$ver_minor	$ver_micro	$ver_patch" >> $db_file
}

test_jvm() {
  tested_jvm=na
  test_dir=$1
  bin_dir=$test_dir/bin
  java_exc=$bin_dir/java
  if [ -z "$test_dir" ] || [ ! -d "$bin_dir" ] || [ ! -f "$java_exc" ] || [ ! -x "$java_exc" ]; then
    return
  fi

  tested_jvm=false
  read_db_entry || create_db_entry

  if [ "$ver_major" = "" ]; then
    return;
  fi
  if [ "$ver_major" -lt "1" ]; then
    return;
  elif [ "$ver_major" -eq "1" ]; then
    if [ "$ver_minor" -lt "6" ]; then
      return;
    fi
  fi

  if [ "$ver_major" = "" ]; then
    return;
  fi
  app_java_home=$test_dir
}

add_class_path() {
  if [ -n "$1" ] && [ `expr "$1" : '.*\*'` -eq "0" ]; then
    local_classpath="$local_classpath${local_classpath:+:}$1"
  fi
}

old_pwd=`pwd`

progname=`basename "$0"`
linkdir=`dirname "$0"`

cd "$linkdir"
prg="$progname"

while [ -h "$prg" ] ; do
  ls=`ls -ld "$prg"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '.*/.*' > /dev/null; then
    prg="$link"
  else
    prg="`dirname $prg`/$link"
  fi
done

prg_dir=`dirname "$prg"`
cd "$prg_dir"
prg_dir=`pwd`
app_home=.
cd "$app_home"
app_home=`pwd`
bundled_jre_home="$app_home/jre"

cd "$old_pwd"


if [ -f "$bundled_jre_home/lib/rt.jar.pack" ]; then
  old_pwd200=`pwd`
  cd "$bundled_jre_home"
  echo "Preparing JRE ..."
  jar_files="lib/rt.jar lib/charsets.jar lib/plugin.jar lib/deploy.jar lib/ext/localedata.jar lib/jsse.jar"
  for jar_file in $jar_files
  do
    if [ -f "${jar_file}.pack" ]; then
      bin/unpack200 -r ${jar_file}.pack $jar_file

      if [ $? -ne 0 ]; then
        echo "Error unpacking jar files. Aborting."
        echo "You might need administrative priviledges for this operation."
exit 1
      fi
    fi
  done
  cd "$old_pwd200"
fi
if [ -z "$app_java_home" ]; then
  test_jvm $INSTALL4J_JAVA_HOME_OVERRIDE
fi

if [ -z "$app_java_home" ]; then
if [ -f "$app_home/.install4j/pref_jre.cfg" ]; then
    read file_jvm_home < "$app_home/.install4j/pref_jre.cfg"
    test_jvm "$file_jvm_home"
    if [ -z "$app_java_home" ] && [ $tested_jvm = "false" ]; then
        rm $HOME/.install4j
        test_jvm "$file_jvm_home"
    fi
fi
fi

if [ -z "$app_java_home" ]; then
  test_jvm "$app_home/jre"
  if [ -z "$app_java_home" ] && [ $tested_jvm = "false" ]; then
    rm $HOME/.install4j
    test_jvm "$app_home/jre"
  fi
fi

if [ -z "$app_java_home" ]; then
  path_java=`which java 2> /dev/null`
  path_java_home=`expr "$path_java" : '\(.*\)/bin/java$'`
  test_jvm $path_java_home
fi


if [ -z "$app_java_home" ]; then
  common_jvm_locations="/opt/i4j_jres/* /usr/local/i4j_jres/* /usr/bin/java* /usr/bin/jdk* /usr/bin/jre* /usr/bin/j2*re* /usr/bin/j2sdk* /usr/java* /usr/jdk* /usr/jre* /usr/j2*re* /usr/j2sdk* /usr/java/j2*re* /usr/java/j2sdk* /usr/java/jdk* /usr/java/jre* /usr/lib/java/jre /usr/local/java* /usr/local/jdk* /usr/local/jre* /usr/local/j2*re* /usr/local/j2sdk* /usr/lib/java* /usr/lib/jdk* /usr/lib/jre* /usr/lib/j2*re* /usr/lib/j2sdk*"
  for current_location in $common_jvm_locations
  do
if [ -z "$app_java_home" ]; then
  test_jvm $current_location
fi

  done
fi

if [ -z "$app_java_home" ]; then
  test_jvm $JAVA_HOME
fi

if [ -z "$app_java_home" ]; then
  test_jvm $JDK_HOME
fi

if [ -z "$app_java_home" ]; then
  test_jvm $INSTALL4J_JAVA_HOME
fi

if [ -z "$app_java_home" ]; then
if [ -f "$app_home/.install4j/inst_jre.cfg" ]; then
    read file_jvm_home < "$app_home/.install4j/inst_jre.cfg"
    test_jvm "$file_jvm_home"
    if [ -z "$app_java_home" ] && [ $tested_jvm = "false" ]; then
        rm $HOME/.install4j
        test_jvm "$file_jvm_home"
    fi
fi
fi

if [ -z "$app_java_home" ]; then
  echo No suitable Java Virtual Machine could be found on your system.
  echo The version of the JVM must be at least 1.6.
  echo Please define INSTALL4J_JAVA_HOME to point to a suitable JVM.
  echo You can also try to delete the JVM cache file $HOME/.install4j
exit 83
fi



vmoptions_val=""
vmoptions_file="$prg_dir/$progname.vmoptions"
if [ -r "$vmoptions_file" ]; then
  exec 8< "$vmoptions_file"
  while read cur_option<&8; do
    is_comment=`expr "$cur_option" : ' *#.*'`
    if [ "$is_comment" = "0" ]; then 
      vmoptions_val="$vmoptions_val $cur_option"
    fi
  done
  exec 8<&-
fi
INSTALL4J_ADD_VM_PARAMS="$INSTALL4J_ADD_VM_PARAMS $vmoptions_val"

local_classpath=""
add_class_path "$app_home/.install4j/i4jruntime.jar"
for i in `ls "$app_home/." | egrep "\.(jar$|zip$)"`
do
  add_class_path "$app_home/./$i"
done

LD_LIBRARY_PATH="$app_home/.:$LD_LIBRARY_PATH"
DYLD_LIBRARY_PATH="$app_home/.:$DYLD_LIBRARY_PATH"
SHLIB_PATH="$app_home/.:$SHLIB_PATH"
LIBPATH="$app_home/.:$LIBPATH"
LD_LIBRARYN32_PATH="$app_home/.:$LD_LIBRARYN32_PATH"
LD_LIBRARYN64_PATH="$app_home/.:$LD_LIBRARYN64_PATH"
export LD_LIBRARY_PATH
export DYLD_LIBRARY_PATH
export SHLIB_PATH
export LIBPATH
export LD_LIBRARYN32_PATH
export LD_LIBRARYN64_PATH

#!/bin/bash
#
# Find the amount of physical memory, divide that number by two, and use the
# result to append a Java heap limit option to the install4j environment
# variable that determines VM options.
#
# If the physical memory exceeds 4GB, then cap the Java heap limit at its
# intrinsic limit of 2GB.  (GB figures are rounded down, to accomodate slop
# in how linux counts memory and how Java fails near its limit.)

totalmem=`cat /proc/meminfo | grep MemTotal | sed -r 's/.* ([0-9]+) .*/\1/'`
fourGB=4000000
twoGB=2000000
if [ $totalmem -ge $fourGB ]; then
  maxmem=$twoGB
else
  maxmem=$(( $totalmem / 2 ))
fi
option=-Xmx${maxmem}k

INSTALL4J_ADD_VM_PARAMS="$INSTALL4J_ADD_VM_PARAMS $option"

"$app_java_home/bin/java" -client -Dinstall4j.jvmDir="$app_java_home" -Dinstall4j.appDir="$app_home"  -Dexe4j.moduleName="$prg_dir/$prg" -Dcom.lightcrafts.licensetype=ESD $INSTALL4J_ADD_VM_PARAMS -classpath "$local_classpath" com.install4j.runtime.Launcher launch com.lightcrafts.platform.linux.LinuxLauncher true false "$prg_dir/LightZone.log" "$prg_dir/LightZone.log" false  true false "" true true -1 -1 "" 20 20 "Arial" "0,0,0" 8 500 "" 20 40 "Arial" "0,0,0" 8 500 -1  "$@"


exit $?

ich hoffe, dass das etwas helfen kann.

grüße

kimi
 
nimm mal nach dem Shebang (#!) das Leerzeichen raus
 
@ saeckereier:

vielen dank, jedoch hat das leider nichts verändert, ich konnte das Programm weiterhin nur über die Verknüpfung starten, ich habe es mit
Code:
konsole /pfad/
und nur dem pfad versucht, beidemale tat sich nichts bzw die konsole ging auf und fertig war.

grüße

kimi
 
Setz mal hinter den Konsolenaufruf ein --noclose dann hast Zeit eventuelle Fehlermeldungen zu lesen.
Code:
konsole --noclose -e /pfad/zum/skript
 
@l0s3r:
die konsole schließt sich trotzdem... nach ungefähr ner halben sekunde oder weniger...
ich habe dann das ganze in der konsole ausgeführt, da kam das raus:

Code:
seba@Sebastian:~$ konsole --noclose -e /usr/local/LightZone/Lightzone
konsole: ERROR: can not execute /usr/local/LightZone/Lightzone
seba@Sebastian:~$

ausführbar ist das script natürlich...

grüße

kimi
 

Ähnliche Themen

verknüpfung auf desktop erstellen

Fluxbox: Einige Fragen

[HowTo] TeamSpeak 2 - RC2 - Server (Deutsch/Englisch)

Zurück
Oben