X
點擊此處開啟此網站的行動版。

技術支援討論區

how to recover unresponsive Pravaite Tabs on Linux

已張貼

0

I opened up around 50 tabs in a single firefox Private Window on Linux and all was good and fast, I then opened another URL in a new tab, which asked me to Stop or Wait for unresponsive script running, where I chose to Stop. Then it started behaving abnormally; I was only able to do the following:

1 scroll on the tab using either middle mouse button or [Up] [Down] key on keyboard jfie 2 right click the tab content to open up right-click menu, 3 hover over the icons and change their background color like Homepage, Refresh, Page Actions, Show sidebars, as well as display their lables;

but I was not able to $ trigger the proper response from above buttons, or $ switch to another tab $ close or create any tab

I noticed in journalctl logs around the time frame this happend, which showed the following:

<date> <hour>:<minute>:30 <hostname> dbus-daemon[744]: [session uid=1000 pid=744] Activating service name='org.gnome.gedit' requested by ':1.7' (uid=1000 pid=1249 comm="firefox ")
<date> <hour>:<minute>:33 <hostname> dbus-daemon[744]: [session uid=1000 pid=744] Successfully activated service 'org.gnome.gedit'
<date> <hour>:<minute>:33 <hostname> org.gnome.gedit[744]: Unable to init server: Could not connect: Connection refused
<date> <hour>:<minute>:33 <hostname> gedit[30517]: cannot open display: 
<date> <hour>:<minute>:34 <hostname> dbus-daemon[744]: [session uid=1000 pid=744] Activating service name='org.gnome.gedit' requested by ':1.7' (uid=1000 pid=1249 comm="firefox ")
<date> <hour>:<minute>:34 <hostname> dbus-daemon[744]: [session uid=1000 pid=744] Successfully activated service 'org.gnome.gedit'
<date> <hour>:<minute>:34 <hostname> org.gnome.gedit[744]: Unable to init server: Could not connect: Connection refused
<date> <hour>:<minute>:34 <hostname> unknown[30517]: cannot open display: 
<date> <hour>:<minute>:39 <hostname> dbus-daemon[744]: [session uid=1000 pid=744] Activating service name='org.gnome.gedit' requested by ':1.7' (uid=1000 pid=1249 comm="firefox ")
 <date> <hour>:<minute>:39 <hostname> dbus-daemon[744]: [session uid=1000 pid=744] Successfully activated service 'org.gnome.gedit'
<date> <hour>:<minute>:39 <hostname> org.gnome.gedit[744]: Unable to init server: Could not connect: Connection refused
<date> <hour>:<minute>:39 <hostname> gedit[30517]: cannot open display

NOTE that I did not open any gedit intentionally during that time window. So far, I have not closed the unresponsive window, in hope that I would be able to restore those tabs. But I am not sure where to start. The $HOME/.mozilla/firefox director is about 100MB.

Could anyone help? I am willing to provide any more information and I am willing to invest my time on this.

