Using the transparent argument and setting it to true when creating a new BrowserWindow in Electron usually gives the window a transparent background... But on Linux that isn\'t
There do seem to be multiple issues with transparency, on different distributions with differing hardware. There are various suggested workarounds. You might not be able to make transparency work acceptably for your scenario on all hardware and distributions.
Examples
From the Electron docs:
On Linux, users have to put --enable-transparent-visuals --disable-gpu in the command line to disable GPU and allow ARGB to make transparent window, this is caused by an upstream bug that alpha channel doesn't work on some NVidia drivers on Linux.
https://github.com/electron/electron/blob/master/docs/api/frameless-window.md
This code might work for you. I add explain in comment.
//electron can't be transparent on linux
//see issue on github: https://github.com/electron/electron/issues/2170
// app.disableHardwareAcceleration(); //use this
//or use these two lines code
app.commandLine.appendSwitch('enable-transparent-visuals');
app.commandLine.appendSwitch('disable-gpu');
//createWindow need to wait(more than about 100ms) if you want the window to be transparent
// app.whenReady().then(createWindow); //this won't work
app.commandLine.appendSwitch('enable-transparent-visuals');
app.commandLine.appendSwitch('disable-gpu');
app.on('ready', () => {
setTimeout(() => {
createWindow();
}, 200);
});
I have encounter the same problem as you and so I have written :
Till the requested feature is implemented, the solution is simple just add a delay before launching the window.
You can clone this git repo, put the delay to 500, and normally magic will appear.
EDIT 1 : Use this repo : https://gitlab.com/doom-fr/electron-transparency-demo
git clone https://gitlab.com/doom-fr/electron-transparency-demo
cd electron-transparency-demo
npm install
npm start
# or npm run startWithTransparentOption
# or npm run startWithAllOptions
For me, it works out of the box with Debian Jessie and electron 4.0.5, for npm start
, npm run startWithTransparentOption
but not with npm run startWithAllOptions
.
NB : be carefull to set at least 500ms to have chance it works. After you can reduce the delay but it is not stable. It is why an event on transparentReady is needed.
Doom