Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.
I saw many folks struggling to get USB booting to work, and I'm happy to report that I was able to write the 16.04 remix image to a USB drive using dd on modern macOS 14 and boot using the 2023 NEW probe-usb method on my iBook G3 clamshell. Here are my steps.

1. Download the 16.04 V2 remix ISO from here on your modern macOS machine
2. Plug your USB drive in and figure out which /dev/diskX device number is your thumb drive by running diskutil list
3. Run the following command, replacing X with your thumb drive's device number:
sudo dd if=~/Downloads/lubuntu-16.04-remix-v2-ppc.iso of=/dev/rdiskX bs=1
4. Plug the USB drive into your iBook
5. Boot your iBook and hold Command + Option + O + F to enter OpenFirmware
6. Run the following command (refer to the 2023 NEW Method guide):
probe-usb boot usb0/disk:2,\\:tbxi
7. Just hit enter to boot live and everything works (albeit quite slow!)

Of course, this will work on other Macs, just try usb0, usb1, etc or refer to the 2023 NEW Method guide's instructions to do it systematically. This is very similar to the guide I made to install Mac OS X Tiger on iBooks, basically the same steps. Enjoy!
 

Attachments

  • IMG_9858.jpg
    IMG_9858.jpg
    1.6 MB · Views: 99
Last edited:
Attached are the two boot ROMs I dumped using the memory mapped method. I'm going to try using the programmer mode method and see if I can get a clean dump I can tinker with.
The ROMs are both 4.1.7f4 and they match a previous dump I have (except the nvram and config parts which are usually unique per machine).
The config block I had was from a PowerBook2,1. Yours are from two different revisions of the PowerBook2,2.

Hmm, the internal method says "No chipset found" and "No EEPROM/flash device found" despite booting with the power button held until it chimes and gives the flashing LED... Any ideas?
You have to look at the flashrom source code to see which Mac ROMs, if any, are supported. I think there were a couple. They might not be applicable to your Macs. I don't know if I included the programmer mode methods in my fork or if the DirectHW.kext has all the necessary code to make it work. It might.

You can look at the Open Firmware code in the firmware updaters to see the supported flashrom chips and flashing methods.

I have a B&W G3 and a Quad G5 - both probably have different flashing methods than your Macs so I can't test any changes.

The Quad G5 firmware updater doesn't exist or doesn't have Open Firmware code. It might be similar to later firmware updaters but those don't use Open Firmware code.

The B&W G3 firmware updater has Open Firmware code, so we can learn how that flashing works. I've added to DingusPPC flashrom emulation for Old World Power Macs (like the Power Macintosh 8600). I haven't finished the flashrom emulation for B&W G3's. DingusPPC doesn't yet emulator newer Power Macs.

The goal here is to determine how to encode display-family into the boot ROM to avoid needing a nvramrc script to enable the XGA 1024x768 display I have in this iBook.
There is a 4.1.7f4 Firmware Updater that you can run from Open Firmware. I have scripts to take apart firmware updaters and checksums for each part. You can make a script to create a new firmware updater and update the checksums. The config block of each of your ROMs exist in the 4.1.7f4 Firmware Updater (see the dated PowerBook2,2 items below):
Code:
    // excerpt from DingusPPC romidentity.cpp
    rom( 0x108100, 0x71fd2fc9, "P1"             , "P1"       , nullptr  , "iBook G3 (Original/Clamshell)"                     ) // PowerBook2,1
    rom( 0x108100, 0x9fcf30c8, "P1"             , "P1"       , nullptr  , "iBook G3 (Original/Clamshell)"                     ) // PowerBook2,1
    rom( 0x108100, 0xcea031c7, "P1"             , "P1"       , nullptr  , "iBook G3 (Original/Clamshell)"                     ) // PowerBook2,1
    rom( 0x108101, 0x72902fcb, "P1_05"          , "P1"       , nullptr  , "iBook G3 (Original/Clamshell)"                     ) // PowerBook2,1
    rom( 0x108101, 0xa06230ca, "P1_05"          , "P1"       , nullptr  , "iBook G3 (Original/Clamshell)"                     ) // PowerBook2,1 // 2001-03-20 417f4
    rom( 0x108101, 0xcf3331c9, "P1_05"          , "P1"       , nullptr  , "iBook G3 (Original/Clamshell)"                     ) // PowerBook2,1
    rom( 0x108102, 0x7de22ffd, "P1_1"           , "P1"       , nullptr  , "iBook G3 (Original/Clamshell)"                     ) // PowerBook2,1
    rom( 0x108102, 0xabb430fc, "P1_1"           , "P1"       , nullptr  , "iBook G3 (Original/Clamshell)"                     ) // PowerBook2,1
    rom( 0x108102, 0xda8531fb, "P1_1"           , "P1"       , nullptr  , "iBook G3 (Original/Clamshell)"                     ) // PowerBook2,1
    rom( 0x108200, 0x7bdc2fd9, "P1_5"           , "P1_5"     , nullptr  , "iBook G3 366 MHz CD (Firewire/Clamshell)"          ) // PowerBook2,2
    rom( 0x108200, 0xa9ae30d8, "Midway"         , "P1_5"     , nullptr  , "iBook G3 366 MHz CD (Firewire/Clamshell)"          ) // PowerBook2,2 // 2001-03-20 417f4
    rom( 0x108201, 0x9745301a, "P1_5DVD"        , "P1_5"     , nullptr  , "iBook G3 466 MHz DVD (Firewire/Clamshell)"         ) // PowerBook2,2
    rom( 0x108201, 0xc5173119, "MidwayDVD"      , "P1_5"     , nullptr  , "iBook G3 466 MHz DVD (Firewire/Clamshell)"         ) // PowerBook2,2 // 2001-03-20 417f4

My OpenBIOSStuff repository has scripts and tools that can dump the assembly and fcode parts of Open Firmware. The fcode parts are converted to Forth. The Forth code can be converted back to fcode but that process takes a bit of extra work. See My "Open Firmware Extender" (v19 for Open Firmware 2.4) discussed in the DingusPPC discord to see how it creates fcode images from parts copied from the Forth dumps (requires a list of exports for the version of Open Firmware). You'll need code from my lzss repository as well to decompress or compress the parts of a ROM or firmware updater.

It might be possible for newer Open Firmware firmware updaters (such as 4.1.8f5 or 4.1.9f1) to work on your Macs (if the firmware updater includes the config block for your Mac) but there's no guarantee that Apple tested those newer versions on your Macs. If they render your Mac not bootable, then you'll need to remove the firmware chip to flash it externally somehow.

It appears that display-family is a property created in the root of the device tree. For product-id 0x1082 (which you see in the romidentity.cpp except or in the updaterinfo.txt file or in the config block), the value is set to 1. What value do you want it to be? The firmware is compressed in the ROM and in the firmware updater, so the change will be more than just a single byte. There's two copies of Open Firmware in the ROM. One in the Recovery section and another in the Boot section.
 

Attachments

Nice. Glad you find it still useful. Don’t forget, you can update the preinstalled browsers or add extra browsers from here. Install the downloaded browsers like so: sudo dpkg -i /path/to/package-name.deb

Cheers
The only thing I would like to know is , is it possible to run Youtube on my G4 running Lubuntu Remix 12.04 Arctic fox browser?
 
It appears that display-family is a property created in the root of the device tree. For product-id 0x1082 (which you see in the romidentity.cpp except or in the updaterinfo.txt file or in the config block), the value is set to 1. What value do you want it to be? The firmware is compressed in the ROM and in the firmware updater, so the change will be more than just a single byte. There's two copies of Open Firmware in the ROM. One in the Recovery section and another in the Boot section.
Super insightful, I'm looking forward to digging into this!

The goal is to set display-family to 3, like we normally would do with this nvramrc (which adds a 30 second startup penalty):

Code:
dev /
3 encode-int " display-family" property

Sounds like I'd have to find where that's stored and change it in two sections... How would I go about finding the right offset for it?

BTW, I found an old program called RomGrabber from segher, it dumps identical ROMs to the flashrom you provided.
 
Last edited:
Sounds like I'd have to find where that's stored and change it in two sections... How would I go about finding the right offset for it?
I suppose since the change is a single byte, that changing the fcode rather than trying to re-tokenize the Forth output might be easier.

