Closed brunolemos closed 4 years ago
Based on what I read I believe it should add the custom schema to /usr/share/applications/defaults.list
, but it’s not doing that.
I ran into the same problem. I had to workaround using :
childProcess.exec('xdg-mime default myApp.desktop x-scheme-handler/myapp')
@roaringUnicorn Tried it using import childProcess from 'child_process'
and executing the command, but didn’t seem to have any effect.
@roaringUnicorn do I need to do anything else? E.g. create a .desktop file? I haven’t created one but afaik electron-builder handles that.
When searching for all .desktop
files in the computer it finds one with my app name:
/home/MYUSERNAME/.local/share/applications/appimagekit-MYAPPNAME.desktop
I tried alternative commands like xdg-mime default /home/MYUSERNAME/.local/share/applications/appimagekit-MYAPPNAME.desktop x-scheme-handler/MYAPPNAME
but no success.
You do need to add "x-scheme-handler/MyApp;" as a known mimetype in your .desktop file.
You don't need to specify the full path of your .desktop file, as ~/.local/share/applications/
is one of the default paths for them.
Desktop file are generated by electron-builder, and managed automaticaly by the OS. You can customize it through your package.json:
"linux": {
"desktop": {
"MimeType": "x-scheme-handler/MyApp;"
}
}
The electron-builder doc might not be extremely explicit: https://www.electron.build/configuration/appimage
BTW, don't put a space in your appimage name ! There is an escaping probleme somewhere... see: https://github.com/electron-userland/electron-builder/issues/3547
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
The bug is still present in electron@6.0.9 and electron-builder@21.2.0
@roaringUnicorn unfortunately that also didn't work for me. Probably because desktop integration was "removed in favor of AppImageLauncher". Do I need to tell the users to install this AppImageLauncher now?
I tried installing this AppImageLauncher
myself (.deb
) and it doesn't seem to have any effect. Linux UX is so bad, I give up for now again.
Is this still relevant? If so, what is blocking it? Is there anything you can do to help move it forward?
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.
Still a problem.
Is this still relevant? If so, what is blocking it? Is there anything you can do to help move it forward?
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.
🙄
Is this still relevant? If so, what is blocking it? Is there anything you can do to help move it forward?
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.
.
@brunolemos Were you able to solve this eventually? I'm facing the same issue right now with .AppImage on Ubuntu. I was hoping the above workaround would work but it seems electron-builder is not even generating the .desktop file :confused:
no
I will make an pr to fix it until then you can do:
sed -i "s/\"AppRun\"/\"AppRun\ %U\"/" node_modules/app-builder-lib/out/targets/AppImageTarget.js
First of all app.setAsDefaultProtocolClient
works only on mac and windows, for linux you need an entry in your desktop file.
So I see the following steps:
Have the mimetype inside of your build configuration and validate you did the right thing by extracting the appimage (./path/to/appimage --appimage-extract
) and checking the .desktop
file.
see https://github.com/deltachat/deltachat-desktop/commit/2e722f4484193602a15b49c7ca1f5d8d10eff9ea#diff-b9cfc7f2cdf78a7f4b91a753d10865a2 for an example for the build configuration.
[looks like you have already done this step in https://github.com/devhubapp/devhub/blob/master/packages/desktop/package.json]
Make sure you have the appimage "installed"/"Integrated" so that the .desktop
file is found by your OS. (on Manjaro Linux, the already installed https://github.com/TheAssassin/AppImageLauncher works fine for this. Double click the appimage and click on Integrate and Run
)
-> now it should open your app when doing: xdg-open "devhub:test", but your app won't know that it was opened by this url, thats where step 3 comes into play.
In the .desktop file there is an Exec
key that say what should happen when executing it.
You can use variables there to pass more information to the app (see documentation).
what we need here is %U for passing the filepaths/urls that should be processed by the app to the app, which is automatically added by electron-builder, except for app images, there the `Exec``key is just overwritten by "AppRun" and the %U was forgotten to be added.
We can fix it like that:
sed -i "s/\"AppRun\"/\"AppRun\ %U\"/" node_modules/app-builder-lib/out/targets/AppImageTarget.js
For me it looks like you are still on 2 while my PR is doing step 3.
x-scheme-handler
is added by default for now https://github.com/electron-userland/electron-builder/blob/f938de5aae09cb832a6f7f742e64a0d6c025fb9f/packages/app-builder-lib/src/targets/LinuxTargetHelper.ts#L137
Yep! So we are waiting for PR https://github.com/electron-userland/electron-builder/pull/4909 to be merged to have it works.
Is this still relevant? If so, what is blocking it? Is there anything you can do to help move it forward?
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.
Is is relevant!
Is is relevant!
Is is relevant!
Is is relevant!
Is is relevant!
I have this issue not only with .AppImage but also with .deb packages. My workaround is as follows:
Create a file called <yourapp>.desktop
in ~/.local/share/applications/
if intended for current user only, or in /usr/share/applications/
if for all users. Make sure that <yourapp>
is in the path, otherwise set the whole path for Exec
and Icon
(below).
[Desktop Entry]
Name=<Your App>
Exec=<yourapp> %u
Icon=<yourapp>
Type=Application
Set handler for a specific protocol
execSync ( 'xdg-settings set default-url-scheme-handler <your prot name> <yourapp>.desktop' )
This creates an entry like this:
x-scheme-handler/<your prot name>=<yourapp>.desktop
in:
~/.config/mimeapps.list
of course you can create that entry manually as well.
Get handler assigned to a specific protocol
execSync ( 'xdg-settings get default-url-scheme-handler <your prot name>' ).toString().trim()
The result will be:
<yourapp>
linux
(.AppImage
,Ubuntu
)app.setAsDefaultProtocolClient
works for macOS and Windows, but not for Linux, at least when using.AppImage
, which is the only one I use.The custom protocol / schema is never registered and
app.isDefaultProtocolClient
will always return false.