Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

erici

macrumors newbie
Sep 25, 2021
2
0
I have same MBP, did update, copied your system preferences, still flickering.
As of late, mine periodically is worse - reaching farther across the Touch Bar.

Couple times between putting computer to sleep, the Touch Bar has stopped displaying altogether including the flickering which was a relief. Was worried I was then without an escape key but it still worked as well as the invisible function keys. But back to normal flickering...

I finally used black color pencil really thick on both sides of a cut index card and taped it over the part of the Touch Bar for my sanity
Yeah, unfortunately, it doesn't work consistently for me either. :-\

I don't know whether it got worse over time. I first noticed it when I realized something in the house was flashing and went into the living room to find the entire touch bar rapidly flickering white. Now that you mention, though, it doesn't go all the way to the left edge. There is at least an inch or two that stays black...
 

sctrcdr

macrumors newbie
Sep 29, 2021
1
0
London
My 2018 MacBook Pro has developed the flickering on the touchbar. At first it didn't bother me, but it's gotten so bright that it wakes me up at night sometimes.

My understanding is that although it's a relatively common issue, apple does not repair it out of warranty. I've seen quotes anywhere from $400 to $1200 to fix it. I've also seen that the repair can involve anything from just the touch bar, to the whole top case, to most of the internals. Another thing common in this issue is a battery problem.

Three questions:

Has anyone had any luck just replacing the battery?
Does anyone know exactly what causes this issue?
Has anyone had any luck getting apple to cover this repair?

Thank you kindly and happy new year!

j.
One thing seems to have worked for me. If I enable AirDisplay to my iPad, then the iPad also shows a touchbar, and when the MBP touchbar goes to sleep, it goes black with no flickering.
 

LavenderCaptain

macrumors member
Nov 6, 2009
39
112
I wonder how prevalent this issue is - like, does it eventually happen with all of them? I saw in another thread that it even happens on the M1 machines... Really hope they do a recall or something like they did for the butterfly keyboard...

