If you have followed my instructions on installing OpenCL™ on the Samsung Chromebook or on the Samsung Chromebook 2, you may be wondering what's next. Well, optimising your code for the ARM® Mali™ GPUs, of course! If you are serious about using your Chromebook as a development board, you may want to know how to connect to it remotely via ssh, and use it with the lid closed. In this blog post, I'll explain how. All the previous disclaimers still apply.
ssh
I assume your Chromebook is already in the developer mode (and on the dev-channel if you are really brave).
Open the Chrome browser, press Ctrl-Alt-T and carry on to enter the shell:
Welcome to crosh, the Chrome OS developer shell. If you got here by mistake, don't panic! Just close this tab and carry on. Type 'help' for a list of commands. crosh> shell chronos@localhost / $
Using sudo, run the make_dev_ssd.sh with the --remove_rootfs_verification flag:
sudo
make_dev_ssd.sh
--remove_rootfs_verification
chronos@localhost / $ sudo /usr/share/vboot/bin/make_dev_ssd.sh --remove_rootfs_verification ERROR: YOU ARE TRYING TO MODIFY THE LIVE SYSTEM IMAGE /dev/mmcblk0. The system may become unusable after that change, especially when you have some auto updates in progress. To make it safer, we suggest you to only change the partition you have booted with. To do that, re-execute this command as: sudo ./make_dev_ssd.sh --remove_rootfs_verification --partitions 4 If you are sure to modify other partition, please invoke the command again and explicitly assign only one target partition for each time (--partitions N ) ERROR: IMAGE /dev/mmcblk0 IS NOT MODIFIED.
Note the number after the --partitions flag and rerun the previous command with this number e.g.:
--partitions
chronos@localhost / $ sudo /usr/share/vboot/bin/make_dev_ssd.sh --remove_rootfs_verification --partitions 4 Kernel B: Disabled rootfs verification. Backup of Kernel B is stored in: /mnt/stateful_partition/backups/kernel_B_20150221_224038.bin Kernel B: Re-signed with developer keys successfully. Successfully re-signed 1 of 1 kernel(s) on device /dev/mmcblk0.
Finally, reboot:
chronos@localhost / $ sudo reboot
Create keys for sshd to use:
sshd
chronos@localhost / $ sudo ssh-keygen -t dsa -f /mnt/stateful_partition/etc/ssh/ssh_host_dsa_key Generating public/private dsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /mnt/stateful_partition/etc/ssh/ssh_host_dsa_key. Your public key has been saved in /mnt/stateful_partition/etc/ssh/ssh_host_dsa_key.pub. chronos@localhost / $ sudo ssh-keygen -t rsa -f /mnt/stateful_partition/etc/ssh/ssh_host_rsa_key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /mnt/stateful_partition/etc/ssh/ssh_host_rsa_key. Your public key has been saved in /mnt/stateful_partition/etc/ssh/ssh_host_rsa_key.pub.
You can leave the passphrase empty (hit the Enter key twice).
Change the PasswordAuthentication setting in /etc/ssh/sshd_config to 'yes':
PasswordAuthentication
/etc/ssh/sshd_config
chronos@localhost / $ sudo vim /etc/ssh/sshd_config # Force protocol v2 only Protocol 2 # /etc is read-only. Fetch keys from stateful partition # Not using v1, so no v1 key HostKey /mnt/stateful_partition/etc/ssh/ssh_host_rsa_key HostKey /mnt/stateful_partition/etc/ssh/ssh_host_dsa_key PasswordAuthentication yes UsePAM yes PrintMotd no PrintLastLog no UseDns no Subsystem sftp internal-sftp
Allow inbound ssh traffic via port 22 and start sshd:
chronos@localhost / $ sudo /sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT chronos@localhost / $ sudo /usr/sbin/sshd
Change the root password (no, I'm not showing you mine):
chronos@localhost / $ sudo passwd Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
Check the IP address of your Chromebook:
chronos@localhost / $ ifconfig lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 0 (Local Loopback) RX packets 72 bytes 5212 (5.0 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 72 bytes 5212 (5.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 mlan0: flags=4163 mtu 1500 inet 192.168.1.70 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::26f5:aaff:fe26:ee0a prefixlen 64 scopeid 0x20 ether 24:f5:aa:26:ee:0a txqueuelen 1000 (Ethernet) RX packets 10522 bytes 3356427 (3.2 MiB) RX errors 0 dropped 8 overruns 0 frame 0 TX packets 6516 bytes 1956509 (1.8 MiB) TX errors 3 dropped 0 overruns 0 carrier 0 collisions 0
(In this case, the IP address is 192.168.1.70.)
192.168.1.70
You should now be able to connect from another computer e.g.:
[lucy@theskyofdiamonds] ssh root@192.168.1.70 localhost ~ # whoami root
To make sshd start on system startup, add a script to /etc/init e.g.
/etc/init
chronos@localhost / $ sudo vim /etc/init/sshd.conf start on started system-services script /sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT /usr/sbin/sshd end script
(A two-space indent is sufficient for the script block.)
Generate a public/private key pair from another computer e.g.:
[lucy@theskyofdiamonds] ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/lucy/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/lucy/.ssh/id_rsa. Your public key has been saved in /home/lucy/.ssh/id_rsa.pub.
Copy the public key to your Chromebook e.g.:
[lucy@theskyofdiamonds] ssh-copy-id root@192.168.1.70 The authenticity of host '192.168.1.70 (192.168.1.70)' can't be established. RSA key fingerprint is 58:2d:89:e7:52:5c:b4:85:1e:79:e0:23:e8:36:f0:c2. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys Password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.1.70'" and check to make sure that only the key(s) you wanted were added. [lucy@theskyofdiamonds] ssh root@192.168.1.70 Last login: Sun Feb 22 00:08:45 GMT 2015 from 192.168.1.74 on ssh localhost ~ #
With the lid open, your Chromebook's GPU may be rendering graphics and running compute tasks concurrently. This may create undesired noise when obtaining performance counters. To keep the Chromebook awake when you close the lid, connect to the Chromebook and disable power management features:
[lucy@theskyofdiamonds] ssh root@192.168.1.70 Last login: Sun Feb 22 00:48:41 GMT 2015 from 192.168.1.74 on ssh localhost ~ # stop powerd
Check that when you close the lid, you can still "talk" to the Chromebook e.g. launch tasks.
To enable power management again, enter:
localhost ~ # start powerd