0 I opened up around 50 tabs in a single firefox Private Window on Linux and all was good and fast, I then opened another URL in a new tab, which asked me to Stop or Wait for unresponsive script running, where I chose to Stop. Then it started behaving abnormally; I was only able to do the following: 1 scroll on the tab using either middle mouse button or [Up] [Down] key on keyboard jfie 2 right click the tab content to open up right-click menu, 3 hover over the icons and change their background color like Homepage, Refresh, Page Actions, Show sidebars, as well as display their lables; but I was not able to $ trigger the proper response from above buttons, or $ switch to another tab $ close or create any tab I noticed in journalctl logs around the time frame this happend, which showed the following: <date> <hour>:<minute>:30 <hostname> dbus-daemon[744]: [session uid=1000 pid=744] Activating service name='org.gnome.gedit' requested by ':1.7' (uid=1000 pid=1249 comm="firefox ") <date> <hour>:<minute>:33 <hostname> dbus-daemon[744]: [session uid=1000 pid=744] Successfully activated service 'org.gnome.gedit' <date> <hour>:<minute>:33 <hostname> org.gnome.gedit[744]: Unable to init server: Could not connect: Connection refused <date> <hour>:<minute>:33 <hostname> gedit[30517]: cannot open display: <date> <hour>:<minute>:34 <hostname> dbus-daemon[744]: [session uid=1000 pid=744] Activating service name='org.gnome.gedit' requested by ':1.7' (uid=1000 pid=1249 comm="firefox ") <date> <hour>:<minute>:34 <hostname> dbus-daemon[744]: [session uid=1000 pid=744] Successfully activated service 'org.gnome.gedit' <date> <hour>:<minute>:34 <hostname> org.gnome.gedit[744]: Unable to init server: Could not connect: Connection refused <date> <hour>:<minute>:34 <hostname> unknown[30517]: cannot open display: <date> <hour>:<minute>:39 <hostname> dbus-daemon[744]: [session uid=1000 pid=744] Activating service name='org.gnome.gedit' requested by ':1.7' (uid=1000 pid=1249 comm="firefox ") <date> <hour>:<minute>:39 <hostname> dbus-daemon[744]: [session uid=1000 pid=744] Successfully activated service 'org.gnome.gedit' <date> <hour>:<minute>:39 <hostname> org.gnome.gedit[744]: Unable to init server: Could not connect: Connection refused <date> <hour>:<minute>:39 <hostname> gedit[30517]: cannot open display NOTE that I did not open any gedit intentionally during that time window. So far, I have not closed the unresponsive window, in hope that I would be able to restore those tabs. But I am not sure where to start. The $HOME/.mozilla/firefox director is about 100MB. Could anyone help? I am willing to provide any more information and I am willing to invest my time on this.

由 willaa88 於 修改

引用

額外的系統細節

已安裝的外掛程式

ublock origin

