2020年1月31日金曜日

DockerでTalendとXfceデスクトップ環境とTigerVNCがインストールされたイメージ(Ubuntu18.04)を作成する

TalendはオープンソースのJava製のETLアプリケーションです。

〇Talendの画面

イメージのビルドとコンテナの実行方法

〇イメージのビルド
docker build --no-cache -t ub180vnctosdi721 .

Dockerfile
from ubuntu:18.04

ENV DEBIAN_FRONTEND=noninteractive
run apt-get update \
  && apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade \
  && apt-get install -y language-pack-ja-base language-pack-ja \
  && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
  && echo 'Asia/Tokyo' > /etc/timezone \
  && locale-gen ja_JP.UTF-8 \
  && echo 'LC_ALL=ja_JP.UTF-8' > /etc/default/locale \
  && echo 'LANG=ja_JP.UTF-8' >> /etc/default/locale
env LANG=ja_JP.UTF-8 \
   LANGUAGE=ja_JP.UTF-8 \
   LC_ALL=ja_JP.UTF-8
run apt-get -y install \
      xubuntu-desktop \
      xfce4-terminal \
      tigervnc-standalone-server \
      expect \
      fcitx-mozc \
      fonts-ipafont-gothic \
      fonts-ipafont-mincho \
      vim \
      gvfs-bin \
      xdg-utils \
  && cd /opt \
  && wget 'https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u242-b08/OpenJDK8U-jdk_x64_linux_hotspot_8u242b08.tar.gz' \
  && tar xvfz OpenJDK8U-jdk_x64_linux_hotspot_8u242b08.tar.gz \
  && echo 'export JAVA_HOME=/opt/jdk8u242-b08' >> /etc/profile.d/jdk.sh \
  && echo 'export PATH=\\$PATH:\\$JAVA_HOME/bin' >> /etc/profile.d/jdk.sh \
  && update-alternatives --install /usr/bin/java java /opt/jdk8u242-b08/bin/java 2000 \
  && update-alternatives --install /usr/bin/javac javac /opt/jdk8u242-b08/bin/javac 2000 \
  && wget 'https://sourceforge.net/projects/talend-studio/files/Talend%20Open%20Studio/7.2.1/TOS_DI-20190620_1446-V7.2.1.zip' \
  && unzip TOS_DI-20190620_1446-V7.2.1.zip \
  && mv TOS_DI-20190620_1446-V7.2.1 /opt/tosdi \
  && echo '[Desktop Entry]' >> /usr/share/applications/tosdi.desktop \
  && echo 'Version=1.0' >> /usr/share/applications/tosdi.desktop \
  && echo 'Type=Application' >> /usr/share/applications/tosdi.desktop \
  && echo 'Terminal=false' >> /usr/share/applications/tosdi.desktop \
  && echo 'Exec=/opt/tosdi/TOS_DI-linux-gtk-x86_64' >> /usr/share/applications/tosdi.desktop \
  && echo 'Name=Talend Open Studio for Data Integration' >> /usr/share/applications/tosdi.desktop \
  && echo 'Categories=Utility;Development;' >> /usr/share/applications/tosdi.desktop \
  && apt-get -y remove --purge light-locker \
  && apt-get -y install gnome-screensaver \
  && im-config -n fcitx \
  && apt-get clean \
  && rm -rf /var/cache/apt/archives/* \
  && rm -rf /var/lib/apt/lists/* \
  && groupadd -g 1000 ubuntu \
  && useradd -d /home/ubuntu -m -s /bin/bash -u 1000 -g 1000 ubuntu \
  && echo 'ubuntu:ubuntu' | chpasswd \
  && echo "ubuntu ALL=NOPASSWD: ALL" >> /etc/sudoers \
  && echo 'spawn "tigervncpasswd"' >> /tmp/initpass \
  && echo 'expect "Password:"' >> /tmp/initpass \
  && echo 'send "ubuntu\\r"' >> /tmp/initpass \
  && echo 'expect "Verify:"' >> /tmp/initpass \
  && echo 'send "ubuntu\\r"' >> /tmp/initpass \
  && echo 'expect "Would you like to enter a view-only password (y/n)?"' >> /tmp/initpass \
  && echo 'send "n\\r"' >> /tmp/initpass \
  && echo 'expect eof' >> /tmp/initpass \
  && echo 'exit' >> /tmp/initpass \
  && sudo -u ubuntu -H /bin/bash -c '/usr/bin/expect /tmp/initpass' \
  && mkdir -p /home/ubuntu/.vnc \
  && chown ubuntu:ubuntu /home/ubuntu/.vnc \
  && echo '#!/bin/sh' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export LANG=ja_JP.UTF-8' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export LC_ALL=ja_JP.UTF-8' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export XMODIFIERS=@im=fcitx' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export GTK_IM_MODULE=fcitx' >> /home/ubuntu/.vnc/xstartup \
  && echo 'fcitx -r -d &' >> /home/ubuntu/.vnc/xstartup \
  && echo 'exec startxfce4' >> /home/ubuntu/.vnc/xstartup \
  && chmod +x /home/ubuntu/.vnc/xstartup \
  && mkdir -p /home/ubuntu/data \
  && chown -R ubuntu:ubuntu /home/ubuntu/data

expose 5901
volume ["/home/ubuntu/data"]
cmd /usr/bin/vncserver :1 -localhost no -geometry 1152x864 -alwaysshared -fg

〇コンテナの実行
docker run -it -v `pwd`:/home/ubuntu/data -p 5901:5901 -u ubuntu --privileged ub180vnctosdi721

関連情報

・Talendに関する他の記事はこちらを参照してください。

2020年1月30日木曜日

DockerでgFTPとXfceデスクトップ環境とTigerVNCがインストールされたイメージ(Ubuntu18.04)を作成する

gFTPはオープンソースのFTPクライアントです。

〇gFTPの画面

〇イメージのビルド
docker build --no-cache -t ub180vncxfcegftp .

Dockerfile
from ubuntu:18.04

ENV DEBIAN_FRONTEND=noninteractive
run apt-get update \
  && apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade \
  && apt-get install -y language-pack-ja-base language-pack-ja \
  && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
  && echo 'Asia/Tokyo' > /etc/timezone \
  && locale-gen ja_JP.UTF-8 \
  && echo 'LC_ALL=ja_JP.UTF-8' > /etc/default/locale \
  && echo 'LANG=ja_JP.UTF-8' >> /etc/default/locale
env LANG=ja_JP.UTF-8 \
   LANGUAGE=ja_JP.UTF-8 \
   LC_ALL=ja_JP.UTF-8
run apt-get -y install \
      xubuntu-desktop \
      xfce4-terminal \
      tigervnc-standalone-server \
      expect \
      fcitx-mozc \
      fonts-ipafont-gothic \
      fonts-ipafont-mincho \
      vim \
      gvfs-bin \
      xdg-utils \
      gftp \
  && apt-get -y remove --purge light-locker \
  && apt-get -y install gnome-screensaver \
  && im-config -n fcitx \
  && apt-get clean \
  && rm -rf /var/cache/apt/archives/* \
  && rm -rf /var/lib/apt/lists/* \
  && groupadd -g 1000 ubuntu \
  && useradd -d /home/ubuntu -m -s /bin/bash -u 1000 -g 1000 ubuntu \
  && echo 'ubuntu:ubuntu' | chpasswd \
  && echo "ubuntu ALL=NOPASSWD: ALL" >> /etc/sudoers \
  && echo 'spawn "tigervncpasswd"' >> /tmp/initpass \
  && echo 'expect "Password:"' >> /tmp/initpass \
  && echo 'send "ubuntu\\r"' >> /tmp/initpass \
  && echo 'expect "Verify:"' >> /tmp/initpass \
  && echo 'send "ubuntu\\r"' >> /tmp/initpass \
  && echo 'expect "Would you like to enter a view-only password (y/n)?"' >> /tmp/initpass \
  && echo 'send "n\\r"' >> /tmp/initpass \
  && echo 'expect eof' >> /tmp/initpass \
  && echo 'exit' >> /tmp/initpass \
  && sudo -u ubuntu -H /bin/bash -c '/usr/bin/expect /tmp/initpass' \
  && mkdir -p /home/ubuntu/.vnc \
  && chown ubuntu:ubuntu /home/ubuntu/.vnc \
  && echo '#!/bin/sh' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export LANG=ja_JP.UTF-8' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export LC_ALL=ja_JP.UTF-8' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export XMODIFIERS=@im=fcitx' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export GTK_IM_MODULE=fcitx' >> /home/ubuntu/.vnc/xstartup \
  && echo 'fcitx -r -d &' >> /home/ubuntu/.vnc/xstartup \
  && echo 'exec startxfce4' >> /home/ubuntu/.vnc/xstartup \
  && chmod +x /home/ubuntu/.vnc/xstartup \
  && mkdir -p /home/ubuntu/data \
  && chown -R ubuntu:ubuntu /home/ubuntu/data

expose 5901
volume ["/home/ubuntu/data"]
cmd /usr/bin/vncserver :1 -localhost no -geometry 1152x864 -alwaysshared -fg

〇コンテナの実行
docker run -it -v `pwd`:/home/ubuntu/data -p 5901:5901 -u ubuntu --privileged ub180vncxfcegftp

2020年1月29日水曜日

DockerでZimとXfceデスクトップ環境とTigerVNCがインストールされたイメージ(Ubuntu18.04)を作成する

Zim はデスクトップWikiアプリです。

〇Zimの画面
VNCクライアントから接続するときにパスワードにubuntuを指定します。

〇イメージのビルド
docker build --no-cache -t ub180vncxfcezim .

Dockerfile
from ubuntu:18.04

ENV DEBIAN_FRONTEND=noninteractive
run apt-get update \
  && apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade \
  && apt-get install -y language-pack-ja-base language-pack-ja \
  && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
  && echo 'Asia/Tokyo' > /etc/timezone \
  && locale-gen ja_JP.UTF-8 \
  && echo 'LC_ALL=ja_JP.UTF-8' > /etc/default/locale \
  && echo 'LANG=ja_JP.UTF-8' >> /etc/default/locale
env LANG=ja_JP.UTF-8 \
   LANGUAGE=ja_JP.UTF-8 \
   LC_ALL=ja_JP.UTF-8
run apt-get -y install \
      xubuntu-desktop \
      xfce4-terminal \
      tigervnc-standalone-server \
      expect \
      fcitx-mozc \
      fonts-ipafont-gothic \
      fonts-ipafont-mincho \
      vim \
      gvfs-bin \
      xdg-utils \
      python-cairo \
      python-gobject-2 \
      python-gtk2 \
      python-xdg \
  && wget https://zim-wiki.org/downloads/zim_0.72.1_all.deb \
  && dpkg -i zim_0.72.1_all.deb \
  && apt-get -y remove --purge light-locker \
  && apt-get -y install gnome-screensaver \
  && im-config -n fcitx \
  && apt-get clean \
  && rm -rf /var/cache/apt/archives/* \
  && rm -rf /var/lib/apt/lists/* \
  && groupadd -g 1000 ubuntu \
  && useradd -d /home/ubuntu -m -s /bin/bash -u 1000 -g 1000 ubuntu \
  && echo 'ubuntu:ubuntu' | chpasswd \
  && echo "ubuntu ALL=NOPASSWD: ALL" >> /etc/sudoers \
  && echo 'spawn "tigervncpasswd"' >> /tmp/initpass \
  && echo 'expect "Password:"' >> /tmp/initpass \
  && echo 'send "ubuntu\\r"' >> /tmp/initpass \
  && echo 'expect "Verify:"' >> /tmp/initpass \
  && echo 'send "ubuntu\\r"' >> /tmp/initpass \
  && echo 'expect "Would you like to enter a view-only password (y/n)?"' >> /tmp/initpass \
  && echo 'send "n\\r"' >> /tmp/initpass \
  && echo 'expect eof' >> /tmp/initpass \
  && echo 'exit' >> /tmp/initpass \
  && sudo -u ubuntu -H /bin/bash -c '/usr/bin/expect /tmp/initpass' \
  && mkdir -p /home/ubuntu/.vnc \
  && chown ubuntu:ubuntu /home/ubuntu/.vnc \
  && echo '#!/bin/sh' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export LANG=ja_JP.UTF-8' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export LC_ALL=ja_JP.UTF-8' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export XMODIFIERS=@im=fcitx' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export GTK_IM_MODULE=fcitx' >> /home/ubuntu/.vnc/xstartup \
  && echo 'fcitx -r -d &' >> /home/ubuntu/.vnc/xstartup \
  && echo 'exec startxfce4' >> /home/ubuntu/.vnc/xstartup \
  && chmod +x /home/ubuntu/.vnc/xstartup \
  && mkdir -p /home/ubuntu/data \
  && chown -R ubuntu:ubuntu /home/ubuntu/data

expose 5901
volume ["/home/ubuntu/data"]
cmd /usr/bin/vncserver :1 -localhost no -geometry 1152x864 -alwaysshared -fg

〇コンテナの実行
docker run -it -v `pwd`:/home/ubuntu/data -p 5901:5901 -u ubuntu --privileged ub180vncxfcezim

2020年1月28日火曜日

DockerでPentaho Data Integration CE 8.3とAdoptOpenJDK、Xfceデスクトップ環境、TigerVNCがインストールされたイメージ(Ubuntu18.04)を作成する

Pentaho Data IntegrationはオープンソースのETLツールです。

〇Pentaho Data Integrationの画面
VNCクライアントから接続するときにパスワードにubuntuを指定します。

〇イメージのビルド
docker build -t ub1804vncxfcepdice83 .

Dockerfile
from ubuntu:18.04

ENV DEBIAN_FRONTEND=noninteractive
run apt-get update \
  && apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade \
  && apt-get install -y language-pack-ja-base language-pack-ja \
  && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
  && echo 'Asia/Tokyo' > /etc/timezone \
  && locale-gen ja_JP.UTF-8 \
  && echo 'LC_ALL=ja_JP.UTF-8' > /etc/default/locale \
  && echo 'LANG=ja_JP.UTF-8' >> /etc/default/locale
env LANG=ja_JP.UTF-8 \
   LANGUAGE=ja_JP.UTF-8 \
   LC_ALL=ja_JP.UTF-8
run apt-get -y install \
      xubuntu-desktop \
      xfce4-terminal \
      tigervnc-standalone-server \
      expect \
      fcitx-mozc \
      fonts-ipafont-gothic \
      fonts-ipafont-mincho \
      vim \
      gvfs-bin \
      xdg-utils \
  && cd /opt \
  && wget 'https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u242-b08/OpenJDK8U-jdk_x64_linux_hotspot_8u242b08.tar.gz' \
  && tar xvfz OpenJDK8U-jdk_x64_linux_hotspot_8u242b08.tar.gz \
  && echo 'export JAVA_HOME=/opt/jdk8u242-b08' >> /etc/profile.d/jdk.sh \
  && echo 'export PATH=\\$PATH:\\$JAVA_HOME/bin' >> /etc/profile.d/jdk.sh \
  && update-alternatives --install /usr/bin/java java /opt/jdk8u242-b08/bin/java 2000 \
  && update-alternatives --install /usr/bin/javac javac /opt/jdk8u242-b08/bin/javac 2000 \
  && wget 'https://sourceforge.net/projects/pentaho/files/Pentaho%208.3/client-tools/pdi-ce-8.3.0.0-371.zip' \
  && unzip pdi-ce-8.3.0.0-371.zip \
  && echo '[Desktop Entry]' >> /usr/share/applications/pdice83.desktop \
  && echo 'Version=1.0' >> /usr/share/applications/pdice83.desktop \
  && echo 'Type=Application' >> /usr/share/applications/pdice83.desktop \
  && echo 'Terminal=false' >> /usr/share/applications/pdice83.desktop \
  && echo 'Exec=/opt/data-integration/spoon.sh' >> /usr/share/applications/pdice83.desktop \
  && echo 'Name=Pentaho Data Integration CE' >> /usr/share/applications/pdice83.desktop \
  && echo 'Categories=Development;' >> /usr/share/applications/pdice83.desktop \
  && apt-get -y remove --purge light-locker \
  && apt-get -y install gnome-screensaver \
  && im-config -n fcitx \
  && apt-get clean \
  && rm -rf /var/cache/apt/archives/* \
  && rm -rf /var/lib/apt/lists/* \
  && groupadd -g 1000 ubuntu \
  && useradd -d /home/ubuntu -m -s /bin/bash -u 1000 -g 1000 ubuntu \
  && echo 'ubuntu:ubuntu' | chpasswd \
  && echo "ubuntu ALL=NOPASSWD: ALL" >> /etc/sudoers \
  && echo 'spawn "tigervncpasswd"' >> /tmp/initpass \
  && echo 'expect "Password:"' >> /tmp/initpass \
  && echo 'send "ubuntu\\r"' >> /tmp/initpass \
  && echo 'expect "Verify:"' >> /tmp/initpass \
  && echo 'send "ubuntu\\r"' >> /tmp/initpass \
  && echo 'expect "Would you like to enter a view-only password (y/n)?"' >> /tmp/initpass \
  && echo 'send "n\\r"' >> /tmp/initpass \
  && echo 'expect eof' >> /tmp/initpass \
  && echo 'exit' >> /tmp/initpass \
  && sudo -u ubuntu -H /bin/bash -c '/usr/bin/expect /tmp/initpass' \
  && mkdir -p /home/ubuntu/.vnc \
  && chown ubuntu:ubuntu /home/ubuntu/.vnc \
  && echo '#!/bin/sh' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export LANG=ja_JP.UTF-8' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export LC_ALL=ja_JP.UTF-8' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export XMODIFIERS=@im=fcitx' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export GTK_IM_MODULE=fcitx' >> /home/ubuntu/.vnc/xstartup \
  && echo 'fcitx -r -d &' >> /home/ubuntu/.vnc/xstartup \
  && echo 'exec startxfce4' >> /home/ubuntu/.vnc/xstartup \
  && chmod +x /home/ubuntu/.vnc/xstartup \
  && mkdir -p /home/ubuntu/data \
  && chown -R ubuntu:ubuntu /home/ubuntu/data

expose 5901
volume ["/home/ubuntu/data"]
cmd /usr/bin/vncserver :1 -localhost no -geometry 1152x864 -alwaysshared -fg

〇コンテナの実行
docker run -it -v `pwd`:/home/ubuntu/data -p 5901:5901 -u ubuntu --privileged ub1804vncxfcepdice83

2020年1月27日月曜日

DockerでFritzing0.9.4とXfceデスクトップ環境とTigerVNCがインストールされたイメージ(Ubuntu18.04)を作成する

Fritzing0.9.4で回路図やブレッドボード上の電子部品の接続図などを描画する事ができます。

〇Fritzingの画面

〇イメージのビルド
docker build --no-cache -t ub1804vncxfcefritzing094 .

Dockerfile
from ubuntu:18.04

ENV DEBIAN_FRONTEND=noninteractive
run apt-get update \
  && apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade \
  && apt-get install -y language-pack-ja-base language-pack-ja \
  && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
  && echo 'Asia/Tokyo' > /etc/timezone \
  && locale-gen ja_JP.UTF-8 \
  && echo 'LC_ALL=ja_JP.UTF-8' > /etc/default/locale \
  && echo 'LANG=ja_JP.UTF-8' >> /etc/default/locale
env LANG=ja_JP.UTF-8 \
   LANGUAGE=ja_JP.UTF-8 \
   LC_ALL=ja_JP.UTF-8
run apt-get -y install \
      xubuntu-desktop \
      xfce4-terminal \
      tigervnc-standalone-server \
      expect \
      fcitx-mozc \
      fonts-ipafont-gothic \
      fonts-ipafont-mincho \
      vim \
      gvfs-bin \
      xdg-utils \
      libqt5printsupport5 \
      libqt5serialport5 \
      libqt5sql5 \
      libqt5xml5 \
  && cd /opt \
  && wget https://github.com/fritzing/fritzing-app/releases/download/CD-498/fritzing-a1ffcea08814801903b1a9515b18cf97067968ae-master-498.bionic.linux.AMD64.tar.bz2 \
  && tar jxf fritzing-a1ffcea08814801903b1a9515b18cf97067968ae-master-498.bionic.linux.AMD64.tar.bz2 \
  && /opt/fritzing-a1ffcea08814801903b1a9515b18cf97067968ae-master-498.bionic.linux.AMD64/install_fritzing.sh --system \
  && echo '[Desktop Entry]' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Version=0.9.4' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Name=Fritzing' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Exec=/usr/share/fritzing/fritzing-a1ffcea08814801903b1a9515b18cf97067968ae-master-498.bionic.linux.AMD64/Fritzing' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Icon=/usr/share/fritzing/fritzing-a1ffcea08814801903b1a9515b18cf97067968ae-master-498.bionic.linux.AMD64/icons/fritzing_icon.png' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Terminal=false' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Type=Application' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Categories=Development;IDE;' >>  /usr/share/applications/fritzing.desktop \
  && echo 'StartupNotify=true' >>  /usr/share/applications/fritzing.desktop \
  && apt-get -y remove --purge light-locker \
  && apt-get -y install gnome-screensaver \
  && im-config -n fcitx \
  && apt-get clean \
  && rm -rf /var/cache/apt/archives/* \
  && rm -rf /var/lib/apt/lists/* \
  && groupadd -g 1000 ubuntu \
  && useradd -d /home/ubuntu -m -s /bin/bash -u 1000 -g 1000 ubuntu \
  && echo 'ubuntu:ubuntu' | chpasswd \
  && echo "ubuntu ALL=NOPASSWD: ALL" >> /etc/sudoers \
  && echo 'spawn "tigervncpasswd"' >> /tmp/initpass \
  && echo 'expect "Password:"' >> /tmp/initpass \
  && echo 'send "ubuntu\\r"' >> /tmp/initpass \
  && echo 'expect "Verify:"' >> /tmp/initpass \
  && echo 'send "ubuntu\\r"' >> /tmp/initpass \
  && echo 'expect "Would you like to enter a view-only password (y/n)?"' >> /tmp/initpass \
  && echo 'send "n\\r"' >> /tmp/initpass \
  && echo 'expect eof' >> /tmp/initpass \
  && echo 'exit' >> /tmp/initpass \
  && sudo -u ubuntu -H /bin/bash -c '/usr/bin/expect /tmp/initpass' \
  && mkdir -p /home/ubuntu/.vnc \
  && chown ubuntu:ubuntu /home/ubuntu/.vnc \
  && echo '#!/bin/sh' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export LANG=ja_JP.UTF-8' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export LC_ALL=ja_JP.UTF-8' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export XMODIFIERS=@im=fcitx' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export GTK_IM_MODULE=fcitx' >> /home/ubuntu/.vnc/xstartup \
  && echo 'fcitx -r -d &' >> /home/ubuntu/.vnc/xstartup \
  && echo 'exec startxfce4' >> /home/ubuntu/.vnc/xstartup \
  && chmod +x /home/ubuntu/.vnc/xstartup \
  && mkdir -p /home/ubuntu/data \
  && chown -R ubuntu:ubuntu /home/ubuntu/data

expose 5901
volume ["/home/ubuntu/data"]
cmd /usr/bin/vncserver :1 -localhost no -geometry 1152x864 -alwaysshared -fg

〇コンテナの実行
docker run -it -v `pwd`:/home/ubuntu/data -p 5901:5901 -u ubuntu --privileged ub1804vncxfcefritzing094

2020年1月22日水曜日

Vagrantを使用してXfce Desktop環境にFirefoxをKioskモードで起動する仮想マシン(Ubuntu18.04ベース)を構築する

FirefoxをKioskモードで起動する事で専用端末のように動作させることができます。

〇KioskモードのFirefoxの画面

〇構築方法
以下のVagrantfileを使用して、Xfce Desktop環境でFirefoxをKioskモードで起動する仮想マシン(Ubuntu18.04)を構築できます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804xfce"
config.vm.network :public_network, ip:"192.168.1.114"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804xfce"
     vbox.gui = true
     vbox.cpus = 2
     vbox.memory = 2048
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
export DEBIAN_FRONTEND=noninteractive
apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get update
apt-get -y install fcitx-mozc xfce4 $(check-language-support -l ja) lightdm unclutter firefox
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
im-config -n fcitx

apt-get -y purge xserver-xorg-hwe-18.04 linux-image-generic-hwe-18.04 xserver-xorg-legacy-hwe-18.04 xserver-xorg-core-hwe-18.04 xserver-xorg-video-intel-hwe-18.04
apt-get -y autoremove

apt-get -y --no-install-recommends install virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11

echo "xfce4-session" > /home/vagrant/.xsession
chown vagrant:vagrant /home/vagrant/.xsession

mkdir -p /home/vagrant/.config/autostart/
cat << EOF > /home/vagrant/.config/autostart/.desktop
[Desktop Entry]
Type=Application
Exec=/usr/bin/firefox --kiosk https://www.google.com
Name=firefox kiosk mode
EOF
chown -R vagrant:vagrant /home/vagrant/.config

rm /usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf
mkdir -p /home/vagrant/.config
cp -R /etc/xdg/* /home/vagrant/.config
chown -Rf vagrant:vagrant ~/.config

#[SeatDefaults]
#greeter-session=unity-greeter
#user-session=xfce
cat << EOF > /usr/share/lightdm/lightdm.conf.d/50-xfce-greeter.conf
[SeatDefaults]
autologin-user=vagrant
autologin-user-timeout=0
user-session=xfce
EOF

# suppress system prgoram problem dialog
sudo rm -rf /var/crash/*

apt-get -y purge light-locker xscreensaver

init 5
SHELL
end

関連情報

DockerでDebian 11(Bullseye)のXfceデスクトップ環境にリモートデスクトップで接続できるコンテナを作成する

2020年1月20日月曜日

microbitに接続したGrove音センサー値をBluetoothのAdvertiseでRaspberry Piに表示する

Groveシールドで様々なデバイスを利用するすることができます。
以下の手順でP0に接続したGrove音センサーの値をBluetoothのAdvertiseで表示する事ができます。

1. Raspberry Piにbluepyをインストール
bluepyをRaspberry Piにインストールするの手順で、bluepyをインストールします

2. micro:bitでbluetoothサービスを使用するプログラム作成
以下のような感じでnsに'HOME'を10進化した数値1213156677(=0x484f4d45="HOME")を最初に追加します
インスタンスの上位2ビットをseqに、下位ビットを音センサーの値として使用します。

3. 音センサー値を表示するプログラム
nsが一致し、seqの値が前回取得時と異なる値を取得して表示します。

advertise-a0.py
from bluepy import btle
import bluepy

class MyScanDelegate(btle.DefaultDelegate):
  def __init__(self):
    btle.DefaultDelegate.__init__(self)
    self.lastseq = None

  def handleDiscovery(self, dev, isNewDev, isNewData):
    if isNewDev or isNewData:
      for (adtype, desc, value) in dev.getScanData():
        #print(adtype, desc, value)
        if desc == '16b Service Data' and value[0:4] == 'aafe' and value[8:28] == '000000000000484f4d45':
          seq = (int(value[32:33], 16) & 0xC) >> 2
          if seq != self.lastseq:
            self.lastseq = seq
            val = int(value[38:40], 16)
            print('val:%d' % val)

scanner = btle.Scanner().withDelegate(MyScanDelegate())
while True:
  scanner.scan(5.0)

4. BluetoothのAdvertiseで音センサーの値を表示するプログラムの実行
sudo python3 advertise-a0.py

〇Groveシールドと音センサーを接続したmicrobit

関連情報

Groveデバイスまとめ

Bluetooth Developer Studio Level 3 Profile Report


2020年1月17日金曜日

microbitのABボタンの状態値をBluetoothのAdvertiseでRaspberry Piに表示する

以下の手順でP0にABボタンの状態値をBluetoothのAdvertiseで表示する事ができます。

1. Raspberry Piにbluepyをインストール
bluepyをRaspberry Piにインストールするの手順で、bluepyをインストールします

2. micro:bitでbluetoothサービスを使用するプログラム作成
以下のような感じでnsに'HOME'を10進化した数値1213156677(=0x484f4d45="HOME")を最初に追加します
インスタンスの上位2ビットをseqに、下位2ビットをBボタンの状態値/Aボタンの状態値として使用します。

3. ABボタンの状態値を表示するプログラム
nsが一致し、seqの値が前回取得時と異なる値を取得して表示します。

advertise-buttons.py
from bluepy import btle
import bluepy

class MyScanDelegate(btle.DefaultDelegate):
  def __init__(self):
    btle.DefaultDelegate.__init__(self)
    self.lastseq = None

  def handleDiscovery(self, dev, isNewDev, isNewData):
    if isNewDev or isNewData:
      for (adtype, desc, value) in dev.getScanData():
        #print(adtype, desc, value)
        if desc == '16b Service Data' and value[0:4] == 'aafe' and value[8:28] == '000000000000484f4d45':
          seq = (int(value[32:33], 16) & 0xC) >> 2
          if seq != self.lastseq:
            self.lastseq = seq
            val_a = int(value[38:40], 16) & 1
            val_b = int(value[38:40], 16) & 2
            print('val_a:%d' % val_a)
            print('val_b:%d' % val_b)

scanner = btle.Scanner().withDelegate(MyScanDelegate())
while True:
  scanner.scan(5.0)

4. BluetoothのAdvertiseでABボタンの状態値を表示するプログラムの実行
sudo python3 advertise-buttons.py

〇参考情報
Bluetooth Developer Studio Level 3 Profile Report


2020年1月16日木曜日

microbitに接続した光センサー値をBluetoothのAdvertiseでRaspberry Piに表示する

Groveシールドで様々なデバイスを利用するすることができます。
以下の手順でP0に接続した光センサーの値をBluetoothのAdvertiseで表示する事ができます。

実行手順

1. Raspberry Piにbluepyをインストール
bluepyをRaspberry Piにインストールするの手順で、bluepyをインストールします

2. micro:bitでbluetoothサービスを使用するプログラム作成
以下のような感じでnsに'HOME'を10進化した数値1213156677(=0x484f4d45="HOME")を最初に追加します
インスタンスの上位2ビットをseqに、下位ビットを光センサーの値として使用します。

3. 光センサー値を表示するプログラム
nsが一致し、seqの値が前回取得時と異なる値を取得して表示します。

advertise-a0.py
from bluepy import btle
import bluepy

class MyScanDelegate(btle.DefaultDelegate):
  def __init__(self):
    btle.DefaultDelegate.__init__(self)
    self.lastseq = None

  def handleDiscovery(self, dev, isNewDev, isNewData):
    if isNewDev or isNewData:
      for (adtype, desc, value) in dev.getScanData():
        #print(adtype, desc, value)
        if desc == '16b Service Data' and value[0:4] == 'aafe' and value[8:28] == '000000000000484f4d45':
          seq = (int(value[32:33], 16) & 0xC) >> 2
          if seq != self.lastseq:
            self.lastseq = seq
            val = int(value[38:40], 16)
            print('val:%d' % val)

scanner = btle.Scanner().withDelegate(MyScanDelegate())
while True:
  scanner.scan(5.0)

4. BluetoothのAdvertiseで光センサーの値を表示するプログラムの実行
sudo python3 advertise-a0.py

〇Groveシールドと光センサーを接続したmicrobit

参考情報

Bluetooth Developer Studio Level 3 Profile Report

・基板を見えないようにするためにGrove Light Sensorのケースを作成する場合は以下の記事を参照してください。
OpenSCADとUltimaker Curaを使用してGrove Light Sensorのケースを作成する

・Raspberry Pi ZeroとGrove Base HATを利用してGrove Light Sensorを接続する場合は、以下の記事を参照してください。
Raspberry Pi ZeroとGrove Base HAT for Raspberry Piと光センサーで、明るさを取得する

Groveデバイスまとめ

2020年1月13日月曜日

microbitに接続したRotary Angleセンサー値をBluetoothのAdvertiseでRaspberry Piに表示する

Groveシールドで様々なデバイスを利用するすることができます。
以下の手順でP0に接続したRotary Angleセンサーの値をBluetoothのAdvertiseで表示する事ができます。

1. Raspberry Piにbluepyをインストール
bluepyをRaspberry Piにインストールするの手順で、bluepyをインストールします

2. micro:bitでbluetoothサービスを使用するプログラム作成
以下のような感じでnsに'HOME'を10進化した数値1213156677(=0x484f4d45="HOME")を最初に追加します
インスタンスの上位2ビットをseqに、下位ビットをRotary Angleセンサーの値として使用します。

3. Rotary Angleセンサー値を表示するプログラム
nsが一致し、seqの値が前回取得時と異なる値を取得して表示します。

advertise-a0.py
from bluepy import btle
import bluepy

class MyScanDelegate(btle.DefaultDelegate):
  def __init__(self):
    btle.DefaultDelegate.__init__(self)
    self.lastseq = None

  def handleDiscovery(self, dev, isNewDev, isNewData):
    if isNewDev or isNewData:
      for (adtype, desc, value) in dev.getScanData():
        #print(adtype, desc, value)
        if desc == '16b Service Data' and value[0:4] == 'aafe' and value[8:28] == '000000000000484f4d45':
          seq = (int(value[32:33], 16) & 0xC) >> 2
          if seq != self.lastseq:
            self.lastseq = seq
            val = int(value[38:40], 16)
            print('val:%d' % val)

scanner = btle.Scanner().withDelegate(MyScanDelegate())
while True:
  scanner.scan(5.0)

4. BluetoothのAdvertiseでRotary Angleセンサーの値を表示するプログラムの実行
sudo python3 advertise-a0.py

〇GroveシールドとRotary Angleセンサーを接続したmicrobit

関連情報

Groveデバイスまとめ

Bluetooth Developer Studio Level 3 Profile Report


2020年1月12日日曜日

microbitに接続したボタンの状態値をBluetoothのAdvertiseでRaspberry Piに表示する

Groveシールドで様々なデバイスを利用するすることができます。
以下の手順でP0に接続したボタンの状態値をBluetoothのAdvertiseで表示する事ができます。

1. Raspberry Piにbluepyをインストール
bluepyをRaspberry Piにインストールするの手順で、bluepyをインストールします

2. micro:bitでbluetoothサービスを使用するプログラム作成
以下のような感じでnsに'HOME'を10進化した数値1213156677(=0x484f4d45="HOME")を最初に追加します
インスタンスの上位2ビットをseqに、下位1ビットをタッチセンサーの値として使用します。

3. ボタンの状態値を表示するプログラム
nsが一致し、seqの値が前回取得時と異なる値を取得して表示します。

advertise-d0.py
from bluepy import btle
import bluepy

class MyScanDelegate(btle.DefaultDelegate):
  def __init__(self):
    btle.DefaultDelegate.__init__(self)
    self.lastseq = None

  def handleDiscovery(self, dev, isNewDev, isNewData):
    if isNewDev or isNewData:
      for (adtype, desc, value) in dev.getScanData():
        #print(adtype, desc, value)
        if desc == '16b Service Data' and value[0:4] == 'aafe' and value[8:28] == '000000000000484f4d45':
          seq = (int(value[32:33], 16) & 0xC) >> 2
          if seq != self.lastseq:
            self.lastseq = seq
            val = int(value[38:40], 16) & 1
            print('val:%d' % val)

scanner = btle.Scanner().withDelegate(MyScanDelegate())
while True:
  scanner.scan(5.0)

4. BluetoothのAdvertiseでボタンの状態値を表示するプログラムの実行
sudo python3 advertise-d0.py

〇Groveシールドとボタンを接続したmicrobit

関連情報

Groveデバイスまとめ

Bluetooth Developer Studio Level 3 Profile Report


2020年1月11日土曜日

microbitに接続したタッチセンサーの値をBluetoothのAdvertiseでRaspberry Piに表示する

Groveシールドで様々なデバイスを利用するすることができます。
以下の手順でP0に接続したタッチセンサーの値をBluetoothのAdvertiseで表示する事ができます。

1. Raspberry Piにbluepyをインストール
bluepyをRaspberry Piにインストールするの手順で、bluepyをインストールします

2. micro:bitでbluetoothサービスを使用するプログラム作成
以下のような感じでnsに'HOME'を10進化した数値1213156677(=0x484f4d45="HOME")を最初に追加します
インスタンスの上位2ビットをseqに、下位1ビットをタッチセンサーの値として使用します。

3. タッチセンサー値を表示するプログラム
nsが一致し、seqの値が前回取得時と異なる値を取得して表示します。

advertise-d0.py
from bluepy import btle
import bluepy

class MyScanDelegate(btle.DefaultDelegate):
  def __init__(self):
    btle.DefaultDelegate.__init__(self)
    self.lastseq = None

  def handleDiscovery(self, dev, isNewDev, isNewData):
    if isNewDev or isNewData:
      for (adtype, desc, value) in dev.getScanData():
        #print(adtype, desc, value)
        if desc == '16b Service Data' and value[0:4] == 'aafe' and value[8:28] == '000000000000484f4d45':
          seq = (int(value[32:33], 16) & 0xC) >> 2
          if seq != self.lastseq:
            self.lastseq = seq
            val = int(value[38:40], 16) & 1
            print('val:%d' % val)

scanner = btle.Scanner().withDelegate(MyScanDelegate())
while True:
  scanner.scan(5.0)

4. BluetoothのAdvertiseでタッチセンサーの値を表示するプログラムの実行
sudo python3 advertise-d0.py

〇Groveシールドとタッチセンサーを接続したmicrobit

関連情報

Groveデバイスまとめ

Bluetooth Developer Studio Level 3 Profile Report


2020年1月9日木曜日

microbitに接続した水分センサー値をBluetoothのAdvertiseでRaspberry Piに表示する

Groveシールドで様々なデバイスを利用するすることができます。
以下の手順でP0に接続した水分センサーの値をBluetoothのAdvertiseで表示する事ができます。

1. Raspberry Piにbluepyをインストール
bluepyをRaspberry Piにインストールするの手順で、bluepyをインストールします

2. micro:bitでbluetoothサービスを使用するプログラム作成
以下のような感じでnsに'HOME'を10進化した数値1213156677(=0x484f4d45="HOME")を最初に追加します
インスタンスの上位2ビットをseqに、下位ビットを水分センサーの値として使用します。
3. 水分センサー値を表示するプログラム
nsが一致し、seqの値が前回取得時と異なる値を取得して表示します。

advertise-a0.py
from bluepy import btle
import bluepy

class MyScanDelegate(btle.DefaultDelegate):
  def __init__(self):
    btle.DefaultDelegate.__init__(self)
    self.lastseq = None

  def handleDiscovery(self, dev, isNewDev, isNewData):
    if isNewDev or isNewData:
      for (adtype, desc, value) in dev.getScanData():
        #print(adtype, desc, value)
        if desc == '16b Service Data' and value[0:4] == 'aafe' and value[8:28] == '000000000000484f4d45':
          seq = (int(value[32:33], 16) & 0xC) >> 2
          if seq != self.lastseq:
            self.lastseq = seq
            val = int(value[38:40], 16)
            print('val:%d' % val)

scanner = btle.Scanner().withDelegate(MyScanDelegate())
while True:
  scanner.scan(5.0)

4. BluetoothのAdvertiseで水分センサーの値を表示するプログラムの実行
sudo python3 advertise-a0.py

〇Groveシールドと水分センサーを接続したmicrobit

関連情報

Groveデバイスまとめ

Bluetooth Developer Studio Level 3 Profile Report


2020年1月7日火曜日

Raspberry PiからBluetooth経由でmicrobitに接続した4桁表示ディスプレイに値を表示する

Groveシールドで様々なデバイスを利用するすることができます。
以下の手順でP0に接続したGrove 4digit displayにBluetooth経由で値を表示する事ができます。

1. Raspberry Piにbluepyをインストール
bluepyをRaspberry Piにインストールするの手順で、bluepyをインストールします

2. micro:bitでbluetoothサービスを使用するプログラム作成
以下のような感じでUART bluetoothサービスを最初に追加します
※Grove拡張機能ではgithub.com/seeed-studio/pxt-groveを指定します。
また、ペアリングをしなくても利用できるようにします

3. Grove 4 digit displayに値を表示するプログラム

uart4digitdisplay.py
from bluepy import btle

per = btle.Peripheral("XX:XX:XX:XX:XX:XX", btle.ADDR_TYPE_RANDOM)

# UART Service
svcUART = per.getServiceByUUID("6E400001-B5A3-F393-E0A9-E50E24DCCA9E")

# TX Characteristics
chTX = svcUART.getCharacteristics("6E400002-B5A3-F393-E0A9-E50E24DCCA9E")[0]

# RX Characteristics
chRX = svcUART.getCharacteristics("6E400003-B5A3-F393-E0A9-E50E24DCCA9E")[0]

chRX.write("1234\n".encode("utf-8"))

4. Bluetoothで4桁表示ディスプレイに値を表示するプログラムの実行
python3 uart4digitdisplay.py

〇GroveシールドとGrove 4 digit displayを接続したmicrobit

関連情報

Groveデバイスまとめ

Bluetooth Developer Studio Level 3 Profile Report


2020年1月6日月曜日

VagrantでpipenvとOpenCVをインストールした仮想マシン(Ubuntu18.04)を構築する

pipenvの仮想環境内にopencv-pythonをインストールした仮想マシンを構築するには、以下のVagrantfileを使用します。

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804pipenvopencv"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804pipenvopencv"
     vbox.cpus = 4
     vbox.memory = 4096
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.119", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.119", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
locale-gen ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
timedatectl set-timezone Asia/Tokyo

# install pipenv
apt-get -y install python3.6 python3-distutils
apt-get -y install python-pip
#pip install --upgrade pip
pip install pip==9.0.1
pip install --upgrade setuptools
pip install pipenv

# install OpenCV
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get -y install \
  build-essential \
  cmake \
  git \
  libjpeg-dev \
  libpng-dev \
  libtiff-dev \
  libgtk2.0-dev \
  libavcodec-dev \
  libavformat-dev \
  libswscale-dev \
  python-dev \
  python-numpy \
  libtbb2 \
  libtbb-dev \
  libdc1394-22-dev

# create a environment for test.
mkdir /home/vagrant/opencv
cd /home/vagrant/opencv
pipenv --python 3.6
pipenv install opencv-python
pipenv install opencv-contrib-python
#pipenv shell
cat << EOF > /home/vagrant/opencv/test.py
import cv2
print(cv2.__version__)
EOF
pipenv run python test.py

SHELL
end

関連情報

・OpenCVに関する他の記事はこちらを参照してください。

2020年1月5日日曜日

DockerでFritzing0.9.4とKDEデスクトップ環境とTigerVNCがインストールされたイメージ(Ubuntu18.04)を作成する

Fritzing0.9.4で回路図やブレッドボード上の電子部品の接続図などを描画する事ができます。

〇Fritzingの画面
VNCクライアントから接続するときにパスワードにubuntuを指定します。

〇イメージのビルド
docker build --no-cache -t ub1804vnckdefritzing094 .

Dockerfile
from ubuntu:18.04

ENV DEBIAN_FRONTEND=noninteractive
run apt-get update \
  && apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade \
  && apt-get install -y language-pack-ja-base language-pack-ja \
  && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
  && echo 'Asia/Tokyo' > /etc/timezone \
  && locale-gen ja_JP.UTF-8 \
  && echo 'LC_ALL=ja_JP.UTF-8' > /etc/default/locale \
  && echo 'LANG=ja_JP.UTF-8' >> /etc/default/locale
env LANG=ja_JP.UTF-8 \
   LANGUAGE=ja_JP.UTF-8 \
   LC_ALL=ja_JP.UTF-8
run apt-get -y install \
      kubuntu-desktop \
      tigervnc-standalone-server \
      expect \
      fcitx-mozc \
      fonts-ipafont-gothic \
      fonts-ipafont-mincho \
      vim \
      gvfs-bin \
      xdg-utils \
      sudo \
      libqt5printsupport5 \
      libqt5serialport5 \
      libqt5sql5 \
      libqt5xml5 \
  && cd /opt \
  && wget https://github.com/fritzing/fritzing-app/releases/download/CD-498/fritzing-a1ffcea08814801903b1a9515b18cf97067968ae-master-498.bionic.linux.AMD64.tar.bz2 \
  && tar jxf fritzing-a1ffcea08814801903b1a9515b18cf97067968ae-master-498.bionic.linux.AMD64.tar.bz2 \
  && /opt/fritzing-a1ffcea08814801903b1a9515b18cf97067968ae-master-498.bionic.linux.AMD64/install_fritzing.sh --system \
  && echo '[Desktop Entry]' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Version=0.9.4' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Name=Fritzing' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Exec=/usr/share/fritzing/fritzing-a1ffcea08814801903b1a9515b18cf97067968ae-master-498.bionic.linux.AMD64/Fritzing' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Icon=/usr/share/fritzing/fritzing-a1ffcea08814801903b1a9515b18cf97067968ae-master-498.bionic.linux.AMD64/icons/fritzing_icon.png' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Terminal=false' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Type=Application' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Categories=Development;IDE;' >>  /usr/share/applications/fritzing.desktop \
  && echo 'StartupNotify=true' >>  /usr/share/applications/fritzing.desktop \
  && apt-get -y remove --purge light-locker \
  && apt-get -y install gnome-screensaver \
  && im-config -n fcitx \
  && apt-get clean \
  && rm -rf /var/cache/apt/archives/* \
  && rm -rf /var/lib/apt/lists/* \
  && groupadd -g 1000 ubuntu \
  && useradd -d /home/ubuntu -m -s /bin/bash -u 1000 -g 1000 ubuntu \
  && echo 'ubuntu:ubuntu' | chpasswd \
  && echo "ubuntu ALL=NOPASSWD: ALL" >> /etc/sudoers \
  && echo 'spawn "tigervncpasswd"' >> /tmp/initpass \
  && echo 'expect "Password:"' >> /tmp/initpass \
  && echo 'send "ubuntu\\r"' >> /tmp/initpass \
  && echo 'expect "Verify:"' >> /tmp/initpass \
  && echo 'send "ubuntu\\r"' >> /tmp/initpass \
  && echo 'expect "Would you like to enter a view-only password (y/n)?"' >> /tmp/initpass \
  && echo 'send "n\\r"' >> /tmp/initpass \
  && echo 'expect eof' >> /tmp/initpass \
  && echo 'exit' >> /tmp/initpass \
  && sudo -u ubuntu -H /bin/bash -c '/usr/bin/expect /tmp/initpass' \
  && mkdir -p /home/ubuntu/.vnc \
  && chown ubuntu:ubuntu /home/ubuntu/.vnc \
  && echo '#!/bin/sh' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export LANG=ja_JP.UTF-8' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export LC_ALL=ja_JP.UTF-8' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export XMODIFIERS=@im=fcitx' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export GTK_IM_MODULE=fcitx' >> /home/ubuntu/.vnc/xstartup \
  && echo 'fcitx -r -d &' >> /home/ubuntu/.vnc/xstartup \
  && echo 'exec startkde' >> /home/ubuntu/.vnc/xstartup \
  && chmod +x /home/ubuntu/.vnc/xstartup \
  && mkdir -p /home/ubuntu/data \
  && chown -R ubuntu:ubuntu /home/ubuntu/data

expose 5901
volume ["/home/ubuntu/data"]
cmd /usr/bin/vncserver :1 -localhost no -geometry 1152x864 -alwaysshared -fg

〇コンテナの実行
docker run -it -v `pwd`:/home/ubuntu/data -p 5901:5901 -u ubuntu --privileged ub1804vnckdefritzing094

2020年1月4日土曜日

USBシリアル通信を通して、microbitのLEDマトリックスに文字列を表示する

USBシリアル通信を通して、microbitのLEDマトリックスに文字列を表示するには、以下の手順を実行します(制御側はRaspberry Pi)。

1. microbitで以下のようにMakeコードでプログラムを作成して、microbitに転送しておきます。

2. Raspberry Piでpyserialのインストール
※pipの場合
pip install pyserial

※pipenvの場合は、以下の手順を実行します
sudo apt-get -y install pipenv

mkdir serial-usb
cd serial-usb
pipenv --python 3.7
pipenv install
pipenv install pyserial
pipenv shell

3. Raspberry Piでプログラムの実行

serial-usb-microbit-text.py
import serial
import time

try:
  ser = serial.Serial('/dev/ttyACM0',115200,timeout=None)
  while True:
    ser.write(b"microbit\n")
    time.sleep(4)
finally:
  ser.close()

プログラムの実行
python3 serial-usb-microbit-text.py

2020年1月3日金曜日

microbitとRaspberry PiでUSBシリアル通信を通してA/Bボタンの状態を取得する

microbitとRaspberry PiでUSBシリアル通信を通してA/Bボタンの状態を取得するには、以下の手順を実行します。

1. microbitで以下のようにMakeコードでプログラムを作成して、microbitに転送しておきます。

2. Raspberry Piでpyserialのインストール
※pipの場合
pip install pyserial

※pipenvの場合は、以下の手順を実行します
sudo apt-get -y install pipenv

mkdir serial-usb
cd serial-usb
pipenv --python 3.7
pipenv install
pipenv install pyserial
pipenv shell

3. Raspberry Piでプログラムの実行

serial-usb-microbit-button.py
import serial

try:
  ser = serial.Serial('/dev/ttyACM0',115200,timeout=None)
  while True:
    line = ser.readline()
    if line.decode('utf-8').strip() == 'button_a':
      print("Button A is pressed.")
    if line.decode('utf-8').strip() == 'button_b':
      print("Button B is pressed.")
finally:
  ser.close()

プログラムの実行
python3 serial-usb-microbit-button.py

2020年1月2日木曜日

microbitのGrove Shieldに接続したGrove LEDを、USBシリアル通信を通して光らせる

microbitのGrove Shieldに接続したGrove LEDを、USBシリアル通信を通して光らせるには、以下の手順を実行します(制御側はRaspberry Pi)。

1. microbitで以下のようにMakeコードでプログラムを作成して、microbitに転送しておきます。

2. Raspberry Piでpyserialのインストール
※pipの場合
pip install pyserial
※pipenvの場合は、以下の手順を実行します
sudo apt-get -y install pipenv

mkdir serial-usb
cd serial-usb
pipenv --python 3.7
pipenv install
pipenv install pyserial
pipenv shell

3. Raspberry Piでプログラムの実行

serial-usb-led.py
import serial
import time

try:
  ser = serial.Serial('/dev/ttyACM0',115200,timeout=None)
  while True:
    ser.write(b"led_on\n")
    time.sleep(4)
    ser.write(b"led_off\n")
    time.sleep(2)
finally:
  ser.close()

プログラムの実行
python3 serial-usb-led.py

microbitに接続したGrove ShieldとGrove LED

関連情報

Groveデバイスまとめ

2020年1月1日水曜日

DockerでFritzing0.9.4とMATEデスクトップ環境とTigerVNCがインストールされたイメージ(Ubuntu18.04)を作成する

Fritzing0.9.4で回路図やブレッドボード上の電子部品の接続図などを描画する事ができます。

〇Fritzingの画面

VNCクライアントから接続するときにパスワードにubuntuを指定します。

〇イメージのビルド
docker build --no-cache -t ub1804vncmatefritzing094 .

Dockerfile
from ubuntu:18.04

ENV DEBIAN_FRONTEND=noninteractive
run apt-get update \
  && apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade \
  && apt-get install -y language-pack-ja-base language-pack-ja \
  && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
  && echo 'Asia/Tokyo' > /etc/timezone \
  && locale-gen ja_JP.UTF-8 \
  && echo 'LC_ALL=ja_JP.UTF-8' > /etc/default/locale \
  && echo 'LANG=ja_JP.UTF-8' >> /etc/default/locale
env LANG=ja_JP.UTF-8 \
   LANGUAGE=ja_JP.UTF-8 \
   LC_ALL=ja_JP.UTF-8
run apt-get -y install \
      ubuntu-mate-desktop \
      tigervnc-standalone-server \
      expect \
      fcitx-mozc \
      fonts-ipafont-gothic \
      fonts-ipafont-mincho \
      vim \
      gvfs-bin \
      xdg-utils \
      libqt5printsupport5 \
      libqt5serialport5 \
      libqt5sql5 \
      libqt5xml5 \
  && cd /opt \
  && wget https://github.com/fritzing/fritzing-app/releases/download/CD-498/fritzing-a1ffcea08814801903b1a9515b18cf97067968ae-master-498.bionic.linux.AMD64.tar.bz2 \
  && tar jxf fritzing-a1ffcea08814801903b1a9515b18cf97067968ae-master-498.bionic.linux.AMD64.tar.bz2 \
  && /opt/fritzing-a1ffcea08814801903b1a9515b18cf97067968ae-master-498.bionic.linux.AMD64/install_fritzing.sh --system \
  && echo '[Desktop Entry]' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Version=0.9.4' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Name=Fritzing' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Exec=/usr/share/fritzing/fritzing-a1ffcea08814801903b1a9515b18cf97067968ae-master-498.bionic.linux.AMD64/Fritzing' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Icon=/usr/share/fritzing/fritzing-a1ffcea08814801903b1a9515b18cf97067968ae-master-498.bionic.linux.AMD64/icons/fritzing_icon.png' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Terminal=false' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Type=Application' >>  /usr/share/applications/fritzing.desktop \
  && echo 'Categories=Development;IDE;' >>  /usr/share/applications/fritzing.desktop \
  && echo 'StartupNotify=true' >>  /usr/share/applications/fritzing.desktop \
  && apt-get -y remove --purge light-locker blueman \
  && apt-get -y install gnome-screensaver \
  && im-config -n fcitx \
  && apt-get clean \
  && rm -rf /var/cache/apt/archives/* \
  && rm -rf /var/lib/apt/lists/* \
  && groupadd -g 1000 ubuntu \
  && useradd -d /home/ubuntu -m -s /bin/bash -u 1000 -g 1000 ubuntu \
  && echo 'ubuntu:ubuntu' | chpasswd \
  && echo "ubuntu ALL=NOPASSWD: ALL" >> /etc/sudoers \
  && echo 'spawn "tigervncpasswd"' >> /tmp/initpass \
  && echo 'expect "Password:"' >> /tmp/initpass \
  && echo 'send "ubuntu\\r"' >> /tmp/initpass \
  && echo 'expect "Verify:"' >> /tmp/initpass \
  && echo 'send "ubuntu\\r"' >> /tmp/initpass \
  && echo 'expect "Would you like to enter a view-only password (y/n)?"' >> /tmp/initpass \
  && echo 'send "n\\r"' >> /tmp/initpass \
  && echo 'expect eof' >> /tmp/initpass \
  && echo 'exit' >> /tmp/initpass \
  && sudo -u ubuntu -H /bin/bash -c '/usr/bin/expect /tmp/initpass' \
  && mkdir -p /home/ubuntu/.vnc \
  && chown ubuntu:ubuntu /home/ubuntu/.vnc \
  && echo '#!/bin/sh' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export LANG=ja_JP.UTF-8' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export LC_ALL=ja_JP.UTF-8' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export XMODIFIERS=@im=fcitx' >> /home/ubuntu/.vnc/xstartup \
  && echo 'export GTK_IM_MODULE=fcitx' >> /home/ubuntu/.vnc/xstartup \
  && echo 'fcitx -r -d &' >> /home/ubuntu/.vnc/xstartup \
  && echo 'exec mate-session' >> /home/ubuntu/.vnc/xstartup \
  && chmod +x /home/ubuntu/.vnc/xstartup \
  && mkdir -p /home/ubuntu/data \
  && chown -R ubuntu:ubuntu /home/ubuntu/data

expose 5901
volume ["/home/ubuntu/data"]
cmd /usr/bin/vncserver :1 -localhost no -geometry 1152x864 -alwaysshared -fg

〇コンテナの実行
docker run -it -v `pwd`:/home/ubuntu/data -p 5901:5901 -u ubuntu --privileged ub1804vncmatefritzing094