We are using AD SSO. How can we make this work?

Is it necessary to enter a Gsuite username and password when setting this up? We normally log into new chromebooks with the credentials of the student who will get that chromebook so that it shows up in our inventory as belonging to that student.

Hey all!

Has anyone used the centipede to enter proxy information for our network?

I've tried to dive into the code myself without a ton of success, and wanted to see if anyone else has had success? Thanks for the help!

I have setup the script and it runs without problems until wifi selection. I have a open Wifi with the name name "Test-interclient". When the script runs the output is "Test+interclient". It is the same for the enrollment username, @ becomes +. Does anyone know how to solve this?

Post has attachment
For those looking to use Adafruit Trinkets, I believe that I have worked out how to program these boards with the Centipede script. Many thanks to Greg Walker @hssd for their script which I have not changed.

The biggest issue has been getting the Board and Libraries installed as well as the proper adjustments to the script. I believe that the script is the Pre 58 version, but a Find/Replace with the newest script should work. Also, I've not tested the Capital letter/Special Characters functionality.

First, I recommend using the IDE rather than the web environment. Next, you will want to add the boards to your IDE. This can be done by going to File > Preferences > Manage Boards and pasting in "https://adafruit.github.io/arduino-board-index/package_adafruit_index.json" in the Additional Boards Manager URL section. Once this is added, you will be able to see the Adafruit boards in the Tools > Board menu. It may require restarting.

Next you need to add the appropriate libraries. They can be downloaded as a Zip folder from here. You will need to unzip the folder and add each of the required library folders into the Arduino Libraries folder. I'm including a screenshot of what is listed in my libraries folder (as well as the path to the folder):

The major one to make sure is added is "TrinketKeyboard."

Once the appropriate libraries are added, you can now call it using the script. The Modified script changes all instances of "Keyboard" to "TrinketKeyboard". The result would look like this:

////////////////////////////////////////////
#include <TrinketKeyboard.h>
/
Copyright (c) 2016, Amplified IT
* See the full description at http://labs.amplifiedit.com/centipede
*
* Support forums are available at https://amplifiedlabs.zendesk.com/hc/en-us/categories/202956448-Centipede

Published under an MIT License https://opensource.org/licenses/MIT

******** READ THIS SECTION ****************
* Use all lower case for the definitions to ensure the most compatibility for all devices
* Some keyboard emulators do not work properly with upper case or special characters that require modifier key presses

Simply put, if you need to press the shift key to enter any of the information in the lines below, there's a chance it won't work properly
/
/
* Do not use any upper case letters here. Chromebook keyboards are emulated differently, and will not work.
*/
#define wifi_name "YOUR SSID HERE" // Define SSID for your wireless connection. Do not use capital letters
#define wifi_pass "YOUR SSID PASSWORD HERE" // Define the password for your wireless connection. Do not use capital letters
#define wifi_security 2 // Set to 0 for open, 1 for WEP, 2 for WPA
#define username "YOUR NETWORK CREDENTIAL HERE SUCH AS notvalid@hssd.net" // Define the user name for enrolling the device. Do not use capital letters
#define domain "YOUR GOOGLE DOMAIN HERE such as hssd.net" // Set your domain here
#define password "YOUR NETWORK CREDENTIAL PASSWORD HERE" // The password for the enrollment GAFE account. Do not use capital letters
#define PIN_BUTTON_STRING 2
void setup()
{
// // setting input pins to high means turning on internal pull-up resistors
// digitalWrite(PIN_BUTTON_STRING, LOW);
// // remember, the buttons are active-low, they read LOW when they are not pressed
TrinketKeyboard.begin();
// button pins as inputs
pinMode(PIN_BUTTON_STRING, INPUT);
// setting input pins to high means turning on internal pull-up resistors
digitalWrite(PIN_BUTTON_STRING, LOW);
// remember, the buttons are active-low, they read LOW when they are not pressed
// start USB stuff
//wait(8);
//delay(500);
//TrinketKeyboard.print("Waiting for Chromebook to start 5sec");

}
void loop() {
TrinketKeyboard.poll();
//TrinketKeyboard.print("Waiting for Chromebook to start 5sec");
TrinketKeyboard.print("e");
delay(5000);

if (digitalRead(PIN_BUTTON_STRING) == LOW) {
//TrinketKeyboard.print("Start Wifi Config");
wifiConfig();
delay(5000);
//TrinketKeyboard.print("Enter Credintials");
enterCredentials();
delay(5000);
setp2p();
delay(10000);
TrinketKeyboard.print("DONE");
delay(5000);
while (true) {
} //Stop Sketch
//showSuccess();
}
}
void setp2p() {
TrinketKeyboard.poll();
delay(4000);
// Enter Guest Mode shift tab twice with delay
// TrinketKeyboard.print("tab");
TrinketKeyboard.pressKey(KEYCODE_MOD_LEFT_SHIFT, KEYCODE_TAB);
TrinketKeyboard.pressKey(0, 0);
delay(500);
// TrinketKeyboard.print("tab");
TrinketKeyboard.pressKey(KEYCODE_MOD_LEFT_SHIFT, KEYCODE_TAB);
TrinketKeyboard.pressKey(0, 0);
delay(500);
// TrinketKeyboard.print("enter");
TrinketKeyboard.pressKey(0,KEYCODE_ENTER);
TrinketKeyboard.pressKey(0, 0);
delay(10000);
TrinketKeyboard.pressKey(KEYCODE_MOD_LEFT_CONTROL | KEYCODE_MOD_RIGHT_ALT, KEYCODE_T);
TrinketKeyboard.pressKey(0, 0);
delay(6000);
TrinketKeyboard.print("p2p_update enable");
delay(500);
// TrinketKeyboard.print("enter");
TrinketKeyboard.pressKey(0,KEYCODE_ENTER);
TrinketKeyboard.pressKey(0, 0);
delay(6000);
TrinketKeyboard.pressKey(KEYCODE_MOD_LEFT_CONTROL | KEYCODE_MOD_LEFT_SHIFT, KEYCODE_Q);
TrinketKeyboard.pressKey(0, 0);
TrinketKeyboard.pressKey(KEYCODE_MOD_LEFT_CONTROL | KEYCODE_MOD_LEFT_SHIFT, KEYCODE_Q);
TrinketKeyboard.pressKey(0, 0);
delay(5000);
}
void enterCredentials() {
delay(4000);
TrinketKeyboard.print(username);
// TrinketKeyboard.print("enter");
TrinketKeyboard.pressKey(0,KEYCODE_ENTER);
TrinketKeyboard.pressKey(0, 0);
delay(2000);
TrinketKeyboard.print(password);
TrinketKeyboard.pressKey(0,KEYCODE_ENTER);
TrinketKeyboard.pressKey(0, 0);
// Wait for enrollment to complete
delay(45000);
TrinketKeyboard.pressKey(0,KEYCODE_ENTER);
TrinketKeyboard.pressKey(0, 0);
}
void enterEnrollment() {
TrinketKeyboard.poll();
// TrinketKeyboard.print("enterEnrollment");
TrinketKeyboard.pressKey(KEYCODE_MOD_LEFT_CONTROL | KEYCODE_MOD_RIGHT_ALT, KEYCODE_E);
TrinketKeyboard.pressKey(0, 0);
delay(1000);
}
void wifiConfig() {
// TABs to enter Wifi Configuration. Change the number below to match if your devices require a different number of tabs to select the wifi configuration
// TrinketKeyboard.print("tab");
TrinketKeyboard.pressKey(0,KEYCODE_TAB);
TrinketKeyboard.pressKey(0, 0);
delay(1000);
// TrinketKeyboard.print("tab");
TrinketKeyboard.pressKey(0,KEYCODE_TAB);
TrinketKeyboard.pressKey(0, 0);
delay(1000);
// TrinketKeyboard.print("enter");
TrinketKeyboard.pressKey(0,KEYCODE_ENTER);
TrinketKeyboard.pressKey(0, 0);
delay(1000);
// Down arrow 10 times Up arrow 1 times to open other wifi settings
TrinketKeyboard.pressKey(0,KEYCODE_ARROW_DOWN);
TrinketKeyboard.pressKey(0, 0);
delay(1000);
// TrinketKeyboard.print("down");
TrinketKeyboard.pressKey(0,KEYCODE_ARROW_DOWN);
TrinketKeyboard.pressKey(0, 0);
delay(1000);
// TrinketKeyboard.print("down");
TrinketKeyboard.pressKey(0,KEYCODE_ARROW_DOWN);
TrinketKeyboard.pressKey(0, 0);
delay(1000);
// TrinketKeyboard.print("down");
TrinketKeyboard.pressKey(0,KEYCODE_ARROW_DOWN);
TrinketKeyboard.pressKey(0, 0);
delay(1000);
// TrinketKeyboard.print("down");
TrinketKeyboard.pressKey(0,KEYCODE_ARROW_DOWN);
TrinketKeyboard.pressKey(0, 0);
delay(1000);
// TrinketKeyboard.print("down");
TrinketKeyboard.pressKey(0,KEYCODE_ARROW_DOWN);
TrinketKeyboard.pressKey(0, 0);
delay(1000);
// TrinketKeyboard.print("down");
TrinketKeyboard.pressKey(0,KEYCODE_ARROW_DOWN);
TrinketKeyboard.pressKey(0, 0);
delay(1000);
// TrinketKeyboard.print("down");
TrinketKeyboard.pressKey(0,KEYCODE_ARROW_DOWN);
TrinketKeyboard.pressKey(0, 0);
delay(1000);
// TrinketKeyboard.print("down");
TrinketKeyboard.pressKey(0,KEYCODE_ARROW_DOWN);
TrinketKeyboard.pressKey(0, 0);
delay(1000);
// TrinketKeyboard.print("down");
TrinketKeyboard.pressKey(0,KEYCODE_ARROW_DOWN);
TrinketKeyboard.pressKey(0, 0);
delay(1000);
// TrinketKeyboard.print("down");
// TrinketKeyboard.pressKey(0,KEYCODE_ARROW_UP);
// TrinketKeyboard.pressKey(0, 0);
// TrinketKeyboard.print("up");
// TrinketKeyboard.print("enter");
TrinketKeyboard.pressKey(0,KEYCODE_ENTER);
TrinketKeyboard.pressKey(0, 0);
delay(5000);
// SSID
TrinketKeyboard.print(wifi_name);
delay(1000);
// TAB
// TrinketKeyboard.print("tab");
TrinketKeyboard.pressKey(0,KEYCODE_TAB);
TrinketKeyboard.pressKey(0, 0);
delay(1000);
TrinketKeyboard.pressKey(0,KEYCODE_ARROW_DOWN);
TrinketKeyboard.pressKey(0, 0);
// TrinketKeyboard.print("down");
TrinketKeyboard.pressKey(0,KEYCODE_ARROW_DOWN);
TrinketKeyboard.pressKey(0, 0);
// TrinketKeyboard.print("down");
// TAB
// TrinketKeyboard.print("tab");
TrinketKeyboard.pressKey(0,KEYCODE_TAB);
TrinketKeyboard.pressKey(0, 0);
delay(1000);
// type wifi password
TrinketKeyboard.print(wifi_pass);
delay(1000);
// Enter
// TrinketKeyboard.print("enter");
TrinketKeyboard.pressKey(0,KEYCODE_ENTER);
TrinketKeyboard.pressKey(0, 0);
// Delay 15 seconds to connect to wifi
delay(15000);
// TrinketKeyboard.print("tab");
TrinketKeyboard.pressKey(0,KEYCODE_TAB);
TrinketKeyboard.pressKey(0, 0);
// TrinketKeyboard.print("tab");
TrinketKeyboard.pressKey(0,KEYCODE_TAB);
TrinketKeyboard.pressKey(0, 0);
// TrinketKeyboard.print("enter");
TrinketKeyboard.pressKey(0,KEYCODE_ENTER);
TrinketKeyboard.pressKey(0, 0);
// Delay 15 seconds to connect to eula
delay(15000);
// 5 tabs then enter for eula
// TrinketKeyboard.print("tab");
TrinketKeyboard.pressKey(0,KEYCODE_TAB);
TrinketKeyboard.pressKey(0, 0);
// TrinketKeyboard.print("tab");
TrinketKeyboard.pressKey(0,KEYCODE_TAB);
TrinketKeyboard.pressKey(0, 0);
// TrinketKeyboard.print("tab");
TrinketKeyboard.pressKey(0,KEYCODE_TAB);
TrinketKeyboard.pressKey(0, 0);
// TrinketKeyboard.print("tab");
TrinketKeyboard.pressKey(0,KEYCODE_TAB);
TrinketKeyboard.pressKey(0, 0);
// TrinketKeyboard.print("tab");
TrinketKeyboard.pressKey(0,KEYCODE_TAB);
TrinketKeyboard.pressKey(0, 0);
// TrinketKeyboard.print("enter");
TrinketKeyboard.pressKey(0,KEYCODE_ENTER);
TrinketKeyboard.pressKey(0, 0);
// Delay 15 seconds to check for updates
delay(15000);
//TrinketKeyboard.print("Start Enrollment");
delay(2000);
enterEnrollment();
// TrinketKeyboard.print("enter");
// TrinketKeyboard.pressKey(0,KEYCODE_ENTER);
// TrinketKeyboard.pressKey(0, 0);
delay(1000);
}
////////////////////////////////////////////
I've not completely tested everything, but the errors that I was getting before have disapeared.
Photo