應用程式

  • User Agent: Mozilla/5.0 (X11; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0

更多資訊

cor-el
  • Top 10 Contributor
  • Moderator
17469 個解決方法 157871 個答案

You can try to create a session log to see whether that includes this window.

You can run this code in the Browser Console. You need to enable the command line in the console.

A log created via the Browser Console includes Private Browsing mode tabs/windows unlike sessionstore.jsonlz4 that only stored regular windows.

/* Get Session data */
ssj = SessionStore.getBrowserState();
ssj = prompt("JSON Session Data", ssj);
You can try to create a session log to see whether that includes this window. You can run this code in the Browser Console. You need to enable the command line in the console. *https://developer.mozilla.org/en-US/Tools/Browser_Console A log created via the Browser Console includes Private Browsing mode tabs/windows unlike sessionstore.jsonlz4 that only stored regular windows. <pre><nowiki>/* Get Session data */ ssj = SessionStore.getBrowserState(); ssj = prompt("JSON Session Data", ssj);</nowiki></pre>

由 cor-el 於 修改

這篇文章有幫助嗎?
引用

提出問題者

Thanks a lot for your help. I did what you suggested. and Somehow there was a popup windown appearted with all the JSON data, and I manually copy paste them to a local JSON file, about 1.5MB. Does it make sense for about 50 tabs?

Also here is the file list with timestamp and sizes: (NOTE that I performed the manually saving around 11:08 am on Sep 10)

$ ls -lhrt ~/.mozilla/firefox/xawzxnjt.default/ | tail -4 drwx------ 2 user user 4.0K Sep 9 19:27 bookmarkbackups/ -rw------- 1 user user 21K Sep 10 11:05 prefs.js -rw------- 1 user user 2.2K Sep 10 11:09 xulstore.json drwx------ 3 user user 4.0K Sep 10 11:10 datareporting/


$ du -sh ~/.mozilla/firefox/xawzxnjt.default/datareporting/* 16K /home/user//.mozilla/firefox/xawzxnjt.default/datareporting/aborted-session-ping 1.2M /home/user//.mozilla/firefox/xawzxnjt.default/datareporting/archived 4.0K /home/user//.mozilla/firefox/xawzxnjt.default/datareporting/session-state.json 4.0K /home/user//.mozilla/firefox/xawzxnjt.default/datareporting/state.json

$ ls <FILE> 1.5M Sep 10 11:08 sessionDataSavedManuallyByCopyNPaste.json

So could you guide me throught what I should do next?

Thanks a lot for your help. I did what you suggested. and Somehow there was a popup windown appearted with all the JSON data, and I manually copy paste them to a local JSON file, about 1.5MB. Does it make sense for about 50 tabs? Also here is the file list with timestamp and sizes: (NOTE that I performed the manually saving around 11:08 am on Sep 10) $ ls -lhrt ~/.mozilla/firefox/xawzxnjt.default/ | tail -4 drwx------ 2 user user 4.0K Sep 9 19:27 bookmarkbackups/ -rw------- 1 user user 21K Sep 10 11:05 prefs.js -rw------- 1 user user 2.2K Sep 10 11:09 xulstore.json drwx------ 3 user user 4.0K Sep 10 11:10 datareporting/ $ du -sh ~/.mozilla/firefox/xawzxnjt.default/datareporting/* 16K /home/user//.mozilla/firefox/xawzxnjt.default/datareporting/aborted-session-ping 1.2M /home/user//.mozilla/firefox/xawzxnjt.default/datareporting/archived 4.0K /home/user//.mozilla/firefox/xawzxnjt.default/datareporting/session-state.json 4.0K /home/user//.mozilla/firefox/xawzxnjt.default/datareporting/state.json $ ls <FILE> 1.5M Sep 10 11:08 sessionDataSavedManuallyByCopyNPaste.json So could you guide me throught what I should do next?

由 willaa88 於 修改

這篇文章有幫助嗎?
引用
jscher2000
  • Top 10 Contributor
8690 個解決方法 71031 個答案

Hi willaa88, I'm sure cor-el will be back but I wonder whether you can check something for me.

In Firefox or another browser, you could check the contents of your saved file using my Scrounger tool:

https://www.jeffersonscher.com/ffu/scrounger.html

Does that list out the tabs you wanted to save? I've never tested whether private windows/tabs are listed differently so I don't know whether it will show those.

Hi willaa88, I'm sure cor-el will be back but I wonder whether you can check something for me. In Firefox or another browser, you could check the contents of your saved file using my Scrounger tool: https://www.jeffersonscher.com/ffu/scrounger.html Does that list out the tabs you wanted to save? I've never tested whether private windows/tabs are listed differently so I don't know whether it will show those.
這篇文章有幫助嗎?
引用
cor-el
  • Top 10 Contributor
  • Moderator
17469 個解決方法 157871 個答案

Private tabs have an "isPrivate" key for tabs in the windows[X].tabs[Y] list.

You can use this code in the Browser Console to parse and decode the session data and possibly paste the result in the body tag using the Inspector.

/* Get Session data */
ssj = SessionStore.getBrowserState();
ssj = prompt("JSON Session Data", ssj);

if (ssj){
sj=JSON.parse(ssj);
sd='<style>body,hr{counter-reset:links}\na:before{content:"[" counter(links) "]" attr(tab) " ";counter-increment:links;color:#000;font-weight:bold}\n</style>\n';
sd+="[windowSelected:"+(sj.selectedWindow)+"]<hr>\n";
for(k in sj){
switch(k){
case"windows":
for(j=0;win=sj[k][j];j++){
 tabs=win.tabs;
 sd+="[window:"+(j+1)+"][tabs:"+(tabs.length)+"][tabSelected:"+(win.selected)+"]<br>\n";
 for(i=0;tab=tabs[i];i++){
  ent=tab.entries;
  pin=tab.pinned;
  pbt=tab.isPrivate;
  if(last=ent[ent.length-1]){
   url=last.url.replace(/#/g,"%23").replace(/&/g,"&amp;");
   title=last.title?last.title.replace(/</g,"&lt;").replace(/>/g,"&gt;"):url;
  }else{url="about:blank"; title=url}
  sd+="<a tab=\"["+(pin?"A":"-")+(pbt?"P":"-")+"]\" href="+url+">"+title+"</a></span><br>\n";
 } /*tabs*/
 sd+="<hr>\n";
 tabs=win._closedTabs;
 sd+="[window:"+(j+1)+"][closedtabs:"+(tabs.length)+"]<br>\n"
 for (i=0;tab=tabs[i];i++){
  ent=tab.state.entries;
  if(last=ent[ent.length-1]){
   url=last.url.replace(/#/g,"%23").replace(/&/g,"&amp;");
   title=last.title?last.title.replace(/</g,"&lt;").replace(/>/g,"&gt;"):url;
  }else{url="about:blank"; title=url}
  sd+="<a href="+(url)+">"+(title)+"</a><br>\n";
 } /*_closedtabs*/
 sd+="<hr>\n";
 } break;
case"scratchpads":
case"_closedWindows":
case"cookies":sd+=k+": ("+sj[k].length+")<br>\n"; break;
case"browserConsole":
case"browserToolbox":sd+=k+": "+sj[k]+"<br>\n"; break;
} /*switch*/
} /*for|k*/
prompt("Decoded session data",sd);
}
Private tabs have an "isPrivate" key for tabs in the windows[X].tabs[Y] list. You can use this code in the Browser Console to parse and decode the session data and possibly paste the result in the body tag using the Inspector. <pre><nowiki>/* Get Session data */ ssj = SessionStore.getBrowserState(); ssj = prompt("JSON Session Data", ssj); if (ssj){ sj=JSON.parse(ssj); sd='<style>body,hr{counter-reset:links}\na:before{content:"[" counter(links) "]" attr(tab) " ";counter-increment:links;color:#000;font-weight:bold}\n</style>\n'; sd+="[windowSelected:"+(sj.selectedWindow)+"]<hr>\n"; for(k in sj){ switch(k){ case"windows": for(j=0;win=sj[k][j];j++){ tabs=win.tabs; sd+="[window:"+(j+1)+"][tabs:"+(tabs.length)+"][tabSelected:"+(win.selected)+"]<br>\n"; for(i=0;tab=tabs[i];i++){ ent=tab.entries; pin=tab.pinned; pbt=tab.isPrivate; if(last=ent[ent.length-1]){ url=last.url.replace(/#/g,"%23").replace(/&/g,"&amp;"); title=last.title?last.title.replace(/</g,"&lt;").replace(/>/g,"&gt;"):url; }else{url="about:blank"; title=url} sd+="<a tab=\"["+(pin?"A":"-")+(pbt?"P":"-")+"]\" href="+url+">"+title+"</a></span><br>\n"; } /*tabs*/ sd+="<hr>\n"; tabs=win._closedTabs; sd+="[window:"+(j+1)+"][closedtabs:"+(tabs.length)+"]<br>\n" for (i=0;tab=tabs[i];i++){ ent=tab.state.entries; if(last=ent[ent.length-1]){ url=last.url.replace(/#/g,"%23").replace(/&/g,"&amp;"); title=last.title?last.title.replace(/</g,"&lt;").replace(/>/g,"&gt;"):url; }else{url="about:blank"; title=url} sd+="<a href="+(url)+">"+(title)+"</a><br>\n"; } /*_closedtabs*/ sd+="<hr>\n"; } break; case"scratchpads": case"_closedWindows": case"cookies":sd+=k+": ("+sj[k].length+")<br>\n"; break; case"browserConsole": case"browserToolbox":sd+=k+": "+sj[k]+"<br>\n"; break; } /*switch*/ } /*for|k*/ prompt("Decoded session data",sd); }</nowiki></pre>
這篇文章有幫助嗎?
引用
jscher2000
  • Top 10 Contributor
8690 個解決方法 71031 個答案

Hi cor-el, since the file was already saved and could be opened in a Firefox tab, could you adapt the script to run in the web console using the JSON text that the JSON viewer shows in the "Raw Data" view?

Maybe starting with something along the lines of

var ssj = JSON.parse(document.querySelector('#rawdata-panel pre.data').textContent);

Hi cor-el, since the file was already saved and could be opened in a Firefox tab, could you adapt the script to run in the web console using the JSON text that the JSON viewer shows in the "Raw Data" view? Maybe starting with something along the lines of <code>var ssj = JSON.parse(document.querySelector('#rawdata-panel pre.data').textContent);</code>
這篇文章有幫助嗎?
引用

提出問題者

cor-el said

Private tabs have an "isPrivate" key for tabs in the windows[X].tabs[Y] list. You can use this code in the Browser Console to parse and decode the session data and possibly paste the result in the body tag using the Inspector.
/* Get Session data */
ssj = SessionStore.getBrowserState();
ssj = prompt("JSON Session Data", ssj);

if (ssj){
sj=JSON.parse(ssj);
sd='<style>body,hr{counter-reset:links}\na:before{content:"[" counter(links) "]" attr(tab) " ";counter-increment:links;color:#000;font-weight:bold}\n</style>\n';
sd+="[windowSelected:"+(sj.selectedWindow)+"]<hr>\n";
for(k in sj){
switch(k){
case"windows":
for(j=0;win=sj[k][j];j++){
 tabs=win.tabs;
 sd+="[window:"+(j+1)+"][tabs:"+(tabs.length)+"][tabSelected:"+(win.selected)+"]<br>\n";
 for(i=0;tab=tabs[i];i++){
  ent=tab.entries;
  pin=tab.pinned;
  pbt=tab.isPrivate;
  if(last=ent[ent.length-1]){
   url=last.url.replace(/#/g,"%23").replace(/&/g,"&amp;");
   title=last.title?last.title.replace(/</g,"&lt;").replace(/>/g,"&gt;"):url;
  }else{url="about:blank"; title=url}
  sd+="<a tab=\"["+(pin?"A":"-")+(pbt?"P":"-")+"]\" href="+url+">"+title+"</a></span><br>\n";
 } /*tabs*/
 sd+="<hr>\n";
 tabs=win._closedTabs;
 sd+="[window:"+(j+1)+"][closedtabs:"+(tabs.length)+"]<br>\n"
 for (i=0;tab=tabs[i];i++){
  ent=tab.state.entries;
  if(last=ent[ent.length-1]){
   url=last.url.replace(/#/g,"%23").replace(/&/g,"&amp;");
   title=last.title?last.title.replace(/</g,"&lt;").replace(/>/g,"&gt;"):url;
  }else{url="about:blank"; title=url}
  sd+="<a href="+(url)+">"+(title)+"</a><br>\n";
 } /*_closedtabs*/
 sd+="<hr>\n";
 } break;
case"scratchpads":
case"_closedWindows":
case"cookies":sd+=k+": ("+sj[k].length+")<br>\n"; break;
case"browserConsole":
case"browserToolbox":sd+=k+": "+sj[k]+"<br>\n"; break;
} /*switch*/
} /*for|k*/
prompt("Decoded session data",sd);
}


This is amazing, saved me some time to parse the file, it now can be loaded as a HTML page, just amazing! Thanks!

Basically, this solved my problem (i.e., I will be able to open the links again), however, I am just curious, why firefox tried to open gedit?, (ref to my original post, syslog) and how to trouble-shooting the running-script Stop/Wait question pop-up ? How can I actually make existing tabs "alive" again (since it's still in memory)? Is it even possible? What needs to be done?

Thanks!

''cor-el [[#answer-1250881|said]]'' <blockquote> Private tabs have an "isPrivate" key for tabs in the windows[X].tabs[Y] list. You can use this code in the Browser Console to parse and decode the session data and possibly paste the result in the body tag using the Inspector. <pre><nowiki>/* Get Session data */ ssj = SessionStore.getBrowserState(); ssj = prompt("JSON Session Data", ssj); if (ssj){ sj=JSON.parse(ssj); sd='<style>body,hr{counter-reset:links}\na:before{content:"[" counter(links) "]" attr(tab) " ";counter-increment:links;color:#000;font-weight:bold}\n</style>\n'; sd+="[windowSelected:"+(sj.selectedWindow)+"]<hr>\n"; for(k in sj){ switch(k){ case"windows": for(j=0;win=sj[k][j];j++){ tabs=win.tabs; sd+="[window:"+(j+1)+"][tabs:"+(tabs.length)+"][tabSelected:"+(win.selected)+"]<br>\n"; for(i=0;tab=tabs[i];i++){ ent=tab.entries; pin=tab.pinned; pbt=tab.isPrivate; if(last=ent[ent.length-1]){ url=last.url.replace(/#/g,"%23").replace(/&/g,"&amp;"); title=last.title?last.title.replace(/</g,"&lt;").replace(/>/g,"&gt;"):url; }else{url="about:blank"; title=url} sd+="<a tab=\"["+(pin?"A":"-")+(pbt?"P":"-")+"]\" href="+url+">"+title+"</a></span><br>\n"; } /*tabs*/ sd+="<hr>\n"; tabs=win._closedTabs; sd+="[window:"+(j+1)+"][closedtabs:"+(tabs.length)+"]<br>\n" for (i=0;tab=tabs[i];i++){ ent=tab.state.entries; if(last=ent[ent.length-1]){ url=last.url.replace(/#/g,"%23").replace(/&/g,"&amp;"); title=last.title?last.title.replace(/</g,"&lt;").replace(/>/g,"&gt;"):url; }else{url="about:blank"; title=url} sd+="<a href="+(url)+">"+(title)+"</a><br>\n"; } /*_closedtabs*/ sd+="<hr>\n"; } break; case"scratchpads": case"_closedWindows": case"cookies":sd+=k+": ("+sj[k].length+")<br>\n"; break; case"browserConsole": case"browserToolbox":sd+=k+": "+sj[k]+"<br>\n"; break; } /*switch*/ } /*for|k*/ prompt("Decoded session data",sd); }</nowiki></pre> </blockquote> This is amazing, saved me some time to parse the file, it now can be loaded as a HTML page, just amazing! Thanks! Basically, this solved my problem (i.e., I will be able to open the links again), however, I am just curious, why firefox tried to open gedit?, (ref to my original post, syslog) and how to trouble-shooting the running-script Stop/Wait question pop-up ? How can I actually make existing tabs "alive" again (since it's still in memory)? Is it even possible? What needs to be done? Thanks!
這篇文章有幫助嗎?
引用

提出問題者

Can Browser Console provide timestamp for events?

I am able to see the errors associated with the culprit site (which resulted in the Unresponsive Site Stop/Wait question pop-up) in the Browser Console, but I cannot determine the timeline, I may want to reproduce the error, maybe it is just beause of low CPU/mem ? or maybe it is a bug from the website, or from FF? Thanks.

Can Browser Console provide timestamp for events? I am able to see the errors associated with the culprit site (which resulted in the Unresponsive Site Stop/Wait question pop-up) in the Browser Console, but I cannot determine the timeline, I may want to reproduce the error, maybe it is just beause of low CPU/mem ? or maybe it is a bug from the website, or from FF? Thanks.
這篇文章有幫助嗎?
引用
cor-el
  • Top 10 Contributor
  • Moderator
17469 個解決方法 157871 個答案

有幫助的回覆

If you enable timestamps in the developer toolbar settings for the Web Console then you will also see them in the Browser Console (this should be reflected instantly if the browser console is open).

If you enable timestamps in the developer toolbar settings for the Web Console then you will also see them in the Browser Console (this should be reflected instantly if the browser console is open). *https://developer.mozilla.org/en-US/Tools/Settings
這篇文章有幫助嗎? 1
引用

提出問題者

Thank you for the information.

Is there a way to "revive" the "dead"/unresponsive tabs? In particular , for the Private Tabs.

Such as whether or not I could do something to kill a related process ( I am aware of that there are only a few PIDs related such as PIDs for firefox, web-extension, and web-content. But I may not want to kill them) or change something on the fly in the browser engine or whatever layer in firefox? I am very interested in this and I am also very interested in the development of firefox browser, but I am at the very very early stage of getting to know the fundamentals. Need some tips to get started on the right track.

Thank you for the information. Is there a way to "revive" the "dead"/unresponsive tabs? In particular , for the Private Tabs. Such as whether or not I could do something to kill a related process ( I am aware of that there are only a few PIDs related such as PIDs for firefox, web-extension, and web-content. But I may not want to kill them) or change something on the fly in the browser engine or whatever layer in firefox? I am very interested in this and I am also very interested in the development of firefox browser, but I am at the very very early stage of getting to know the fundamentals. Need some tips to get started on the right track.

由 willaa88 於 修改

這篇文章有幫助嗎?
引用
問個問題

如果您還沒有帳號,您必須先 登入您的帳號 來回覆文章。請 開始一個新問題