Running mBlock in Linux


I leave you a Linux script to run mBlock in Linux, I have tested it in Ubuntu 16.04. These are the steps to run mBlock under Linux with Wine:

  1. Install wine on Linux. Install mBlock for Windows in Linux
  2. Download the script:
  3. Plug mBot to computer via USB
  4. Run script with sudo: sudo ./
  5. Reboot
    Now you should be able to connect to mBot with mBlock via USB.

mBot for Linux

Thanks a lot for this Fran.
Just a shame you have to run it as root.

I’m using the following script to start mBlock at the moment (with the mbot connected). I found that my users, logging in with LDAP, seem to be in the dialout group. I found that the udev rule can be skipped when using the /serial/by-id path. That makes that I don’t need root access.
I found that my registry keeps on forgetting the COM port. Do you find that too?


ln -s /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0 ~/.wine/dosdevices/com1
printf “\n\n[Hardware\\\Devicemap\\\Serialcomm] 1231984861\n"Serial0”=“COM1”\n" >> ~/.wine/system.reg
wine “C:\Program Files (x86)\mblock\mBlock.exe”

Kind regards


If the users are not in sudoers, you can modify the script to pass the username as an argument, and apply the script to that user. But the administrator should run the script anyway. Root access is needed at least to add users to dialout group.


Great to have a script for mBlock in Wine.
But isn’t it better to check if user are in the dialout group. And if not so, write an instruction how to add user to dialout group?
And if the user is root, write a warning that it is better to add user to dialout group (and how to do that) and then continue with statrting mBlock.
Also check if file /etc/udev/rules.d/mblock.rules exists, and if not, also print out how to set that.

Preferable telling how to add with command printf(1):

printf "sudo adduser %s dialout\n" $USER

It would make the script not loosing security, and still be friendly.
By the way, are it always/dev/ttyUSB0? The symlink will always be /dev/mbotUSB, but /dev/ttyUSB0 i’m not that convinced.


I have tested this script in Ubuntu 16.04 and works. If your Linux needs to change /dev/ttyUSB0 modify the script according to your needs. And any improvement of the script is welcomed, feel free to modify it.


I’m running Wine on Ubuntu 16 and have mblock installed. Mblock opens fine, but doesn’t see the COM port. I’m not sure where to place the script. Can someone advise where to place this script?


A new hope: early linux preview


be carefull for the linux version, the executable is for x64 platforms so you’ll have to compile the sources for x32 if you need it by yourself


Thanks a lot! And thank you for your comment on the language issue - seems like I need to recompile anyway. We are at the moment removing all our 32 bit machines since they are not reliable anymore for different reasons, but thank you for the hint!


Changing the default language.

For future reference:
Open “app/translator.js” in the source code. On line 74 you have the language hardcoded
Change that to the default language you want (list of possible languages is higher up in that file).
Then recompile as follows:

##Install required software

(for Ubuntu 16.04):
sudo apt-get install python-software-properties
curl -sL | sudo - bash -
sudo apt-get install nodejs
sudo apt-get install libusb-1.0-0-dev
apt-get install libbluetooth-dev


Go in the source code folder and run the following:

npm install
npm run rebuild-serialport
npm run rebuild-hid
npm run rebuild-bluetooth
npm run dist-linux

You’ll find the compiled Linux software in dist/linux-unpacked.


You will always be in English when you launch mBlock with the actual V4.
mBlock team is on migration to Electron (Github) so the users prefs are not yet saved, they have to code the new solution for saving user prefs (and many other things). Electron migration involved to rewrite all the menubar actions (because the menubar is embedded in Electron), so it’s a big work…


It actually does work.

I changed this.setLanguage(“zh_CN”); to this.setLanguage(“nl_NL”); , recompiled and now it always starts in Dutch.

We are very patient with this and very glad that there is something that works. The solution with Wine gave java-errors we were never able to solve. We exported code to mBot with V4.


Yes because you have hardcoded the default language. Remove this line. Run mBlock, select a language (other than English) and exit. Re-run mBlock, the language will be the defaut language, not the language you have selected, so mBlock will always run in English.
You can use this line this.setLanguage("nl_NL"); it’s an hardcode but a temporary workaround solution :wink:


Ah, ok. Sorry, I misunderstood.
I’m aware that it is a temporary workaround, but glad it works. Better a workaround then nothing at all :slight_smile:


I’ve tried all above, but I can’t change the language to catalan despite the fact I have the locale (ca.pak). Any idea?


I have tried with Ubuntu 16.04 (32Bit) but get errors after npm run dist-linux

> mBlock@4.0.0 dist-linux /home/winux/mBlock
> build --linux AppImage

Rebuilding native production dependencies for linux:ia32
Packaging for linux ia32 using electron 1.4.13 to dist/linux-ia32-unpacked
Building AppImage for arch ia32
Error: Exit code: ENOENT. spawn xorriso ENOENT
    at /home/winux/mBlock/node_modules/electron-builder/src/util/util.ts:77:16
    at exithandler (child_process.js:218:5)
    at ChildProcess.errorhandler (child_process.js:230:5)
    at emitOne (events.js:96:13)
    at ChildProcess.emit (events.js:189:7)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:213:12)
    at onErrorNT (internal/child_process.js:359:16)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)
From previous event:
    at exec (/home/winux/mBlock/node_modules/electron-builder/src/util/util.ts:55:3)
    at /home/winux/mBlock/node_modules/electron-builder/src/targets/appImage.ts:74:11
    at (<anonymous>)
From previous event:
    at (/home/winux/mBlock/node_modules/electron-builder/out/targets/appImage.js:144:11)
    at (/home/winux/mBlock/node_modules/electron-builder/src/platformPackager.ts:172:85)
From previous event:
    at LinuxPackager.packageInDistributableFormat (/home/winux/mBlock/node_modules/electron-builder/src/platformPackager.ts:172:41)
    at /home/winux/mBlock/node_modules/electron-builder/src/platformPackager.ts:168:10
From previous event:
    at LinuxPackager.pack (/home/winux/mBlock/node_modules/electron-builder/out/platformPackager.js:219:11)
    at /home/winux/mBlock/node_modules/electron-builder/src/packager.ts:146:22
From previous event:
    at Packager.doBuild (/home/winux/mBlock/node_modules/electron-builder/out/packager.js:275:11)
    at /home/winux/mBlock/node_modules/electron-builder/src/packager.ts:114:38
    at (<anonymous>)
    at runCallback (timers.js:651:20)
    at tryOnImmediate (timers.js:624:5)
    at processImmediate [as _immediateCallback] (timers.js:596:5)
From previous event:
    at (/home/winux/mBlock/node_modules/electron-builder/out/packager.js:227:11)
    at /home/winux/mBlock/node_modules/electron-builder/src/builder.ts:249:40
    at (<anonymous>)
From previous event:
    at build (/home/winux/mBlock/node_modules/electron-builder/out/builder.js:90:21)
    at Object.<anonymous> (/home/winux/mBlock/node_modules/electron-builder/out/cli/build-cli.js:68:41)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.runMain (module.js:605:10)
    at run (bootstrap_node.js:418:7)
    at startup (bootstrap_node.js:139:9)
    at bootstrap_node.js:533:3

npm ERR! Linux 4.4.0-59-generic
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "run" "dist-linux"
npm ERR! node v7.5.0
npm ERR! npm  v4.1.2
npm ERR! mBlock@4.0.0 dist-linux: `build --linux AppImage`
npm ERR! Exit status 255
npm ERR! 
npm ERR! Failed at the mBlock@4.0.0 dist-linux script 'build --linux AppImage'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the mBlock package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     build --linux AppImage
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs mBlock
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls mBlock
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/winux/mBlock/npm-debug.log


thank you. I got same errors on my 32bit debian jessie but I was able to solve:

  1. changed command in: curl -sL | sudo -E bash -

  2. solved Winux error adding: sudo apt-get install xorriso

  3. added: sudo apt-get install --no-install-recommends -y icnsutils graphicsmagick xz-utils

  4. overwritten all found in package with 32bit version downloaded from Adobe

Until last step mblock in dist/linux-ia32-unpacked keep showing “loading …”. After overwrite all run fine.