We have the new Lenovo E100's. I am running the 58 version script on it. When I do that, the network is choosen and that is ok. Then it goes back to the first screen and then it powers off.

My curiosity was peaked when I saw this line:
#define skipAssetIdScreen 1 // Set to 0 if you want Centipede to stop at the asset ID and location screen

Obviously, Centipede is just a keyboard/mouse emulator, so it isn't adding a feature that isn't already available to us, so what assetIDScreen are they speaking of? Is there a way to fill out the AssetID field during enrollment? I tried it (setting to O) and I didn't notice any difference.

I am not having much success with my scripting and getting my Chromebooks to enroll by using an Arduino. Below is the 'cut' from my current script. It acts like it does not recognize I want it to do the advanced network setup? Any thoughts? (Notice I placed "CORRECT" where I have double checked that things have been entered correctly). The wifi_security has me looking at it quizically.

====CUT====

#define wifi_name "CORRECT" // Define SSID for your wireless connection.
#define wifi_pass "CORRECT" // Define the password for your wireless connection.
#define wifi_security 2 // Set to 0 for open, 1 for WEP, 2 for WPA
#define username "CORRECT" // Define the user name for enrolling the device.
#define password "CORRECT" // The password for the enrollment GAFE account.

// Use these options to determine if you want to disable analytics, skip asset ID, or if you need to slow down the Centipede

