Skip to content

Instantly share code, notes, and snippets.

@pschatzmann
Created February 26, 2020 17:56
Show Gist options
  • Save pschatzmann/ff7cc3ffe274b14a9aa8f11b88389b3f to your computer and use it in GitHub Desktop.
Save pschatzmann/ff7cc3ffe274b14a9aa8f11b88389b3f to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{"cells":[{"metadata":{},"cell_type":"markdown","source":"# OpenSCAD in Jupyterlab with Docker\nI was setting up a Docker image based on Alpine Linux for the OpenSCAD Kernel.\nIt available on Docker Hub.\n\nYou can try it by running\n```\ndocker run -it -p 8888:8888 pschatzmann/iopenscad \n```\n\nHere are some tests with it:"},{"metadata":{"trusted":true},"cell_type":"code","source":"%command openscad","execution_count":23,"outputs":[{"name":"stdout","output_type":"stream","text":"The display command is 'openscad'"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"%mime","execution_count":19,"outputs":[{"name":"stdout","output_type":"stream","text":"The display mime type is 'image/png'"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"cube(size = [2,1,1], center = true);\n\n%display ","execution_count":25,"outputs":[{"name":"stdout","output_type":"stream","text":""},{"name":"stderr","output_type":"stream","text":"ERROR: Parser error in file \"/tmp/tmp5q9yjh2r.scad\", line 3: syntax error\n\nCan't parse file '/tmp/tmp5q9yjh2r.scad'!\n\n\n\ncube(size = [2,1,1], center = true);\n\n ... and by using the xvfb-run command everything is working again...\n\n\n "}]},{"metadata":{},"cell_type":"markdown","source":"This did not produce the expected result: The reason is, that the generation of a **PNG image** requires a Linux Display. And this does not exist if the process is started in Docker.\n\nFortunatly we can use **xvfb** to simulate the missing Display:"},{"metadata":{"trusted":true},"cell_type":"code","source":"%command xvfb-run openscad\n ","execution_count":26,"outputs":[{"output_type":"stream","text":"The display command is 'xvfb-run openscad'","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"%display ","execution_count":22,"outputs":[{"name":"stdout","output_type":"stream","text":""},{"name":"stderr","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 1 elements\n"},{"data":{"image/png":"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"},"metadata":{"image/png":{"height":400,"width":600}},"output_type":"display_data","source":"kernel"}]},{"metadata":{},"cell_type":"markdown","source":"... and by using the xvfb-run command everything is working again..."},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"name":"iopenscad","display_name":"OpenSCAD","language":"python"},"language_info":{"name":"OpenSCAD","mimetype":"application/x-openscad","extension":".scad"},"widgets":{"application/vnd.jupyter.widget-state+json":{"state":{},"version_major":2,"version_minor":0}},"toc":{"nav_menu":{},"number_sections":false,"sideBar":false,"skip_h1_title":false,"base_numbering":1,"title_cell":"Table of Contents","title_sidebar":"Contents","toc_cell":false,"toc_position":{},"toc_section_display":false,"toc_window_display":false}},"nbformat":4,"nbformat_minor":4}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment