[{"data":1,"prerenderedAt":713},["ShallowReactive",2],{"Categories":3,"NavIndexCategoriesCountFooter":203,"content-\u002F2025\u002F09\u002F17\u002Frebuilding-a-pi-home-assistant-kiosk\u002F":204},[4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,68,70,71,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202],{"category":5},"System Administration",{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":27},"Software Development",{"category":5},{"category":5},{"category":5},{"category":5},{"category":27},{"category":27},{"category":5},{"category":5},{"category":5},{"category":27},{"category":5},{"category":5},{"category":5},{"category":27},{"category":27},{"category":27},{"category":27},{"category":5},{"category":5},{"category":5},{"category":27},{"category":27},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":27},{"category":5},{"category":5},{"category":27},{"category":27},{"category":27},{"category":27},{"category":5},{"category":27},{"category":27},{"category":67},"Drones & RC",{"category":69},"DIY Projects",{"category":67},{"category":72},"Photography",{"category":69},{"category":69},{"category":69},{"category":67},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":67},{"category":69},{"category":69},{"category":67},{"category":67},{"category":72},{"category":72},{"category":72},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":5},{"category":5},{"category":72},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":5},{"category":67},{"category":67},{"category":72},{"category":72},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":72},{"category":67},{"category":138},"3D Printing - Laser Cutting - CNC",{"category":138},{"category":138},{"category":138},{"category":138},{"category":138},{"category":138},{"category":138},{"category":138},{"category":138},{"category":138},{"category":138},{"category":5},{"category":138},{"category":27},{"category":27},{"category":138},{"category":138},{"category":72},{"category":158},"Photography,3D Printing - Laser Cutting - CNC",{"category":27},{"category":27},{"category":69},{"category":27},{"category":27},{"category":27},{"category":27},{"category":5},{"category":67},{"category":5},{"category":5},{"category":27},{"category":27},{"category":27},{"category":27},{"category":27},{"category":69},{"category":27},{"category":27},{"category":27},{"category":27},{"category":181},"Home Assistant",{"category":181},{"category":72},{"category":27},{"category":27},{"category":72},{"category":138},{"category":5},{"category":72},{"category":72},{"category":138},{"category":27},{"category":181},{"category":181},{"category":72},{"category":72},{"category":72},{"category":72},{"category":72},{"category":72},{"category":72},{"category":72},191,{"id":205,"title":206,"body":207,"category":181,"date":698,"description":699,"embedImage":700,"extension":701,"image":700,"intro":702,"meta":703,"navigation":522,"path":704,"seo":705,"series":700,"sitemap":706,"stem":707,"tags":708,"__hash__":712},"content\u002F2025\u002F09\u002F17\u002Frebuilding-a-pi-home-assistant-kiosk.md","Rebuilding a PI Home Assistant kiosk",{"type":208,"value":209,"toc":687},"minimark",[210,220,223,226,231,234,250,254,282,286,289,292,295,300,303,335,338,341,348,351,355,358,432,435,439,442,445,456,469,472,497,500,562,565,585,589,592,598,604,607,623,626,640,647,650,673,677,680,683],[211,212,213,214,219],"p",{},"Back in ",[215,216,218],"a",{"href":217},"\u002F2023\u002F01\u002F18\u002Fraspberry-pi-home-assistant-kiosk\u002F","2023"," I set up a raspberry pi 4 running chromium in kiosk mode\nto show home assistant dashboard on a wall mounted screen.",[211,221,222],{},"It used a PoE converter for power and connects therefore via internet.",[211,224,225],{},"However - even with ram disks - an SD card has a finite lifetime in a pi. It finally died.",[227,228,230],"h2",{"id":229},"the-rebuild","The rebuild",[211,232,233],{},"Updated hardware:",[235,236,237,241,244,247],"ul",{},[238,239,240],"li",{},"Raspberry Pi 5 4GB",[238,242,243],{},"Waveshare PoE M.2 hat",[238,245,246],{},"Disk - Crucial P310 SSD - 2TB - M.2 2230 - PCIe 4.0",[238,248,249],{},"Screen - the original Pi 1.1 7\" touchscreen from the previous build. You will need the Pi 5 compatible \"Display Cable\" - and note - the display and camera cables look very similar - but they are not the same - luckily it says either Camera or Display on the cable.",[227,251,253],{"id":252},"install","Install",[235,255,256,259,262,265,268,271,274],{},[238,257,258],{},"Use raspberry pi flasher to choose the 64 bit full desktop version.",[238,260,261],{},"Set up user and ssh keys in options - no wifi - this is PoE so will be ethernet",[238,263,264],{},"Install to the SSD",[238,266,267],{},"Install the SSD to the hat and the hat on the pi and boot the pi",[238,269,270],{},"Connect the display cable to Cam\u002FDisp 0 port on the pi and to the screen",[238,272,273],{},"Connect 5v power and ground pins from the adapter to the GPIO 5v and GND headers (if you look at the pi with the ports nearest you and the GPIO header on the right - then the first three pins from the top right corner moving towards the front are 5V, 5V and GND - so - use second and third pins).",[238,275,276,277,281],{},"After boot update apps (",[278,279,280],"code",{},"apt update && apt full-upgrade",")",[227,283,285],{"id":284},"configuration","Configuration",[211,287,288],{},"This is a lot simpler than it used to be.",[211,290,291],{},"On boot it auto logs in to the desktop.",[211,293,294],{},"There are some changes to suit my dashboard:",[296,297,299],"h3",{"id":298},"portrait-mode","Portrait mode",[211,301,302],{},"You can change this manually (to test) with:",[304,305,310],"pre",{"className":306,"code":307,"language":308,"meta":309,"style":309},"language-shell shiki shiki-themes github-dark","wlr-randr --output DSI-1 --transform 90\n","shell","",[278,311,312],{"__ignoreMap":309},[313,314,317,321,325,329,332],"span",{"class":315,"line":316},"line",1,[313,318,320],{"class":319},"svObZ","wlr-randr",[313,322,324],{"class":323},"sDLfK"," --output",[313,326,328],{"class":327},"sU2Wk"," DSI-1",[313,330,331],{"class":323}," --transform",[313,333,334],{"class":323}," 90\n",[211,336,337],{},"On the pi5 install - the screen display and the touchscreen turn together - so we don't need to turn the touchscreen at all.",[211,339,340],{},"To make it permanent:",[211,342,343,344,347],{},"Edit the file ",[278,345,346],{},".config\u002Flabwc\u002Fautostart"," (create if not present) and add the same line.",[211,349,350],{},"Add a 1 second sleep afterwards - I found that without that it would move on before the screen completed its rotateion.",[296,352,354],{"id":353},"chromium-in-kiosk-mode","Chromium in kiosk mode",[211,356,357],{},"At the end of the autostart - add the following:",[304,359,361],{"className":306,"code":360,"language":308,"meta":309,"style":309},"chromium URL_OF_YOUR_HOME_ASSISTANT \\\n    --kiosk \\\n    --noerrdialogs \\\n    --disable-infobars \\\n    --no-first-run \\\n    --enable-features=OverlayScrollbar \\\n    --start-maximized \\\n    --enable-features=WebContentsForceDark &\n",[278,362,363,374,382,390,398,406,414,422],{"__ignoreMap":309},[313,364,365,368,371],{"class":315,"line":316},[313,366,367],{"class":319},"chromium",[313,369,370],{"class":327}," URL_OF_YOUR_HOME_ASSISTANT",[313,372,373],{"class":323}," \\\n",[313,375,377,380],{"class":315,"line":376},2,[313,378,379],{"class":323},"    --kiosk",[313,381,373],{"class":323},[313,383,385,388],{"class":315,"line":384},3,[313,386,387],{"class":323},"    --noerrdialogs",[313,389,373],{"class":323},[313,391,393,396],{"class":315,"line":392},4,[313,394,395],{"class":323},"    --disable-infobars",[313,397,373],{"class":323},[313,399,401,404],{"class":315,"line":400},5,[313,402,403],{"class":323},"    --no-first-run",[313,405,373],{"class":323},[313,407,409,412],{"class":315,"line":408},6,[313,410,411],{"class":323},"    --enable-features=OverlayScrollbar",[313,413,373],{"class":323},[313,415,417,420],{"class":315,"line":416},7,[313,418,419],{"class":323},"    --start-maximized",[313,421,373],{"class":323},[313,423,425,428],{"class":315,"line":424},8,[313,426,427],{"class":323},"    --enable-features=WebContentsForceDark",[313,429,431],{"class":430},"s95oV"," &\n",[211,433,434],{},"The last line is only needed for forcing dark mode.",[296,436,438],{"id":437},"custom-ssl","Custom SSL",[211,440,441],{},"My home net uses a local CA - this was done before letsencrypt supported dns01 challenges - which I would recommend now.",[211,443,444],{},"But - if you need to add a custom CA - then:",[211,446,447,448,451,452,455],{},"Copy the CA cert (pem format) to ",[278,449,450],{},"\u002Fusr\u002Flocal\u002Fshare\u002Fca-certificates\u002F"," - and the filename must end ",[278,453,454],{},".crt","\nThen run:",[304,457,459],{"className":306,"code":458,"language":308,"meta":309,"style":309},"sudo update-ca-certificates\n",[278,460,461],{"__ignoreMap":309},[313,462,463,466],{"class":315,"line":316},[313,464,465],{"class":319},"sudo",[313,467,468],{"class":327}," update-ca-certificates\n",[211,470,471],{},"Test with openssl:",[304,473,475],{"className":306,"code":474,"language":308,"meta":309,"style":309},"openssl s_client -connect URL_OF_YOUR_HOME_ASSISTANT_INCLUDING_PORT -CApath \u002Fetc\u002Fssl\u002Fcerts\n",[278,476,477],{"__ignoreMap":309},[313,478,479,482,485,488,491,494],{"class":315,"line":316},[313,480,481],{"class":319},"openssl",[313,483,484],{"class":327}," s_client",[313,486,487],{"class":323}," -connect",[313,489,490],{"class":327}," URL_OF_YOUR_HOME_ASSISTANT_INCLUDING_PORT",[313,492,493],{"class":323}," -CApath",[313,495,496],{"class":327}," \u002Fetc\u002Fssl\u002Fcerts\n",[211,498,499],{},"Then we need to make chromium trust it - we'll add it to the kiosk user\u003Cs nssdb:",[304,501,503],{"className":306,"code":502,"language":308,"meta":309,"style":309},"sudo apt install libnss3-tools\n\ncertutil -d sql:$HOME\u002F.pki\u002Fnssdb -A -t \"C,,\" -n \"Name of CA\" -i \u002Fusr\u002Flocal\u002Fshare\u002Fca-certificates\u002Ffilename_of_ca.crt\n",[278,504,505,518,524],{"__ignoreMap":309},[313,506,507,509,512,515],{"class":315,"line":316},[313,508,465],{"class":319},[313,510,511],{"class":327}," apt",[313,513,514],{"class":327}," install",[313,516,517],{"class":327}," libnss3-tools\n",[313,519,520],{"class":315,"line":376},[313,521,523],{"emptyLinePlaceholder":522},true,"\n",[313,525,526,529,532,535,538,541,544,547,550,553,556,559],{"class":315,"line":384},[313,527,528],{"class":319},"certutil",[313,530,531],{"class":323}," -d",[313,533,534],{"class":327}," sql:",[313,536,537],{"class":430},"$HOME",[313,539,540],{"class":327},"\u002F.pki\u002Fnssdb",[313,542,543],{"class":323}," -A",[313,545,546],{"class":323}," -t",[313,548,549],{"class":327}," \"C,,\"",[313,551,552],{"class":323}," -n",[313,554,555],{"class":327}," \"Name of CA\"",[313,557,558],{"class":323}," -i",[313,560,561],{"class":327}," \u002Fusr\u002Flocal\u002Fshare\u002Fca-certificates\u002Ffilename_of_ca.crt\n",[211,563,564],{},"You can list the contents of the nssdb with:",[304,566,568],{"className":306,"code":567,"language":308,"meta":309,"style":309},"certutil -d sql:$HOME\u002F.pki\u002Fnssdb -L\n",[278,569,570],{"__ignoreMap":309},[313,571,572,574,576,578,580,582],{"class":315,"line":316},[313,573,528],{"class":319},[313,575,531],{"class":323},[313,577,534],{"class":327},[313,579,537],{"class":430},[313,581,540],{"class":327},[313,583,584],{"class":323}," -L\n",[296,586,588],{"id":587},"vnc","VNC",[211,590,591],{},"Use raspi-config to enable VNC (under interfacing options > VNC).",[211,593,594,595],{},"This starts wayvnc - and the service will read the config from ",[278,596,597],{},"\u002Fetc\u002Fwayvnc",[211,599,600,601],{},"Mine listened on IPv6 by default. If you prefer IPv4 - change ",[278,602,603],{},"\u002Fetc\u002Fwayvnc\u002Fconfig",[211,605,606],{},"Change the line:",[304,608,610],{"className":306,"code":609,"language":308,"meta":309,"style":309},"address = ::\n",[278,611,612],{"__ignoreMap":309},[313,613,614,617,620],{"class":315,"line":316},[313,615,616],{"class":319},"address",[313,618,619],{"class":327}," =",[313,621,622],{"class":327}," ::\n",[211,624,625],{},"to",[304,627,629],{"className":306,"code":628,"language":308,"meta":309,"style":309},"address = 0.0.0.0\n",[278,630,631],{"__ignoreMap":309},[313,632,633,635,637],{"class":315,"line":316},[313,634,616],{"class":319},[313,636,619],{"class":327},[313,638,639],{"class":323}," 0.0.0.0\n",[211,641,642,643,646],{},"and restart the service with ",[278,644,645],{},"sudo systemctl restart wayvnc",".",[211,648,649],{},"You can check it with:",[304,651,653],{"className":306,"code":652,"language":308,"meta":309,"style":309},"ss -lntp | grep 5900\n",[278,654,655],{"__ignoreMap":309},[313,656,657,660,663,667,670],{"class":315,"line":316},[313,658,659],{"class":319},"ss",[313,661,662],{"class":323}," -lntp",[313,664,666],{"class":665},"snl16"," |",[313,668,669],{"class":319}," grep",[313,671,672],{"class":323}," 5900\n",[227,674,676],{"id":675},"finishing","Finishing",[211,678,679],{},"Currently - it is up and running. The only issue is that it takes a few seconds after chromium starts before\nit stops saying \"no internet\" and shows the dashboard.",[211,681,682],{},"That's fine for now - I don't reboot it very often.",[684,685,686],"style",{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}",{"title":309,"searchDepth":376,"depth":376,"links":688},[689,690,691,697],{"id":229,"depth":376,"text":230},{"id":252,"depth":376,"text":253},{"id":284,"depth":376,"text":285,"children":692},[693,694,695,696],{"id":298,"depth":384,"text":299},{"id":353,"depth":384,"text":354},{"id":437,"depth":384,"text":438},{"id":587,"depth":384,"text":588},{"id":675,"depth":376,"text":676},"2025-09-17 12:35 +0200","Back in 2023 I set up a raspberry pi 4 running chromium in kiosk mode\nto show home assistant dashboard on a wall mounted screen.",null,"md","My old pi4 running home assistant kiosk finally killed its SD card - time to build a new one",{},"\u002F2025\u002F09\u002F17\u002Frebuilding-a-pi-home-assistant-kiosk",{"title":206,"description":699},{"loc":704},"2025\u002F09\u002F17\u002Frebuilding-a-pi-home-assistant-kiosk",[709,710,711],"raspberry pi","home assistant","kiosk","2D3snZpg8T8Cyeo_TAbcAU33ym1Uid7zfhrnyAnq2uA",1775292984388]