arduino / Arduino

Arduino IDE 1.x
https://www.arduino.cc/en/software
Other
14.18k stars 7.01k forks source link

Unexpected appearance of Arduino IDE using CLI #1970

Open hanabanana opened 10 years ago

hanabanana commented 10 years ago

I tried using the official CLI of arduino 1.5.5-r2. It worked except that it opened up the Arduino IDE window after issuing the command, compiled and downloaded the sketch, then autoclosed itself. This is not consistent with what has been described in the documents. Is this a known bug? If so, is there a workaround like setting a hidden flag or something?

Thanks for any help.

matthijskooijman commented 10 years ago

This was fixed in 1.5.6 already.

hanabanana commented 10 years ago

Thanks, Matthijs. I tried it out and it no longer shows the content of the IDE but just the Arduino logo. Is there a way to make everything completely hidden as in not show anything?

matthijskooijman commented 10 years ago

Oh, the splash screen of course. I've been developing this on Linux, which I think doesn't show the splash screen (or perhaps it's only used in release builds, dunno). Perhaps there is a (hidden) preference to disable the splash screen altogether, though I do not think there is a comprehensive list of them anywhere.

In any case, I'll see if I can fix this in the code for the next release. Thanks for reporting.

matthijskooijman commented 10 years ago

@matthijskooijman

matthijskooijman commented 10 years ago

Hmm, looking around it seems the splash screen is shown by the launcher, not by the java application itself. I think this means we won't be able to toggle it based on a commandline option.

However, perhaps we can make an arduino.exe to run from the commandline and a arduino_gui.exe to run from e.g. the startmenu? Both binaries would be identical, except that only the latter uses the splash screen.

As a side effect, this means that if you run arduino from the commandline without --verify or --upload, the GUI will be shown without the splash screen, but I don't think that is a problem in any way.

@cmaglie, how does that sound? Are there other options?

ffissore commented 9 years ago

Sorry for the late reply. Since release 1.5.7, the Windows version has two ways for starting the IDE: arduino.exe will show the splash screen, arduino_debug.exe will not and will echo to the terminal whatever gets printed on the black lower part of the ide.

Lauszus commented 9 years ago

This is still a issue on Mac OS X. I got it working by removing: https://github.com/arduino/Arduino/blob/master/build/build.xml#L321, but of course that is not a usable fix.

ffissore commented 9 years ago

Yep. Problem is that splash screen is a command line arg. On Linux we have a bash script, so we may make args dynamic. On win and mac they are not. On win you can use arduino_debug (although the name looks weird) but on mac we have one binary only, so no joy

FlsZen commented 9 years ago

In addition to Lauszus' suggestion, I also wanted the dock icon to not show so I added "-Dapple.awt.UIElement=true" into Info.plist.

ffissore commented 9 years ago

I've googled around once more and I'm sorry to say this kind of macosx issues are a "wontfix". Tagging them as such and leaving them open until something better than a hack is found

ffissore commented 9 years ago

You may want to try our new shiny arduino-builder: it only compiles (so it's not a complete replacement) but it's a pure CLI tool

igorwwwwwwwwwwwwwwwwwwww commented 7 years ago

I managed to find a way to run this on OSX. I created this file as arduino.sh:

#!/bin/bash

APP_ROOT=/Applications/Arduino.app
JVM_RUNTIME=$(/usr/libexec/java_home)

java \
    -cp "$APP_ROOT/Contents/Java/*" \
    -DAPP_DIR=$APP_ROOT/Contents/Java \
    -Djava.ext.dirs=$JVM_RUNTIME/Contents/Home/lib/ext/:$JVM_RUNTIME/Contents/Home/jre/lib/ext/ \
    -Dfile.encoding=UTF-8 \
    -Dapple.awt.UIElement=true \
    -Xms128M \
    -Xmx512M \
    processing.app.Base \
    "$@"

Now I can run it from the cli as:

$ ./arduino.sh --verify ~/Documents/Arduino/my_project/my_sketch.ino

It doesn't show the splash screen, and it doesn't show up in the dock.

Enjoy!

facchinm commented 7 years ago

Should be fixed since 1.6.13 after merging https://github.com/arduino/Arduino/pull/5578 and https://github.com/arduino/Arduino/issues/5131. @igorwwwwwwwwwwwwwwwwwwww , which version are you using? Are you trying to solve the "appear on dock" issue or the unexpected graphics?

igorwwwwwwwwwwwwwwwwwwww commented 7 years ago

@facchinm I was trying to solve both, on osx specifically.

Aerijo commented 7 years ago

@facchinm I have this probelm using version 1.8.3 on Mac. Running arduino --verify or similar will cause the 'splash screen' to appear in the foreground, and a black 'exec' dock icon will also appear.

Both still happen if the application already open. Neither happen when clicking the compile command in the application menu.

facchinm commented 7 years ago

I get it. We should set apple.awt.UIElement=true using System.setProperty() on OSX only if CLI parameters are provided. This should be quite easy, I'll try to code something :slightly_smiling_face:

facchinm commented 7 years ago

Looks more difficult than I thought... The patch should be

diff --git a/app/src/cc/arduino/view/SplashScreenHelper.java b/app/src/cc/arduino/view/SplashScreenHelper.java
index 108c1c8b2..69d617e8c 100644
--- a/app/src/cc/arduino/view/SplashScreenHelper.java
+++ b/app/src/cc/arduino/view/SplashScreenHelper.java
@@ -36,6 +36,7 @@ import java.awt.geom.Rectangle2D;
 import java.util.Map;

 import processing.app.Theme;
+import processing.app.helpers.OSUtils;

 public class SplashScreenHelper {

diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java
index 9a91d68dd..db41e335e 100644
--- a/app/src/processing/app/Base.java
+++ b/app/src/processing/app/Base.java
@@ -132,10 +132,6 @@ public class Base {
     }
     System.setProperty("java.net.useSystemProxies", "true");

-    if (OSUtils.isMacOS()) {
-      ThinkDifferent.init();
-    }
-
     try {
       INSTANCE = new Base(args);
     } catch (Throwable e) {
@@ -225,6 +221,9 @@ public class Base {
       // Use native popups so they don't look so crappy on osx
       JPopupMenu.setDefaultLightWeightPopupEnabled(false);
     } else {
+      if (OSUtils.isMacOS()) {
+        System.setProperty("apple.awt.UIElement", "true");
+      }
       splash = new SplashScreenHelper(null);
     }

but it doesn't have any effect... Probably it's due to something like the issue reported here. If anyone can spot the problem with this approach I'll be glad to try another fix :wink:

martistra commented 6 years ago

An easy hack to get out of the splash screen altogether on a Mac is to rename the splash.png to ihatethissplashscreen.png. Found in /Applications/Arduino.app/Contents/Java/lib/splash.png

asm13243546 commented 6 years ago

Hey .. is there dedicated or otherwise comprehensive documentation for arduino-builder? I'm on Arch. I get lots of CTAGS missing errors in my verbose output.

ianfixes commented 5 years ago

A while ago I had used @igorwwwwwwwwwwwwwwwwwwww 's comment to disable the splash screen.

#!/bin/bash

APP_ROOT=/Applications/Arduino.app
JVM_RUNTIME=$(/usr/libexec/java_home)

java \
    -cp "$APP_ROOT/Contents/Java/*" \
    -DAPP_DIR=$APP_ROOT/Contents/Java \
    -Djava.ext.dirs=$JVM_RUNTIME/Contents/Home/lib/ext/:$JVM_RUNTIME/Contents/Home/jre/lib/ext/ \
    -Dfile.encoding=UTF-8 \
    -Dapple.awt.UIElement=true \
    -Xms128M \
    -Xmx512M \
    processing.app.Base \
    "$@"

Using Arduino 1.8.7 on OSX 10.13.6 (17G65), this no longer works.

Error: Could not find or load main class .Applications.Arduino.app.Contents.Java.arduino-builder
Caused by: java.lang.ClassNotFoundException: /Applications/Arduino/app/Contents/Java/arduino-builder

What's the new "preferred" way to do this? I had previously looked at arduino-builder, but I have some cross-platform scripting functionality that currently uses the command-line option syntax for the GUI executable. Should I be making plans to switch over to something else?

pchar commented 4 years ago

I've found a workaround for this issue on macOS :

itopaloglu83 commented 3 years ago

I've found a workaround for this issue on macOS :

  • Edit the plist in /Applications/Arduino.app/Contents and simply remove the xml tag <splash-scren ..>
  • to avoid that is you are in full screen the Arduino app get the main focus you must create a simple script (in Contents/MacOS) like run-arduino.sh that contains the following line "open -g ./Arduino"

I must be doing something wrong. When I make the changes above instead of the splash screen I'm getting the output directory opening up with finder.

~/.vscode/extensions/vsciot-vscode.vscode-arduino-0.3.4/out/src/arduino

Phinder commented 3 years ago

I managed to find a way to run this on OSX. I created this file as arduino.sh:

#!/bin/bash

APP_ROOT=/Applications/Arduino.app
JVM_RUNTIME=$(/usr/libexec/java_home)

java \
    -cp "$APP_ROOT/Contents/Java/*" \
    -DAPP_DIR=$APP_ROOT/Contents/Java \
    -Djava.ext.dirs=$JVM_RUNTIME/Contents/Home/lib/ext/:$JVM_RUNTIME/Contents/Home/jre/lib/ext/ \
    -Dfile.encoding=UTF-8 \
    -Dapple.awt.UIElement=true \
    -Xms128M \
    -Xmx512M \
    processing.app.Base \
    "$@"

Now I can run it from the cli as:

$ ./arduino.sh --verify ~/Documents/Arduino/my_project/my_sketch.ino

It doesn't show the splash screen, and it doesn't show up in the dock.

Enjoy!

And if You are "new to programming" like me and can't nail the above, there is a barbarous way... Simply rename or delete the "splash.bmp" and "splash.png" files at /Applications/Arduino.app/Contents/Java/lib/ however, it gets rid of the splash screen forever.

Cheers

ianfixes commented 3 years ago

If folks aren't aware:

you can avoid the IDE completely with the relatively-new CLI utility: https://github.com/arduino/arduino-cli