I added a video to the ever increasing pile of them on YouTube here - so brutal :(
 

Nitrokev2

macrumors newbie
Oct 27, 2016
18
23
I have made a script that partially works and maybe someone can improve on it.
It basically checks if the computer has been idle for 60 seconds and if it has it will kill the touchbar.
This prevents the flicker but it causes the esc button to constantly turn on and off.

You need to add your admin username and password and save the script as an application with stay open selected.
Set the application to launch as a login item.

AppleScript:
global timeBeforeComputerIsNotInUse, computerIsInUse, previousIdleTime

on run
    set timeBeforeComputerIsNotInUse to 60 -- 1 minute
    set computerIsInUse to true
    set previousIdleTime to 0
end run

on idle
    set idleTime to (do shell script "ioreg -c IOHIDSystem | awk '/HIDIdleTime/ {print $NF/1000000000; exit}'") as number
    
    if idleTime is greater than or equal to timeBeforeComputerIsNotInUse then
        set computerIsInUse to false
        do shell script "pkill “Touch Bar Agent”" user name "" password "" with administrator privileges
    end if
    
    set previousIdleTime to idleTime
    return 1
end idle
 
  • Like
Reactions: codelaborer

Nitrokev2

macrumors newbie
Oct 27, 2016
18
23
Improved version with esc staying on

AppleScript:
global timeBeforeComputerIsNotInUse, computerIsInUse, previousIdleTime

on run
    set timeBeforeComputerIsNotInUse to 60 -- 1 minute
    set computerIsInUse to true
    set previousIdleTime to 0
end run

on idle
    set idleTime to (do shell script "ioreg -c IOHIDSystem | awk '/HIDIdleTime/ {print $NF/1000000000; exit}'") as number
    
    if not computerIsInUse then
        if idleTime is less than previousIdleTime then
            set computerIsInUse to true
            do shell script "defaults write com.apple.touchbar.agent PresentationModeGlobal -string appWithControlStrip"
            do shell script "pkill “Touch Bar Agent”" user name "" password "" with administrator privileges
        end if
        
    else if idleTime is greater than or equal to timeBeforeComputerIsNotInUse then
        set computerIsInUse to false
        do shell script "defaults write com.apple.touchbar.agent PresentationModeGlobal -string app"
        
        
        do shell script "pkill “Touch Bar Agent”" user name "" password "" with administrator privileges
        
    end if
    
    set previousIdleTime to idleTime
    return 1
end idle
 
  • Love
Reactions: codelaborer

codelaborer

macrumors newbie
Dec 4, 2021
1
0
Improved version with esc staying on

AppleScript:
global timeBeforeComputerIsNotInUse, computerIsInUse, previousIdleTime

on run
    set timeBeforeComputerIsNotInUse to 60 -- 1 minute
    set computerIsInUse to true
    set previousIdleTime to 0
end run

on idle
    set idleTime to (do shell script "ioreg -c IOHIDSystem | awk '/HIDIdleTime/ {print $NF/1000000000; exit}'") as number
   
    if not computerIsInUse then
        if idleTime is less than previousIdleTime then
            set computerIsInUse to true
            do shell script "defaults write com.apple.touchbar.agent PresentationModeGlobal -string appWithControlStrip"
            do shell script "pkill “Touch Bar Agent”" user name "" password "" with administrator privileges
        end if
       
    else if idleTime is greater than or equal to timeBeforeComputerIsNotInUse then
        set computerIsInUse to false
        do shell script "defaults write com.apple.touchbar.agent PresentationModeGlobal -string app"
       
       
        do shell script "pkill “Touch Bar Agent”" user name "" password "" with administrator privileges
       
    end if
   
    set previousIdleTime to idleTime
    return 1
end idle

I've improved your version a little bit, cause on OSX 10.14.6 there is a problem with converting idle time value (string) to number type.
I've used code from https://macscripter.net/viewtopic.php?id=33850
Maybe it would be helpful for somebody.

AppleScript:
global timeBeforeComputerIsNotInUse, computerIsInUse, previousIdleTime

on run
    set timeBeforeComputerIsNotInUse to 60 -- 1 minute
    set computerIsInUse to true
    set previousIdleTime to 0
end run

on idle
    set idleTimeStr to (do shell script "ioreg -c IOHIDSystem | awk '/HIDIdleTime/ {print $NF/1000000000; exit}'") as string
    set {idleTime, flag} to my stringToNumber(idleTimeStr as text)
    
    if not computerIsInUse then
        if idleTime is less than previousIdleTime then
            set computerIsInUse to true
            do shell script "defaults write com.apple.touchbar.agent PresentationModeGlobal -string appWithControlStrip"
            do shell script "pkill “Touch Bar Agent”" user name "yourUserName" password "yourPassword" with administrator privileges
        end if
        
    else if idleTime is greater than or equal to timeBeforeComputerIsNotInUse then
        set computerIsInUse to false
        do shell script "defaults write com.apple.touchbar.agent PresentationModeGlobal -string app"
        
        
        do shell script "pkill “Touch Bar Agent”" user name "yourUserName" password "yourPassword" with administrator privileges
    end if
    
    set previousIdleTime to idleTime
    return 1
end idle



on stringToNumber(s)
    try
        s as number
    on error
        if 5 > (system attribute "sys2") then
            set |insécable| to ASCII character 202
        else
            set |insécable| to character id 160
        end if
        
        set |autorisés| to characters of "123456789,.+-'E" & space & |insécable|
        set chars to characters of s
        set est_un_nombre to true
        repeat with c in chars
            if c is not in |autorisés| then
                set est_un_nombre to false
                exit repeat
            end if
        end repeat
        if not est_un_nombre then return {s, false}
        set |déci_local| to character 2 of (0.5 as text)
        if |déci_local| is "," then
            set |déci_étranger| to "."
        else
            set |déci_étranger| to ","
        end if
        (*
remove possible thousands separators
*)
        if (s contains |déci_local|) and (s contains |déci_étranger|) then
            if (offset of |déci_étranger| in s) > (offset of |déci_local| in s) then
                set s to my remplace(s, |déci_local|, "")
            else
                set s to my remplace(s, |déci_étranger|, "")
            end if
        end if
        (*
Replace wrong separator by the local one
*)
        if s contains space then set s to my supprime(s, space)
        if s contains "'" then set s to my supprime(s, "'")
        if s contains |insécable| then set s to my supprime(s, |insécable|)
        if s contains |déci_étranger| then set s to my remplace(s, |déci_étranger|, |déci_local|)
        if s starts with "+" then set s to text 2 thru -1 of s
    end try
    return {s, true}
end stringToNumber

--=====
(*
replaces every occurences of d1 by d2 in the text t
*)
on remplace(t, d1, d2)
    local oTIDs, l
    set oTIDs to AppleScript's text item delimiters
    set AppleScript's text item delimiters to d1
    set l to text items of t
    set AppleScript's text item delimiters to d2
    set t to l as text
    set AppleScript's text item delimiters to oTIDs
    return t
end remplace
 

bryantp

macrumors newbie
Dec 20, 2021
1
0
I've improved your version a little bit, cause on OSX 10.14.6 there is a problem with converting idle time value (string) to number type.
I've used code from https://macscripter.net/viewtopic.php?id=33850
Maybe it would be helpful for somebody.

AppleScript:
global timeBeforeComputerIsNotInUse, computerIsInUse, previousIdleTime

on run
    set timeBeforeComputerIsNotInUse to 60 -- 1 minute
    set computerIsInUse to true
    set previousIdleTime to 0
end run

on idle
    set idleTimeStr to (do shell script "ioreg -c IOHIDSystem | awk '/HIDIdleTime/ {print $NF/1000000000; exit}'") as string
    set {idleTime, flag} to my stringToNumber(idleTimeStr as text)
   
    if not computerIsInUse then
        if idleTime is less than previousIdleTime then
            set computerIsInUse to true
            do shell script "defaults write com.apple.touchbar.agent PresentationModeGlobal -string appWithControlStrip"
            do shell script "pkill “Touch Bar Agent”" user name "yourUserName" password "yourPassword" with administrator privileges
        end if
       
    else if idleTime is greater than or equal to timeBeforeComputerIsNotInUse then
        set computerIsInUse to false
        do shell script "defaults write com.apple.touchbar.agent PresentationModeGlobal -string app"
       
       
        do shell script "pkill “Touch Bar Agent”" user name "yourUserName" password "yourPassword" with administrator privileges
    end if
   
    set previousIdleTime to idleTime
    return 1
end idle



on stringToNumber(s)
    try
        s as number
    on error
        if 5 > (system attribute "sys2") then
            set |insécable| to ASCII character 202
        else
            set |insécable| to character id 160
        end if
       
        set |autorisés| to characters of "123456789,.+-'E" & space & |insécable|
        set chars to characters of s
        set est_un_nombre to true
        repeat with c in chars
            if c is not in |autorisés| then
                set est_un_nombre to false
                exit repeat
            end if
        end repeat
        if not est_un_nombre then return {s, false}
        set |déci_local| to character 2 of (0.5 as text)
        if |déci_local| is "," then
            set |déci_étranger| to "."
        else
            set |déci_étranger| to ","
        end if
        (*
remove possible thousands separators
*)
        if (s contains |déci_local|) and (s contains |déci_étranger|) then
            if (offset of |déci_étranger| in s) > (offset of |déci_local| in s) then
                set s to my remplace(s, |déci_local|, "")
            else
                set s to my remplace(s, |déci_étranger|, "")
            end if
        end if
        (*
Replace wrong separator by the local one
*)
        if s contains space then set s to my supprime(s, space)
        if s contains "'" then set s to my supprime(s, "'")
        if s contains |insécable| then set s to my supprime(s, |insécable|)
        if s contains |déci_étranger| then set s to my remplace(s, |déci_étranger|, |déci_local|)
        if s starts with "+" then set s to text 2 thru -1 of s
    end try
    return {s, true}
end stringToNumber

--=====
(*
replaces every occurences of d1 by d2 in the text t
*)
on remplace(t, d1, d2)
    local oTIDs, l
    set oTIDs to AppleScript's text item delimiters
    set AppleScript's text item delimiters to d1
    set l to text items of t
    set AppleScript's text item delimiters to d2
    set t to l as text
    set AppleScript's text item delimiters to oTIDs
    return t
end remplace
My MBP I bought in 2019 recently started the touchbar flashing issue described above. Started out just on the right side and progressed today to include the whole bar. I've been using electrical tape to cover the bar, and was assuming I'd have to pay $200+ at the Apple Store for a fix, but your code, so far today, has worked wonders! Thank you, and hoping this workaround continues to function with future updates
 

hmorneau

macrumors regular
Jan 4, 2016
201
133
Well, I took my mac to apple last week. The tech turned the computer on and the Touch Bar immediately started flickering, he told me because the Touch Bar isn't working, the keyboard replacement wouldn't be covered under the extended warranty program.
I would ask for the details on this. Do they really have that exclusion in their extended warranty program? Anyone have a link to the details of this?

To me it doesn't make sense, the touchbar was part of their keyboard s***** design.

I'm glad I avoided all this, went from a 2015 to a 2021.
 

brianhsu319

macrumors newbie
Dec 23, 2021
2
0
I've improved your version a little bit, cause on OSX 10.14.6 there is a problem with converting idle time value (string) to number type.
I've used code from https://macscripter.net/viewtopic.php?id=33850
Maybe it would be helpful for somebody.

AppleScript:
global timeBeforeComputerIsNotInUse, computerIsInUse, previousIdleTime

on run
    set timeBeforeComputerIsNotInUse to 60 -- 1 minute
    set computerIsInUse to true
    set previousIdleTime to 0
end run

on idle
    set idleTimeStr to (do shell script "ioreg -c IOHIDSystem | awk '/HIDIdleTime/ {print $NF/1000000000; exit}'") as string
    set {idleTime, flag} to my stringToNumber(idleTimeStr as text)
   
    if not computerIsInUse then
        if idleTime is less than previousIdleTime then
            set computerIsInUse to true
            do shell script "defaults write com.apple.touchbar.agent PresentationModeGlobal -string appWithControlStrip"
            do shell script "pkill “Touch Bar Agent”" user name "yourUserName" password "yourPassword" with administrator privileges
        end if
       
    else if idleTime is greater than or equal to timeBeforeComputerIsNotInUse then
        set computerIsInUse to false
        do shell script "defaults write com.apple.touchbar.agent PresentationModeGlobal -string app"
       
       
        do shell script "pkill “Touch Bar Agent”" user name "yourUserName" password "yourPassword" with administrator privileges
    end if
   
    set previousIdleTime to idleTime
    return 1
end idle



on stringToNumber(s)
    try
        s as number
    on error
        if 5 > (system attribute "sys2") then
            set |insécable| to ASCII character 202
        else
            set |insécable| to character id 160
        end if
       
        set |autorisés| to characters of "123456789,.+-'E" & space & |insécable|
        set chars to characters of s
        set est_un_nombre to true
        repeat with c in chars
            if c is not in |autorisés| then
                set est_un_nombre to false
                exit repeat
            end if
        end repeat
        if not est_un_nombre then return {s, false}
        set |déci_local| to character 2 of (0.5 as text)
        if |déci_local| is "," then
            set |déci_étranger| to "."
        else
            set |déci_étranger| to ","
        end if
        (*
remove possible thousands separators
*)
        if (s contains |déci_local|) and (s contains |déci_étranger|) then
            if (offset of |déci_étranger| in s) > (offset of |déci_local| in s) then
                set s to my remplace(s, |déci_local|, "")
            else
                set s to my remplace(s, |déci_étranger|, "")
            end if
        end if
        (*
Replace wrong separator by the local one
*)
        if s contains space then set s to my supprime(s, space)
        if s contains "'" then set s to my supprime(s, "'")
        if s contains |insécable| then set s to my supprime(s, |insécable|)
        if s contains |déci_étranger| then set s to my remplace(s, |déci_étranger|, |déci_local|)
        if s starts with "+" then set s to text 2 thru -1 of s
    end try
    return {s, true}
end stringToNumber

--=====
(*
replaces every occurences of d1 by d2 in the text t
*)
on remplace(t, d1, d2)
    local oTIDs, l
    set oTIDs to AppleScript's text item delimiters
    set AppleScript's text item delimiters to d1
    set l to text items of t
    set AppleScript's text item delimiters to d2
    set t to l as text
    set AppleScript's text item delimiters to oTIDs
    return t
end remplace
I have the same problem.
need know how to use AppleScript...
can anyone help me?
 

dizmonk

macrumors 65816
Nov 26, 2010
1,077
676
This is terrible. Did I miss something? Why wasn't this a bigger deal/complaint with Apple? I did have a 15" MBP with the touch bar until I switched to a MBA m1 but I don't remember having this problem. Is it still a problem with the MBP with the Touchbar?
 

brianhsu319

macrumors newbie
Dec 23, 2021
2
0
This is terrible. Did I miss something? Why wasn't this a bigger deal/complaint with Apple? I did have a 15" MBP with the touch bar until I switched to a MBA m1 but I don't remember having this problem. Is it still a problem with the MBP with the Touchbar?
You can search the google "macbook pro touch bar flicker".
be find so many user have a same problem.
how do Complain to apple?
Where to complain?
 

Barbara He

macrumors newbie
Jan 27, 2022
2
0
FYI the MBP 13" M1 2020 does it too. They're eliminating the Touch Bar because it's a pos. I didn't want it in the first place. They're telling me they'll have to send it in and I will be without my computer for 2 weeks! Pissed? Oh yeah. I've barely had this a year. TG I have Apple Care.
 

dmitri2

macrumors newbie
Oct 5, 2018
8
1
I've improved your version a little bit, cause on OSX 10.14.6 there is a problem with converting idle time value (string) to number type.
I've used code from https://macscripter.net/viewtopic.php?id=33850
Maybe it would be helpful for somebody.

AppleScript:
global timeBeforeComputerIsNotInUse, computerIsInUse, previousIdleTime

on run
    set timeBeforeComputerIsNotInUse to 60 -- 1 minute
    set computerIsInUse to true
    set previousIdleTime to 0
end run

on idle
    set idleTimeStr to (do shell script "ioreg -c IOHIDSystem | awk '/HIDIdleTime/ {print $NF/1000000000; exit}'") as string
    set {idleTime, flag} to my stringToNumber(idleTimeStr as text)
   
    if not computerIsInUse then
        if idleTime is less than previousIdleTime then
            set computerIsInUse to true
            do shell script "defaults write com.apple.touchbar.agent PresentationModeGlobal -string appWithControlStrip"
            do shell script "pkill “Touch Bar Agent”" user name "yourUserName" password "yourPassword" with administrator privileges
        end if
       
    else if idleTime is greater than or equal to timeBeforeComputerIsNotInUse then
        set computerIsInUse to false
        do shell script "defaults write com.apple.touchbar.agent PresentationModeGlobal -string app"
       
       
        do shell script "pkill “Touch Bar Agent”" user name "yourUserName" password "yourPassword" with administrator privileges
    end if
   
    set previousIdleTime to idleTime
    return 1
end idle



on stringToNumber(s)
    try
        s as number
    on error
        if 5 > (system attribute "sys2") then
            set |insécable| to ASCII character 202
        else
            set |insécable| to character id 160
        end if
       
        set |autorisés| to characters of "123456789,.+-'E" & space & |insécable|
        set chars to characters of s
        set est_un_nombre to true
        repeat with c in chars
            if c is not in |autorisés| then
                set est_un_nombre to false
                exit repeat
            end if
        end repeat
        if not est_un_nombre then return {s, false}
        set |déci_local| to character 2 of (0.5 as text)
        if |déci_local| is "," then
            set |déci_étranger| to "."
        else
            set |déci_étranger| to ","
        end if
        (*
remove possible thousands separators
*)
        if (s contains |déci_local|) and (s contains |déci_étranger|) then
            if (offset of |déci_étranger| in s) > (offset of |déci_local| in s) then
                set s to my remplace(s, |déci_local|, "")
            else
                set s to my remplace(s, |déci_étranger|, "")
            end if
        end if
        (*
Replace wrong separator by the local one
*)
        if s contains space then set s to my supprime(s, space)
        if s contains "'" then set s to my supprime(s, "'")
        if s contains |insécable| then set s to my supprime(s, |insécable|)
        if s contains |déci_étranger| then set s to my remplace(s, |déci_étranger|, |déci_local|)
        if s starts with "+" then set s to text 2 thru -1 of s
    end try
    return {s, true}
end stringToNumber

--=====
(*
replaces every occurences of d1 by d2 in the text t
*)
on remplace(t, d1, d2)
    local oTIDs, l
    set oTIDs to AppleScript's text item delimiters
    set AppleScript's text item delimiters to d1
    set l to text items of t
    set AppleScript's text item delimiters to d2
    set t to l as text
    set AppleScript's text item delimiters to oTIDs
    return t
end remplace
Hi everyone! Same problem with 15 inch 2018 mac. I tried this script as a possible solution. I run into a problem when a constant message pops up while running the script: The administrator user name or password was incorrect. (-60007). I checked several times to put the correct stuff in two places of the script. Would appreciate any advice!
 

mpemburn

macrumors member
Jan 11, 2008
51
0
Bel Air, MD USA
I have looked everywhere for the solution to this problem, which only began recently on my 2017 MacBook—and was driving me crazy!

Well, I found the solution, and it really works! It requires a little bit of code, which is provided in the article linked below. A few of the steps may be confusing if you're not comfortable with geeky things. One item that needs to be clarified is that you must use the Mac Script Editor (find this icon in the Launcher) to create a file, and name it touchbar_deflicker.applescript or something similar.

1652706714840.png


Here's the link: Mac O’Clock TouchBar script how-to
 

howardc64

macrumors regular
Mar 14, 2011
142
82
20mo old 2020 Intel MBP 13" (A2251) with this problem. Here are some symptom and some hardware investigation
  • Generally, re-opening lid (wake from sleep) cause a quick flash
  • Script workaround didn't seem to work for me. Still had some flickering after server goes to sleep even after adjusting the script's timing delay.
  • Sometimes (rarely) when I open the lid after MBP has been sleeping. The touch bar display become completely black and touch unresponsive. When this happens, the Touch Bar Display device disappears from the T2 bus. Keyboard preferences no longer have the touch bar controls. Even restart/power cycle won't find the device. Need to SMC reset to recover the device and basically working again until next random problem. Have also encountered OS crash after touch bar display device disappeared and closing the lid. Then the device reappears on the reboot. Sounds like touch bar display device is randomly disappearing and reappearing causing OS crashes.
  • Quite often macOS will crash between lid closing and opening later. Console log shows dfrd (Dynamic Function Row Daemon, software talking to touch bar) causes the crash. macos - Mac book pro 2020, after water spill, OS keep restarting with the following error - Ask Different (stackexchange.com)
Given this behavior. I unplugging the touch bar from the logic board. Flickering is obviously gone as is the touch bar display and touch capability. Touch Bar Display device disappeared and OS crashes seems to be gone (will update after a couple of more days of running) A2251 has a physical ESC key. Other models with virtual ESC key touch bars would need to remap to physical key.

Also found one of the 2 touch bar flex cable is twisted and folded 2-3x to turn a 90 degree angle. The touch bar part was designed back in 2016 but more recent logic boards changed the connector location and orientation forcing this folded assembly. Its also near where the bottom lid clamps onto the bottom case so doesn't have much space. These may have weakened that flex cable and degraded the internal electrical lines. See pics for the installed part and how it was installed in my MBP. The folded flex is for touch and the other flex is for display.

Further trials shows the following
  • Disconnect both touch and display flex seems to make MBP run hotter but stable.
  • Connecting the touch flex alone still allowed MBP to work fine and cool as before without any problems/crashes but no touch bar of course (not even touch without display) The Touch Bar Display device doesn't show on the T2 Bus.
  • Connecting the display flex alone will cause touch bar screen flickers but no display image. And no touch of course. Touch Bar Display device does show on the T2 Bus.
Don't install the bottom lid on completely while testing. After testing and final install, space is very tight. I think its necessary to install the L bracket as it secures USB-C (high current) connector. I chose not to cut the existing L bracket where display connector is to make more space in case Apple makes a recall later. Just reinstalled with only 2 of 3 screws on the bracket (over each side of USB-C connector) to avoid clamping too much pressure on the display connector over the isolating electrical tape (actually started out fashioning a bracket but screws are super short and won't catch so don't bother). Here is a video of A2338 (13" M1 MBP, video title mislabeled it as A2337) and touch bar part and installation is identical to A2251. You can see the M1 has a pretty good fold and crimp on the touch flex as well.

2020 M1 MacBook Pro 13" A2337 | Disassembly Tear-down Guide - YouTube

While this doesn't isolate if the failed part is the touch bar or the driver logic on the logic board. It does show the touch bar can be physically disconnected and the best way is disconnect the display flex.
 

Attachments

  • Screen Shot 2022-06-07 at 10.32.36 PM.png
    Screen Shot 2022-06-07 at 10.32.36 PM.png
    406.9 KB · Views: 391
  • Screen Shot 2022-06-07 at 10.33.02 PM.png
    Screen Shot 2022-06-07 at 10.33.02 PM.png
    65.3 KB · Views: 305
  • Screen Shot 2022-06-07 at 10.54.52 PM.png
    Screen Shot 2022-06-07 at 10.54.52 PM.png
    66.8 KB · Views: 394
  • IMG_1657.jpeg
    IMG_1657.jpeg
    319.7 KB · Views: 450
  • Screen Shot 2022-06-09 at 6.56.57 PM.png
    Screen Shot 2022-06-09 at 6.56.57 PM.png
    1.4 MB · Views: 439
Last edited:

firecaller

macrumors newbie
Jul 4, 2022
1
0
If it cost more than $400 to fix, I would just get an M1.

It has been several years since I have seen someone ask about this problem but, (if I remember correctly) back in 2016 - 2017, many people ended up returning the Macs when possible. The others had to send to Apple for repair (still covered at the time).

Happy new year to you as well.
If the battery isn't too bad, you could cover the Touch Bar with black electrical tape and just not use it. Otherwise, I'm likely to agree with Apple_Robert and suggest that you upgrade to a new M1 machine.

Seriously? An already expensive laptop has a defect and your first thought is to give that same company even more money?
 

howardc64

macrumors regular
Mar 14, 2011
142
82
Finally did complete surgery on my A2251 with touch bar flicker today. Replaced with new touch bar and no more flicker. Took me 4+ hours first time.

Before all the surgery, its relatively easy to disconnect the failing touch bar and connect the new one just to make sure it works. Not easy to open/close lid with new touch bar dangling so just find a failing test case by going to sleep/wakeup via keys/mouse rather than lid open/closing. See attached pic.

Basically need to strip the whole MBP down to the bottom without screen or logic board. Then need the following : 99% isopropyl (IPA), really thin and strong plastic card cut into a pointy triangle knife, and rectangular tip xacto knife blade (#17) to get it started. Went super slow, took about 30-40min and removed the old touch bar in one piece without breaking it. Melted double sided tape makes a mess. Lots of clean up. I used my hot air station set at 135C, didn't dare to go hotter to melt things. IPA was the main trick.

Here is a video some tech did online. He is more experienced and know what heat to set to. For novice, probably just use IPA. Don't spray it on like he did, get a needle nose bottle dispenser and drop IPA right on the edges of the touch bar.

Macbook Pro a2141 Touch Bar Replacement / Touchbar Disassemble - YouTube

Here is how to remove the screeen. Unfortunately no online video or tutorial for logic board removal for my A2251

13" Inch 2020 MacBook Pro A2251 Disassembly Display Screen LCD Assembly Replacement Repair - YouTube

Anyway, this is by far the most complex macbook repair I've done. Touch bar macbooks assembly is quite a bit more complex than prior gen.

There is a small microphone hole above the 2 key under the touchbar and a mic on the other side inside the case. Not sure what thats for since its covered by touchbar. Anyway, I tried to keep the hole clear of the melted double sided tape goo with a tweezer but don't jam all the way in there as there is a mic in there.

Order my touch bar from a Apple repair parts supplier that services repair businesses with very high quality parts. So need a business license to buy from them. Here is the part I used. Also got the plastic card and Xacto square blade there.

Touch Bar Assembly Compatible MacBook Pro 13" (A2251 / Mid 2020) (A2289 / Early 2020) (A2338 / Late 2020) (mobilesentrix.com)
Cell Phone Repair Parts | Cell Phone Accessories | Plastic Card (mobilesentrix.com)
Utility Knife Blades (No. 17) (10 Pack) (mobilesentrix.com)

Finally, touch bar is really a sandwich of an OLED display bar (on bottom) and touch bar (on top). Each with their own connector. Flickering is from the OLED display side. In post #44, I found disconnecting the display side is good enough to disable the touchbar (Mine was also causing random crashes when sleeping) The OLED display flex has a short piece with a connector that connects to the logic board. This short piece could be the failure source. If this is the only failure area, it is super easy to replace instead of the whole touch bar (display, logic board don't need to come out, touch bar stays glued to the case) Perhaps someone can try this experiment in the future. Its part A in the last pic
 

Attachments

  • IMG_2107.jpeg
    IMG_2107.jpeg
    255 KB · Views: 394
  • 68133378656__479AE302-D288-4273-A3BD-137C75959C88.jpeg
    68133378656__479AE302-D288-4273-A3BD-137C75959C88.jpeg
    232.1 KB · Views: 385
  • IMG_2141.jpeg
    IMG_2141.jpeg
    381.1 KB · Views: 448
Last edited:

Pedro147

macrumors member
Sep 23, 2016
35
20
Australia
Finally did complete surgery on my A2251 with touch bar flicker today. Replaced with new touch bar and no more flicker. Took me 4+ hours first time. . . . . .
Nice explanation on the TB replacement and also congrats on getting it out without shattering it into thousands of pieces. I have another one to do on an A2159 once the new TB arrives so I'll see if I can refine my technique a bit. I used one from this supplier https://www.ebay.com.au/itm/255479255618 last time too although I did receive a bad one from an Aliexpress seller too about 3 months ago.
Cheers @howardc64
 
Last edited:

howardc64

macrumors regular
Mar 14, 2011
142
82
Nice explanation on the TB replacement and also congrats on getting it out without shattering it into thousands of pieces. I have another one to do on an A2159 once the new TB arrives so I'll see if I can refine my technique a bit. I used one from this supplier https://www.ebay.com.au/itm/255479255618 last time too although I did receive a bad one from an Aliexpress seller too about 3 months ago.
Cheers @howardc64

Have you ever tried just replacing the short piece on the OLED display flex? (part A in my post's pic) This piece contain 1/2 of the electronics for the OLED display bar component.
 

Pedro147

macrumors member
Sep 23, 2016
35
20
Australia
Have you ever tried just replacing the short piece on the OLED display flex? (part A in my post's pic) This piece contain 1/2 of the electronics for the OLED display bar component.
Never had to in regard to the ones that I have replaced, just the touch bar itself. There is information available for the TB connector on the logic board for say A2159 / board 820-01598. It seems to pertain to touch functionality. As for that other flex cable that comes from the TB assembly and plugs into your sub-board labelled A, that may mainly be the LED driver circuitry for TB illumination? Absolutely no technical info available for that sub-board around AFAIK. I firstly replace the TB if voltages etc seem OK at the TB connector on the logic board. If after replacing TB I still nad nothing then I would replace that sub-board and pray :)
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.