#define sendUsageToGoogle 0 // Set to 0 if you want to un-check the box to send usage analytics to Google
#define skipAssetIdScreen 1 // Set to 0 if you want Centipede to stop at the asset ID and location screen
#define languageIsSelectedOnBoot 1 // Set to 1 if the language box is selected when you first power on the device

/* These are advanced options. The defaults should be fine, but feel free to tweak values below. */

// Use this area for advanced network setup options
#define advancedNetworkSetup true // Set to true for EAP configuration, and fill out the definitions below
#define eapMethod "PEAP" // Valid options are "LEAP" "PEAP" "EAP-TLS" or "EAP-TTLS" - note that they require the quotes to work properly
#define phaseTwoAuthentication 2 // Set to 0 for automatic, 1 for EAP-MD5, 2 for MSCHAPv2, 3 for MSCHAP, 4 for PAP, 5 for CHAP
#define serverCaCertificateCheck 1 // 0 is default, 1 is "Do not check"
#define subjectMatch "" // Fill in subject match here if needed for advanced wireless
#define identity "CORRECT" // Fill in identity here if needed for advanced wireless
#define anonymousIdentity "" // Fill in anonymous identity here for advanced wireless
#define saveIdentityAndPassword 1 // Set to 1 to save identity and password. NOT RECOMMENDED

Has anyone tried re enrolling the chromebooks V58 . The current code for v58 is missing some steps i guess. If someone has already worked on resolving it would love to take advantage :)

Has anyone tried re enrolling the chromebooks V58 . The current code for v58 is missing some steps i guess. If someone has already worked on resolving it would love to take advantage :)
Wait while more posts are being loaded