You would run the DumpMacRom.sh "../ROMs/decompressed/All.rom" command from the worksheet to get the All.txt file. That file will include the assembly and detokenized fcode and the offset for each byte.

Find the offset and change the byte. You should probably update the fcode image checksum as well. This would be automatically updated if you used toke on the Forth code. However, I've never tried to tokenize main fcode image of a Mac ROM before. Some stuff will need to be fixed in the Forth code and the tokenizer to make that work. For example, my tokenizer doesn't produce the [3fe] fcode for the conditional compilation parts.

detokinized fcode from "All.txt":
Code:
  7886: 008D88: \ detokenizing start at offset 008D88
  7887: 008D88: version1 \ [0x0fd] 
  7888: 008D89:   format:    0x08
  7889: 008D8A:   checksum:  0x7b74 (ok)
  7890: 008D8C:   len:       0x4b8b0 (309424 bytes)
...
 36667: 01C899: product-id \ [0xa69] 
 36668: 01C89B: b(case) \ [0x0c4] 
 36669: 01C89C: 	unnamed_fcode_a60 \ [0xa60] 
 36670: 01C89E: 	b(of) \ [0x01c] 0x4
 36671: 01C8A0: 		0 \ [0x0a5] 
 36672: 01C8A1: 		b(endof) \ [0x0c6] 0x1d
 36673: 01C8A3: 	unnamed_fcode_a53 \ [0xa53] 
 36674: 01C8A5: 	b(of) \ [0x01c] 0x4
 36675: 01C8A7: 		1 \ [0x0a6] 
 36676: 01C8A8: 		b(endof) \ [0x0c6] 0x16
 36677: 01C8AA: 	unnamed_fcode_a61 \ [0xa61] 
 36678: 01C8AC: 	b(of) \ [0x01c] 0x4
 36679: 01C8AE: 		2 \ [0x0a7] 
 36680: 01C8AF: 		b(endof) \ [0x0c6] 0xf
 36681: 01C8B1: 	unnamed_fcode_a56 \ [0xa56] 
 36682: 01C8B3: 	b(of) \ [0x01c] 0x4
 36683: 01C8B5: 		3 \ [0x0a8] 
 36684: 01C8B6: 		b(endof) \ [0x0c6] 0x8
 36685: 01C8B8: 	dup \ [0x047] 
 36686: 01C8B9: 	b(of) \ [0x01c] 0x4
 36687: 01C8BB: 		-1 \ [0x0a4] 
 36688: 01C8BC: 		b(endof) \ [0x0c6] 0x2
 36689: 01C8BE: 	b(endcase) \ [0x0c5] 
 36690: 01C8BF: product-code \ [0xa6e] 
 36691: 01C8C1: unnamed_fcode_a57 \ [0xa57] 
 36692: 01C8C3: = \ [0x03c] 
 36693: 01C8C4: lb?branch \ [0x3fe] 0x4
 36694: 01C8C8: 	drop \ [0x046] 
 36695: 01C8C9: 	-1 \ [0x0a4] 
 36696: 01C8CA: 	b(>resolve) \ [0x0b2] 
 36697: 01C8CA: dup \ [0x047] 
 36698: 01C8CB: -1 \ [0x0a4] 
 36699: 01C8CC: = \ [0x03c] 
 36700: 01C8CD: lb?branch \ [0x3fe] 0x7
 36701: 01C8D1: 	drop \ [0x046] 
 36702: 01C8D2: 	lbbranch \ [0x3ff] 0x16
 36703: 01C8D6: 		b(>resolve) \ [0x0b2] 
 36704: 01C8D6: 	encode-int \ [0x111] 
 36705: 01C8D8: 	b(") \ [0x012] " display-family" 
 36706: 01C8E8: 	property \ [0x110] 
 36707: 01C8EA: 	b(>resolve) \ [0x0b2]

Converted to Forth in "Part2.of":
Code:
product-id																		\					[a69]
case																			\					[0c4]
	const_a60_30c1																\ (a60 30c1)		[a60]
	of																			\ (0x4)				[01c]
		0																		\					[0a5]
	endof																		\ (0x1d)			[0c6]
	const_a53_1082																\ (a53 1082)		[a53]
	of																			\ (0x4)				[01c]
		1																		\					[0a6]
	endof																		\ (0x16)			[0c6]
	const_a61_30c2																\ (a61 30c2)		[a61]
	of																			\ (0x4)				[01c]
		2																		\					[0a7]
	endof																		\ (0xf)				[0c6]
	const_a56_1101																\ (a56 1101)		[a56]
	of																			\ (0x4)				[01c]
		3																		\					[0a8]
	endof																		\ (0x8)				[0c6]
	dup																			\					[047]
	of																			\ (0x4)				[01c]
		-1																		\					[0a4]
	endof																		\ (0x2)				[0c6]
endcase																			\					[0c5]
product-code																	\					[a6e]
const_a57_11101																	\ (a57 11101)		[a57]
=																				\					[03c]
if																				\ (0x4)				[3fe]
	drop																		\					[046]
	-1																			\					[0a4]
then																			\					[0b2]
dup																				\					[047]
-1																				\					[0a4]
=																				\					[03c]
if																				\ (0x7)				[3fe]
	drop																		\					[046]
else																			\ (0x16)			[3ff 0b2]
	encode-int																	\					[111]
	" display-family"															\					[012]
	property																	\					[110]
then																			\					[0b2]

The offsets shown are from the "All.rom" file (which is just the Open Firmware part of the 1 MiB ROM). It looks like you need to change the fcode byte at offset 0x1C8A7 from 0xa6 to 0xa8.

You'll have to look at the various commands in the worksheet (from dd to catenateparts) to see how the "All.rom" file was produced. Then reverse the process to reproduce the 1MiB ROM.

To produce a firmware updater, you have to reverse the process done by the convert_updater_to_rom command. See the "updaterinfo.txt" file produced by that command to see a list of all the parts of an updater. You should probably run the convert_updater_to_rom command yourself to get all the parts from the firmware file "ROM 4.1.7f4 iBook G3 (all clamshell models) Firmware Update/iBook Firmware Update/iBook Firmware"
 
It use to be. I’m sure it’s probably still possible. I haven’t messed with my PPC’s in a few years though.

Thanks for that but, I have been trying to get Greasemonkey to utilize Youtube for my G4 sunflower but without success. What I need is instructions as how to proceed.
 
Thanks for that but, I have been trying to get Greasemonkey to utilize Youtube for my G4 sunflower but without success. What I need is instructions as how to proceed.
Thank you but, when I go Palemoon - Greasemonkey- Git site I cant find any way of downloading Greasemonkey. No download available, nothing. I don't get it at all.
 
I’m having similar issues to others getting USB to boot. It’s my PowerBook G4 (early 2005 15”), and I’m using the same flash drive that I’ve used to boot OS X successfully. I’ve tried tbxi and yaboot, but neither work. Has anybody had trouble with this model booting Linux?
EDIT: my flash drive doesn’t show up in dev / ls, but it didn’t for OS X either. It’s plugged into the port I know to be usb0, and I’m prefixing it with probe-usb. I’m unsure of which partition it is (OS X can’t read the format so it’s no help), but I know the drive is good because it can boot on my iBook G3.
 
It’s been a few years since i used it. Things may have changed, but the Hyperion guys seem to have it working yet. Did you go in to viewtubes settings (the hamburger menu next to the play button) and make the proper adjustments as shown in the screenshot? Did you install mozplugger and/or browser-plugin-vlc? Did you change the user agent override for youtube to a mobile UA?

Screenshot 2026-03-03 at 1.23.05 AM.png
 
It’s been a few years since i used it. Things may have changed, but the Hyperion guys seem to have it working yet. Did you go in to viewtubes settings (the hamburger menu next to the play button) and make the proper adjustments as shown in the screenshot? Did you install mozplugger and/or browser-plugin-vlc? Did you change the user agent override for youtube to a mobile UA?

View attachment 2609309
Yay, thanks for that, I reset the options in the hamburger menu. Fantastic.

😃
 
Last edited:
Also is there a way to save all the viewtube specs. Whenever I turn off the comp and I have to start all over again and now I cant play any youtube videos?
 
Last edited:
It should remember your settings. However, if i recall correctly, Arctic Fox by default is set to “private browsing” mode by default. Go in to preferences and set it to remember history, enable cookies, etc. Then your viewtube settings should be saved between reboots.
 
  • Like
Reactions: Divali
Thanks for that but I can't seem to get back to a working youtube/Viewtube. Try as I might even reinstalled Lubuntu Remix and gone through all the requirements ie. Mozplugger - Greasemonkey - Viewtube - Viewtube script and the Viewtube settings. I just cant get Viewtube to play, tried many times without success. I must be missing something. It was working perfectly the first time. Working now .. complete new re-install and used whole disk, following Wicknix's instructions.
 
Last edited:
So, while you all are trying to get youtube videos to work on our "antiquated Macs, I'm back at trying to get my G5 Cheesegrater desktop to drive two monitors from a Radeon 9600 where one of the video ports is the ever so popular Mac proprietary Cinema or Studio display connection. Currently the score is Linux Distros 14, me...nothing. I have yet to discover a "modern-ish" Linux distro that will drive a Studio or Cinema display along side a DVI monitor.

Recently I have tried 16.04 Remix, MacBuntu, Fienix 6.01 and Debian 12/MintPPC. Of those Macbuntu has shown there may be a way. Usually when I boot into Linux on the G5 with BOTH monitors attached it crashes with no screen, cursor, anything. After loading Macbuntu Remix, and booting, a very strange thing happened, it booted to a usable desktop on the 1920x1080 DVI screen but a blank screen on the Apple Studio Display. What was strange was that the DVI screen tried to extend into the Studio display, it just wasn't showing up. I messed around with a few xrandr settings but according to xrandr, the maximum screen size is 1920x1920. I need the max screen size to be 1920(DVI width)+1280 (Apple Display width) x 1024 (Apple Display height)

Any attempts using LxRandR or xrandr settings have not resulted in getting the Studio display to work.

So, I thought maybe an xorg.conf file would help. So I hit Ctrl-Alt-F2 to go to the terminal and run Xorg -configure after stopping lightdm, but the terminal only provided a garbled unreadable mess. In order to successfully establish a properly configured xorg.conf, both monitors need to be connected at startup, and you have to be able to get to a tty to execute Xorg -configure.

Is it possible to create an xorg.conf file in the /etc/X11 directory that only includes the information needed to get the second screen. In other words, an xorg.conf file that only addresses the limiting screen size? That's what I'm going to attempt next. xrandr doesn't have a way to increase the screen size, and using it to tell X11 that it's to the right of the bigger screen doesn't work either, all because xrandr shows the maximum screen size to be 1920x1920 and it needs to be 3200x1080 (or 1024).
 
Thanks for that but I can't seem to get back to a working youtube/Viewtube. Try as I might even reinstalled Lubuntu Remix and gone through all the requirements ie. Mozplugger - Greasemonkey - Viewtube - Viewtube script and the Viewtube settings. I just cant get Viewtube to play, tried many times without success. I must be missing something. It was working perfectly the first time.
Update Update I was dual booting Lubuntu Remix and Debian Sid Remix on my M4 sunflower and was having no success getting Youtube to work until I wiped the whole disk and reinstalled Lubuntu Remix alone and went through Wicknix's instructions again and pow! Yuotube/Viewtube worked. So glad, finally.
 
I've reloaded Lubuntu Remix 16.04 v2 on the G5 Cheesegrater. I'm moving through the install instructions and have come across two issues. 1) after the installation of the distro, I apt updated the sources list. I made no changes to it after the initial restart after install. Then I apt upgraded and nothing upgraded, everything was 0. I expected maybe a few items to be installed or upgraded, but nothing.

I then attempted the 16.04 to 18.04 upgrade, copied the new sources.list, added the Feinix Key and then uncommented the Feinix and Debian 10 repoes. The fienix repoes were inaccessible, the Debian ones appeared to work.

I know the feinix project has fallen on hard times (server issues) but was hoping this key would provide access to the repoes. Is there a "new" key I should try?

I would like to add the MATE desktop environment and have run into dependency issues. I attempted to chase each dependency and install what was missing but this just snowballed into needing even more dependecies, so I stopped.

It appears the old "apt install mate-desktop" won't work like in the old days. I'll continue to look at ways to meet the dependency requirements to install the desktop environment.

Finally, I don't think I'll find a Linux distro that will ever drive two monitors whenever an Apple Display is one of the two being used.

Onward and upward!
MacMav
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.