Dr.Fuzzy Δημοσ. 15 Ιουνίου 2012 Δημοσ. 15 Ιουνίου 2012 Λοιπόν συνοπτικά, προσπαθώ να φτιάξω έναν launcher για να ξεκινάει ένα εργαλείο που χρησιμοποιώ, συγκεκριμένα το Modelsim. Στην πραγματικότητα είναι κάτι πολύ απλό και όμως με το συγκεκριμένο εργαλείο δεν δουλεύει! Πιο συγκεκριμένα o launcher είναι ως εξής: Type: Application in Terminal Name: Modelsim 6.5 Command: sh -c '/opt/modelsim-6.5/modeltech/bin/vsim' Comment: Launch Modelsim 6.5 ή > #!/usr/bin/env xdg-open [Desktop Entry] Version=1.0 Type=Application Terminal=true Icon[en_US]=gnome-panel-launcher Name[en_US]=Modelsim 6.5 Exec=sh -c '/opt/modelsim-6.5/modeltech/bin/vsim' Comment[en_US]=Launch Modelsim 6.5 Name=Modelsim 6.5 Comment=Launch Modelsim 6.5 Icon=gnome-panel-launcher δυστυχώς το μόνο που γίνεται όταν το κάνω double-click είναι να ανοίγει ένα terminal για μισό δευτερόλεπτο και να κλείνει αμέσως μετά. Έχω δοκιμάσει σχεδόν τα πάντα, όπως Terminal=false, χωρίς sh, με csh, tcsh, και τίποτα! Από κονσόλα φυσικά τρέχει κανονικά. Παραθέτω επίσης και το script του vsim μήπως και βοηθήσει: > #!/bin/sh # #Copyright 1991-2009 Mentor Graphics Corporation # #All Rights Reserved. # #THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS THE PROPERTY OF #MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS SUBJECT TO LICENSE TERMS. # # MTI_VCO_MODE environment variable may be set to "32" or "64" # to force selection of 32-bit or 64-bit platform directory for executables. mode=${MTI_VCO_MODE:-""} PATH="/bin:$PATH" arg0=$0 cmd=`basename $arg0` uname=`uname` utype=`uname -r` umach=`uname -m` case $uname in AIX) islink=-L ;; CYGWIN_NT*) arg0=`dirname $arg0` islink=-h ;; *) islink=-h ;; esac while [ $islink $arg0 ] ; do x=`/bin/ls -ld $arg0` x=`expr "$x" : '.* \(.*\)'` case $x in /*) arg0=$x ;; *) arg0=`dirname $arg0`/$x ;; esac done dir=`dirname $arg0` vco=${uname}${utype} case $vco in SunOS4*) echo "Error: $cmd is not supported on ${uname} ${utype}" exit 1 ;; SunOS5.5*) echo "Error: $cmd is not supported on ${uname} ${utype}" exit 1 ;; SunOS5.6*) echo "Error: $cmd is not supported on ${uname} ${utype}" exit 1 ;; SunOS5.7*) echo "Error: $cmd is not supported on ${uname} ${utype}" exit 1 ;; SunOS5*) # Use 64-bit platform only if 32-bit is not installed and OS and cpu # support 64-bit. User may set PATH to platform-specific directory or set # environment variable MTI_VCO_MODE to 32 or 64 to override default # behavior. # if [ -x /bin/isainfo ] ; then isa="`/bin/isainfo -n 2>&1`" else isa="" fi case $mode.$isa in 32.amd*) vco="sunos5x86" ;; 64.amd*) vco="sunos5x86_64" ;; .amd32*) vco="sunos5x86" ;; .amd*) if [ -x /bin/getconf ] \ && /bin/getconf _XBS5_LP64_OFF64 > /dev/null 2>&1 \ && [ ! -x $dir/sunos5x86/vsim ] \ && [ -x $dir/sunos5x86_64/vsim ] ; then vco="sunos5x86_64" else vco="sunos5x86" fi ;; 32.i386*) vco="sunos5x86" ;; 64.i386*) vco="sunos5x86_64" ;; .i386*) if [ -x /bin/getconf ] \ && /bin/getconf _XBS5_LP64_OFF64 > /dev/null 2>&1 \ && [ ! -x $dir/sunos5x86/vsim ] \ && [ -x $dir/sunos5x86_64/vsim ] ; then vco="sunos5x86_64" else vco="sunos5x86" fi ;; 32.sparc*) vco="sunos5" ;; 64.sparc*) vco="sunos5v9" ;; .sparcv9*) if [ -x /bin/getconf ] \ && /bin/getconf _XBS5_LP64_OFF64 > /dev/null 2>&1 \ && [ ! -x $dir/sunos5/vsim ] \ && [ -x $dir/sunos5v9/vsim ] ; then vco="sunos5v9" else vco="sunos5" fi ;; *) vco="sunos5" ;; esac ;; HP-UX*) # Use hpux_ia64 if IA-64 architecture. # # Use hppa64 platform only if hp700 is not installed # and OS and cpu support 64-bit. User should set PATH to # platform-specific directory to override default behavior. # # Use hp700_1020 platform only if hp700 is not installed # and hppa64 is not installed or OS/CPU doesn't support it. if [ "$mode" != "32" ] \ && [ "$umach" = "ia64" ] \ && ( [ "$mode" = "64" ] \ || [ -x $dir/hpux_$umach/vsim ] \ || [ ! -x $dir/hp700/vsim ] ) ; then vco="hpux_ia64" elif [ "$mode" != "32" ] \ && [ "$umach" != "ia64" ] \ && ( [ "$mode" = "64" ] \ || ( [ ! -x $dir/hp700/vsim ] \ && [ -x $dir/hppa64/vsim ] \ && [ -x /bin/getconf ] \ && [ "`/bin/getconf KERNEL_BITS 2>&1`" = "64" ] ) ) ; then vco="hppa64" elif [ ! -x $dir/hp700/vsim ] \ && [ -x $dir/hp700_1020/vsim ] ; then vco="hp700_1020" else vco="hp700" fi ;; AIX*) # Use rs64 platform only if rs6000 is not installed # and OS and cpu support 64-bit. User should set PATH to # platform-specific directory to override default behavior. if [ "$mode" != "32" ] \ && ( [ "$mode" = "64" ] \ || ( [ ! -x $dir/rs6000/vsim ] \ && [ -x $dir/rs64/vsim ] \ && [ -x /bin/getconf ] \ && [ "`/bin/getconf _XBS5_LP64_OFF64 2>&1`" = "1" ] \ && /bin/locale64 > /dev/null 2>&1 ) ) ; then vco="rs64" else vco="rs6000" fi ;; Linux*) # If IA-64 or X86-64 architecture and machine-specific vsim is not # installed but linux vsim is available, use linux platform. # Otherwise use machine-specific platform. # if [ "$mode" != "32" ] \ && ( [ "$umach" = "ia64" ] \ || [ "$umach" = "x86_64" ] ) \ && ( [ "$mode" = "64" ] \ || [ -x $dir/linux_$umach/vsim ] \ || [ ! -x $dir/linux/vsim ] ) ; then if [ "$umach" = "ia64" ] && [ -x $dir/linux_ia64_gcc3/vsim ]; then vco="linux_ia64_gcc3" else vco="linux_$umach" fi else if [ "$mode" != "64" ] \ && [ -x $dir/linux_gcc3/vsim ] \ && [ ! -x $dir/linux/vsim ]; then vco="linux_gcc3" else case $utype in 2.4.[7-9]*) vco="linux" ;; 2.4.[1-9][0-9]*) vco="linux" ;; 2.[5-9]*) vco="linux" ;; 2.[1-9][0-9]*) vco="linux" ;; *) vco="linux_rh60" ;; esac fi fi ;; Win*) if [ "$mode" = "64" ] ; then echo "Error: 64 bit $cmd is not supported on ${uname}" exit 1 fi vco="win32" ;; CYGWIN_NT*) # Cygwin environment on a Windows platform if [ "$mode" = "64" ] ; then echo "Error: 64 bit $cmd is not supported on ${uname}" exit 1 fi vco="win32" ;; *) vco="unknown" ;; esac case $cmd in qhdir) cmd=vdir ;; qhmap) cmd=vmap ;; qvlcom) cmd=vlog ;; qhcvt) cmd=../convert.tcl ;; qhlib) cmd=vlib ;; qhsim) cmd=vsim ;; qhdel) cmd=vdel ;; qhmake) cmd=vmake ;; qvhcom) cmd=vcom ;; qhgencomp) cmd=vgencomp ;; vco) echo $vco exit ;; esac # verify that we can find the command to execute. if [ -x $dir/$vco/$cmd ] ; then arg0=$dir/$vco/$cmd else # if bin nolonger has symbolic links in it then # we need to look up and over f2=$dir/$vco/$cmd if [ -x $f2 ] ; then arg0=$f2 elif [ -x $dir/${vco}pe/$cmd ] ; then arg0=$dir/${vco}pe/$cmd elif [ -x $dir/${vco}le/$cmd ] ; then arg0=$dir/${vco}le/$cmd else # Last ditch effort. Use original arg0 and try it! d2=`dirname $0` f2=$d2/$vco/$cmd if [ -x $f2 ] ; then arg0=$f2 else echo "Error: cannot find $dir/$vco/$cmd" exit 1 fi fi fi if [ -z "$*" ] ; then exec $arg0 else exec $arg0 "$@" fi το script ανάλογα την πλατφόρμα καλει το σωστό vsim, πχ στην περίπτωση μου, >if [ "$mode" != "64" ] \ && [ -x $dir/linux_gcc3/vsim ] Στο google το μόνο που κατάφερα να βρω είναι κάποιον που το έκανε σε CentOS με επιτυχία με το ίδιο script του launcher που δίνω παραπάνω. Παρεμπιπτόντως είμαι σε Ubuntu 12.04 LTS 64bit. Μου έχει σπάσει τα νεύρα αν και ξέρω ότι δεν έχει σημασία, σπάζομαι και έχω λυσσάξει που δεν δουλεύει!
Dr.Fuzzy Δημοσ. 15 Ιουνίου 2012 Μέλος Δημοσ. 15 Ιουνίου 2012 δοκίμασε χωρίς το -c το έχω δοκιμάσει....ναδα!
moukoublen Δημοσ. 15 Ιουνίου 2012 Δημοσ. 15 Ιουνίου 2012 Από κονσόλα φυσικά τρέχει κανονικά. Δοκίμασε να βγάλεις τελείως το sh -c αφού πρώτα έχεις κάνει το script (πιθανόν να είναι ήδη) executable. Και τελικά να γίνει έτσι: > Exec=/opt/modelsim-6.5/modeltech/bin/vsim Π.χ. στο netbeans που έχει επίσης ένα script έχω κάνει αυτό ακριβώς, έχω βγάλει το sh που είχε και δηλώνω στο Exec του .desktop κατευθείαν το script. Αυτό το έκανα όχι γιατί είχα κάποιο πρόβλημα με την εκτέλεση του script αλλα γιατι οπως ήταν πριν δεν μπορούσα να περάσω κάτι παραμέτρους στο script σχετικα με το loook and feel.
Dr.Fuzzy Δημοσ. 15 Ιουνίου 2012 Μέλος Δημοσ. 15 Ιουνίου 2012 Δοκίμασε να βγάλεις τελείως το sh -c αφού πρώτα έχεις κάνει το script (πιθανόν να είναι ήδη) executable. Και τελικά να γίνει έτσι: > Exec=/opt/modelsim-6.5/modeltech/bin/vsim Το script είναι exec, το έχω προσπαθήσει και χωρίς sh -c...νιεντε!
twiner Δημοσ. 15 Ιουνίου 2012 Δημοσ. 15 Ιουνίου 2012 φτιάξε ένα σκριπτάκι test.sh στο home σου, που να περιέχει μόνο: > cd /opt/modelsim-6.5/modeltech/bin/;./vsim κάντο εκτελέσιμο, και βάλε τη διαδρομή του στο Exec
moukoublen Δημοσ. 15 Ιουνίου 2012 Δημοσ. 15 Ιουνίου 2012 Όταν τρέχει κανονικά απο κονσόλα, τι γράφεις σε αυτή;
Dr.Fuzzy Δημοσ. 15 Ιουνίου 2012 Μέλος Δημοσ. 15 Ιουνίου 2012 (επεξεργασμένο) Όταν τρέχει κανονικά απο κονσόλα, τι γράφεις σε αυτή; >vsim & φτιάξε ένα σκριπτάκι test.sh στο home σου, που να περιέχει μόνο: > cd /opt/modelsim-6.5/modeltech/bin/;./vsim κάντο εκτελέσιμο, και βάλε τη διαδρομή του στο Exec ΟΚ, το θέμα αποκτάει ενδιαφέρον, λοιπόν, έφτιαξα το σκριπτάκι και πάλι τα ίδια. Την ώρα που κλίνει το shell παρατήρησα ότι κάτι τυπώνει, οπότε το άλλαξα λίγο: > #!/bin/sh # #run_vsim.sh cd /opt/modelsim-6.5/modeltech/bin/ echo 'Launching vsim...' echo ./vsim sleep 5 και παραπονιέται για το License για κάποιο λόγο, δηλαδή: Launching vsim... Unable to find the license file. It appears that your license file environment variable (e.g., LM_LICENSE_FILE) is not set correctly. Unable to checkout a license. Vsim is closing. ** Fatal: Invalid license environment. Application closing. το οποίο είναι περίεργο διότι το δηλώνω μέσα στο .bashrc μου, έτσι: > # Modelsim ########## export PATH=/opt/modelsim-6.5/modeltech/bin:${PATH} export LM_LICENSE_FILE=/home/delk/flexlm/license.dat export MGLS_LICENSE_FILE=${LM_LICENSE_FILE} άρα όταν εκτελείται ο launcher και στη συνέχεια το test.sh για κάποιο λόγο στο session του terminal που ανοίγει δεν γίνεται source το .bashrc οπότε δεν ορίζονται τα path variables! Δοκίμασα λοιπόν τον παρακάτω μπακαλίστικο τρόπο, να δηλώσω πριν την εκτέλεση του vsim μέσα στο run_vsim.sh τα variables ως εξής: > #!/bin/sh # #run_vsim.sh # Modelsim ########## export PATH=/opt/modelsim-6.5/modeltech/bin:${PATH} export LM_LICENSE_FILE=/home/delk/flexlm/license.dat export MGLS_LICENSE_FILE=${LM_LICENSE_FILE} cd /opt/modelsim-6.5/modeltech/bin/ echo 'Launching vsim...' echo ./vsim ....και ναι δούλεψε επιτέλους!!! Το θέμα είναι γιατί δεν γίνεται source το .bashrc εξαρχής εφόσον σηκώνεται shell πριν τρέξει το vsim; Γενικά η πατέντα μου είναι σωστή, παίρνει κάποια βελτίωση; UPDATE! To variable PATH μέσα στο script δεν περνάει για κάποιο λόγο, δηλαδή αν κάνω comment out το #cd /opt/modelsim-6.5/modeltech/bin/ δεν βρίσκει το ./vsim, οπότε το άλλαξα σε: >#!/bin/sh # #run_vsim.sh # Modelsim ########## export LM_LICENSE_FILE=/home/delk/flexlm/license.dat export MGLS_LICENSE_FILE=${LM_LICENSE_FILE} cd /opt/modelsim-6.5/modeltech/bin/ echo 'Launching vsim...' echo ./vsim Περίεργο μου φαίνεται! Επεξ/σία 16 Ιουνίου 2012 από Dr.Fuzzy
semaphor Δημοσ. 19 Ιουνίου 2012 Δημοσ. 19 Ιουνίου 2012 Κανένας; Για δοκήμασε(αν και δεν νομίζω...): > setsid sh -c '/opt/modelsim-6.5/modeltech/bin/vsim'& Υ.Γ. Δεν είχα δεί το export PATH=/opt/modelsim-6.5/modeltech/bin:${PATH} export LM_LICENSE_FILE=/home/delk/flexlm/license.dat export MGLS_LICENSE_FILE=${LM_LICENSE_FILE} Λογικα δεν εχει προλαβει να φορτοσει το .bashrc Για δοκήμασε: > setsid echo sleep 10\;sh -c \'/opt/modelsim-6.5/modeltech/bin/vsim\'\& | sh Κοινός run in new session ενα sh στο οποίο αφού περάσουν 10 sec θα τρέξει sh -c '/opt/modelsim-6.5/modeltech/bin/vsim' Υ.Γ.2: έχει λουκούμι τριαντάφυλλο?? Υ.Γ.3: Σε αυτό που έγραψα πώς πάει η προτερεότιτα?? Πώς ορίζεις στο bash προτερεότιτα??
Dr.Fuzzy Δημοσ. 20 Ιουνίου 2012 Μέλος Δημοσ. 20 Ιουνίου 2012 Καλή προσπάθεια...αλλά δυστυχώς όχι! Ιδού: >echo sleep 5\;sh -c \'/opt/modelsim-6.5/modeltech/bin/vsim\'\& | sh;sleep 5 >Unable to find the license file. It appears that your license file environment variable (e.g., LM_LICENSE_FILE) is not set correctly. Unable to checkout a license. Vsim is closing. ** Fatal: Invalid license environment. Application closing. Βρες το και όσα λουκούμια θες!
semaphor Δημοσ. 20 Ιουνίου 2012 Δημοσ. 20 Ιουνίου 2012 Δεν ξερω τι παιζει... Για κάποιο λόγο δεν φορτώνει το .bashrc τρέχτο έτσι: > Exec=/bin/bash -c '. ~/.bashrc; /opt/modelsim-6.5/modeltech/bin/vsim' http://www.rekk.de/bloggy/2009/gnome-application-launcher-run-application-in-certain-directory/ Περίεργο bug πάντος.... http://stackoverflow.com/questions/4477328/bashrc-not-read-when-shell-script-is-invoked-from-desktop-shortcut When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior. When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists. When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc. Long story short, if you want non-interactive shell's to have certain ENV vars set, then put them in ~/.bash_profile instead of ~/.bashrc πλάκα πλάκα δοκίμαστο μια και έτσι... > Exec=sh --login -c '/opt/modelsim-6.5/modeltech/bin/vsim'
mphxths Δημοσ. 20 Ιουνίου 2012 Δημοσ. 20 Ιουνίου 2012 Φιλε Dr. Fuzzy Αν και δεν ειμαι ειδημωνας στο σκριπτινγκ...αυτο που πιστευω εγω οτι φταιει που δεν γινεται source to .bashrc ειναι το "#!/bin/sh" στην αρχη του σκριπτ για δοκιμασε το #!/bin/bash -i
Dr.Fuzzy Δημοσ. 21 Ιουνίου 2012 Μέλος Δημοσ. 21 Ιουνίου 2012 @semaphor, @mphxths μπράβο και στους δύο! Κερδίσατε από ένα πακέτο λουκούμια! Λοιπόν έχουμε και λέμε... @semaphor όντως πρέπει να είναι bug, μπράβο που το ξετρύπωσες, οπότε έβαλα τα env variables στο .bash_profile και μέσα στο launcher τον πρώτο τρόπο (source το .bash_profile και μετά vsim) και ναι δουλεύει! @mphxths έχεις δίκιο, δεν το είχα σκεφτεί (που να ήσουν και ειδήμων δηλαδή!), το άλλαξα και γίνεται source κανονικά το .bashrc και δουλεύει. Παρόλα αυτά θα προτιμήσω τον τρόπο του semaphor διότι έτσι γλυτώνω το ενδιάμεσο run_vsim.sh που καλεί ο launcher. Μια τελευταία ερώτηση, αν δεν σας έχω πρήξει είδη! Υπάρχει τρόπος αφού σηκωθεί το modelsim να 1. αποδεσμεύεται και 2. να κλείνει το terminal ή έστω να γίνεται minimized αυτόματα; Για το πρώτο σκεφτόμουν κάτι σαν $ctrl-z και μετά bg για το δεύτερο μάλλον δύσκολο το βλέπω.
semaphor Δημοσ. 21 Ιουνίου 2012 Δημοσ. 21 Ιουνίου 2012 Μια τελευταία ερώτηση, αν δεν σας έχω πρήξει είδη! Υπάρχει τρόπος αφού σηκωθεί το modelsim να 1. αποδεσμεύεται και 2. να κλείνει το terminal ή έστω να γίνεται minimized αυτόματα; Για το πρώτο σκεφτόμουν κάτι σαν $ctrl-z και μετά bg για το δεύτερο μάλλον δύσκολο το βλέπω. 1. αποδεσμεύεται: Μπορείς να ξεκινήσεις μια εφαρμογή με: > setsid vsim & nohup vsim & ή vsim & disown και για μια που τρέχει... > ctrl-z $bg $disown %1 2. να κλείνει το terminal > exit Για δοκίμασε.. > Exec=/bin/bash -c '. ~/.bashrc; setsid /opt/modelsim-6.5/modeltech/bin/vsim & ; exit'
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα