');mask-image:url('data:image/svg+xml;charset=utf-8, ');width:16px}.BlogPost-module--post-body--hinQo details,.BlogPost-module--post-body--hinQo figcaption,.BlogPost-module--post-body--hinQo figure{display:block}.BlogPost-module--post-body--hinQo summary{display:list-item}.BlogPost-module--post-body--hinQo [hidden]{display:none!important}.BlogPost-module--post-body--hinQo a{background-color:transparent;color:var(--color-accent-fg);text-decoration:none}.BlogPost-module--post-body--hinQo a:active,.BlogPost-module--post-body--hinQo a:hover{outline-width:0}.BlogPost-module--post-body--hinQo abbr[title]{border-bottom:none;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.BlogPost-module--post-body--hinQo b,.BlogPost-module--post-body--hinQo strong{font-weight:600}.BlogPost-module--post-body--hinQo dfn{font-style:italic}.BlogPost-module--post-body--hinQo h1{border-bottom:1px solid var(--color-border-muted);font-size:2em;font-weight:600;margin:.67em 0;padding-bottom:.3em}.BlogPost-module--post-body--hinQo mark{background-color:var(--color-attention-subtle);color:var(--color-text-primary)}.BlogPost-module--post-body--hinQo small{font-size:90%}.BlogPost-module--post-body--hinQo sub,.BlogPost-module--post-body--hinQo sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.BlogPost-module--post-body--hinQo sub{bottom:-.25em}.BlogPost-module--post-body--hinQo sup{top:-.5em}.BlogPost-module--post-body--hinQo img{background-color:var(--color-canvas-default);border-style:none;box-sizing:content-box;max-width:100%}.BlogPost-module--post-body--hinQo figure{margin:1em 40px}.BlogPost-module--post-body--hinQo hr{background:transparent;background-color:var(--color-border-default);border:0;box-sizing:content-box;height:.25em;margin:24px 0;overflow:hidden;padding:0}.BlogPost-module--post-body--hinQo input{font:inherit;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible}.BlogPost-module--post-body--hinQo [type=button],.BlogPost-module--post-body--hinQo [type=reset],.BlogPost-module--post-body--hinQo [type=submit]{-webkit-appearance:button}.BlogPost-module--post-body--hinQo [type=button]::-moz-focus-inner,.BlogPost-module--post-body--hinQo [type=reset]::-moz-focus-inner,.BlogPost-module--post-body--hinQo [type=submit]::-moz-focus-inner{border-style:none;padding:0}.BlogPost-module--post-body--hinQo [type=button]:-moz-focusring,.BlogPost-module--post-body--hinQo [type=reset]:-moz-focusring,.BlogPost-module--post-body--hinQo [type=submit]:-moz-focusring{outline:1px dotted ButtonText}.BlogPost-module--post-body--hinQo [type=checkbox],.BlogPost-module--post-body--hinQo [type=radio]{box-sizing:border-box;padding:0}.BlogPost-module--post-body--hinQo [type=number]::-webkit-inner-spin-button,.BlogPost-module--post-body--hinQo [type=number]::-webkit-outer-spin-button{height:auto}.BlogPost-module--post-body--hinQo [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.BlogPost-module--post-body--hinQo [type=search]::-webkit-search-cancel-button,.BlogPost-module--post-body--hinQo [type=search]::-webkit-search-decoration{-webkit-appearance:none}.BlogPost-module--post-body--hinQo ::-webkit-input-placeholder{color:inherit;opacity:.54}.BlogPost-module--post-body--hinQo ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.BlogPost-module--post-body--hinQo a:hover{text-decoration:underline}.BlogPost-module--post-body--hinQo hr:before{content:"";display:table}.BlogPost-module--post-body--hinQo hr:after{clear:both;content:"";display:table}.BlogPost-module--post-body--hinQo table{border-collapse:collapse;border-spacing:0;display:block;max-width:100%;overflow:auto;width:-webkit-max-content;width:max-content}.BlogPost-module--post-body--hinQo td,.BlogPost-module--post-body--hinQo th{padding:0}.BlogPost-module--post-body--hinQo details summary{cursor:pointer}.BlogPost-module--post-body--hinQo details:not([open])>:not(summary){display:none!important}.BlogPost-module--post-body--hinQo kbd{background-color:var(--color-canvas-subtle);border-bottom-color:var(--color-neutral-muted);border:1px solid var(--color-neutral-muted);border-radius:6px;box-shadow:inset 0 -1px 0 var(--color-neutral-muted);color:var(--color-fg-default);display:inline-block;font:11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;line-height:10px;padding:3px 5px;vertical-align:middle}.BlogPost-module--post-body--hinQo h1,.BlogPost-module--post-body--hinQo h2,.BlogPost-module--post-body--hinQo h3,.BlogPost-module--post-body--hinQo h4,.BlogPost-module--post-body--hinQo h5,.BlogPost-module--post-body--hinQo h6{font-weight:600;line-height:1.25;margin-bottom:16px;margin-top:24px}.BlogPost-module--post-body--hinQo h2{border-bottom:1px solid var(--color-border-muted);font-size:1.5em;font-weight:600;padding-bottom:.3em}.BlogPost-module--post-body--hinQo h3{font-size:1.25em;font-weight:600}.BlogPost-module--post-body--hinQo h4{font-size:1em;font-weight:600}.BlogPost-module--post-body--hinQo h5{font-size:.875em;font-weight:600}.BlogPost-module--post-body--hinQo h6{color:var(--color-fg-muted);font-size:.85em;font-weight:600}.BlogPost-module--post-body--hinQo p{margin-bottom:10px;margin-top:0}.BlogPost-module--post-body--hinQo blockquote{border-left:.25em solid var(--color-border-default);color:var(--color-fg-muted);margin:0;padding:0 1em}.BlogPost-module--post-body--hinQo ol,.BlogPost-module--post-body--hinQo ul{margin-bottom:0;margin-top:0;padding-left:2em}.BlogPost-module--post-body--hinQo ol ol,.BlogPost-module--post-body--hinQo ul ol{list-style-type:lower-roman}.BlogPost-module--post-body--hinQo ol ol ol,.BlogPost-module--post-body--hinQo ol ul ol,.BlogPost-module--post-body--hinQo ul ol ol,.BlogPost-module--post-body--hinQo ul ul ol{list-style-type:lower-alpha}.BlogPost-module--post-body--hinQo dd{margin-left:0}.BlogPost-module--post-body--hinQo .BlogPost-module--octicon--xzeoa{fill:currentColor;display:inline-block;overflow:visible!important;vertical-align:text-bottom}.BlogPost-module--post-body--hinQo ::-webkit-input-placeholder{color:var(--color-fg-subtle);opacity:1}.BlogPost-module--post-body--hinQo :-ms-input-placeholder{color:var(--color-fg-subtle);opacity:1}.BlogPost-module--post-body--hinQo ::placeholder{color:var(--color-fg-subtle);opacity:1}.BlogPost-module--post-body--hinQo input::-webkit-inner-spin-button,.BlogPost-module--post-body--hinQo input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-c--DcNCP{color:var(--color-prettylights-syntax-comment)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-c1--o1zzd,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-s--9jI7M .BlogPost-module--pl-v--7otNS{color:var(--color-prettylights-syntax-constant)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-e--PkEp\+,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-en--i\+aYf{color:var(--color-prettylights-syntax-entity)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-s--9jI7M .BlogPost-module--pl-s1--xfnwf,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-smi--Kz6hH{color:var(--color-prettylights-syntax-storage-modifier-import)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-ent--EvW\+u{color:var(--color-prettylights-syntax-entity-tag)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-k--eA6jO{color:var(--color-prettylights-syntax-keyword)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-pds--VCw45,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-s--9jI7M,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-s--9jI7M .BlogPost-module--pl-pse--FpFbV .BlogPost-module--pl-s1--xfnwf,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-sr--I5SNZ,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-sr--I5SNZ .BlogPost-module--pl-cce--k5372,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-sr--I5SNZ .BlogPost-module--pl-sra--\+Y3Fk,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-sr--I5SNZ .BlogPost-module--pl-sre--LThiw{color:var(--color-prettylights-syntax-string)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-smw--WJA\+K,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-v--7otNS{color:var(--color-prettylights-syntax-variable)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-bu--zNVx\+{color:var(--color-prettylights-syntax-brackethighlighter-unmatched)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-ii--E1qpP{background-color:var(--color-prettylights-syntax-invalid-illegal-bg);color:var(--color-prettylights-syntax-invalid-illegal-text)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-c2--qHOhe{background-color:var(--color-prettylights-syntax-carriage-return-bg);color:var(--color-prettylights-syntax-carriage-return-text)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-sr--I5SNZ .BlogPost-module--pl-cce--k5372{color:var(--color-prettylights-syntax-string-regexp);font-weight:700}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-ml--bYQSm{color:var(--color-prettylights-syntax-markup-list)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-mh--8GlCw,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-mh--8GlCw .BlogPost-module--pl-en--i\+aYf,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-ms--0L0wb{color:var(--color-prettylights-syntax-markup-heading);font-weight:700}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-mi--L3pg1{color:var(--color-prettylights-syntax-markup-italic);font-style:italic}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-mb--0LcBJ{color:var(--color-prettylights-syntax-markup-bold);font-weight:700}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-md--CXs3A{background-color:var(--color-prettylights-syntax-markup-deleted-bg);color:var(--color-prettylights-syntax-markup-deleted-text)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-mi1--rq9ZS{background-color:var(--color-prettylights-syntax-markup-inserted-bg);color:var(--color-prettylights-syntax-markup-inserted-text)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-mc--PLTGf{background-color:var(--color-prettylights-syntax-markup-changed-bg);color:var(--color-prettylights-syntax-markup-changed-text)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-mi2--A9uor{background-color:var(--color-prettylights-syntax-markup-ignored-bg);color:var(--color-prettylights-syntax-markup-ignored-text)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-mdr--IqqhO{color:var(--color-prettylights-syntax-meta-diff-range);font-weight:700}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-ba--\+wSQj{color:var(--color-prettylights-syntax-brackethighlighter-angle)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-sg--KJ3rX{color:var(--color-prettylights-syntax-sublimelinter-gutter-mark)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-corl--8vpqC{color:var(--color-prettylights-syntax-constant-other-reference-link);text-decoration:underline}.BlogPost-module--post-body--hinQo [data-catalyst]{display:block}.BlogPost-module--post-body--hinQo g-emoji{font-family:Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:1em;font-style:normal!important;font-weight:400;line-height:1;vertical-align:-.075em}.BlogPost-module--post-body--hinQo g-emoji img{height:1em;width:1em}.BlogPost-module--post-body--hinQo:before{content:"";display:table}.BlogPost-module--post-body--hinQo:after{clear:both;content:"";display:table}.BlogPost-module--post-body--hinQo>:first-child{margin-top:0!important}.BlogPost-module--post-body--hinQo>:last-child{margin-bottom:0!important}.BlogPost-module--post-body--hinQo a:not([href]){color:inherit;text-decoration:none}.BlogPost-module--post-body--hinQo .BlogPost-module--absent--vyyfL{color:var(--color-danger-fg)}.BlogPost-module--post-body--hinQo .BlogPost-module--anchor--9pbC-{float:left;line-height:1;margin-left:-20px;padding-right:4px}.BlogPost-module--post-body--hinQo .BlogPost-module--anchor--9pbC-:focus{outline:none}.BlogPost-module--post-body--hinQo blockquote,.BlogPost-module--post-body--hinQo details,.BlogPost-module--post-body--hinQo dl,.BlogPost-module--post-body--hinQo ol,.BlogPost-module--post-body--hinQo p,.BlogPost-module--post-body--hinQo pre,.BlogPost-module--post-body--hinQo table,.BlogPost-module--post-body--hinQo ul{margin-bottom:16px;margin-top:0}.BlogPost-module--post-body--hinQo blockquote>:first-child{margin-top:0}.BlogPost-module--post-body--hinQo blockquote>:last-child{margin-bottom:0}.BlogPost-module--post-body--hinQo sup>a:before{content:"["}.BlogPost-module--post-body--hinQo sup>a:after{content:"]"}.BlogPost-module--post-body--hinQo h1 .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h2 .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h3 .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h4 .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h5 .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h6 .BlogPost-module--octicon-link--yPaj9{color:var(--color-fg-default);vertical-align:middle;visibility:hidden}.BlogPost-module--post-body--hinQo h1:hover .BlogPost-module--anchor--9pbC-,.BlogPost-module--post-body--hinQo h2:hover .BlogPost-module--anchor--9pbC-,.BlogPost-module--post-body--hinQo h3:hover .BlogPost-module--anchor--9pbC-,.BlogPost-module--post-body--hinQo h4:hover .BlogPost-module--anchor--9pbC-,.BlogPost-module--post-body--hinQo h5:hover .BlogPost-module--anchor--9pbC-,.BlogPost-module--post-body--hinQo h6:hover .BlogPost-module--anchor--9pbC-{text-decoration:none}.BlogPost-module--post-body--hinQo h1:hover .BlogPost-module--anchor--9pbC- .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h2:hover .BlogPost-module--anchor--9pbC- .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h3:hover .BlogPost-module--anchor--9pbC- .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h4:hover .BlogPost-module--anchor--9pbC- .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h5:hover .BlogPost-module--anchor--9pbC- .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h6:hover .BlogPost-module--anchor--9pbC- .BlogPost-module--octicon-link--yPaj9{visibility:visible}.BlogPost-module--post-body--hinQo ol.BlogPost-module--no-list--WW9A1,.BlogPost-module--post-body--hinQo ul.BlogPost-module--no-list--WW9A1{list-style-type:none;padding:0}.BlogPost-module--post-body--hinQo ol[type="1"]{list-style-type:decimal}.BlogPost-module--post-body--hinQo ol[type=a]{list-style-type:lower-alpha}.BlogPost-module--post-body--hinQo ol[type=i]{list-style-type:lower-roman}.BlogPost-module--post-body--hinQo div>ol:not([type]){list-style-type:decimal}.BlogPost-module--post-body--hinQo ol ol,.BlogPost-module--post-body--hinQo ol ul,.BlogPost-module--post-body--hinQo ul ol,.BlogPost-module--post-body--hinQo ul ul{margin-bottom:0;margin-top:0}.BlogPost-module--post-body--hinQo li>p{margin-top:16px}.BlogPost-module--post-body--hinQo li+li{margin-top:.25em}.BlogPost-module--post-body--hinQo dl{padding:0}.BlogPost-module--post-body--hinQo dl dt{font-size:1em;font-style:italic;font-weight:600;margin-top:16px;padding:0}.BlogPost-module--post-body--hinQo dl dd{margin-bottom:16px;padding:0 16px}.BlogPost-module--post-body--hinQo table th{font-weight:600}.BlogPost-module--post-body--hinQo table td,.BlogPost-module--post-body--hinQo table th{border:1px solid var(--color-border-default);padding:6px 13px}.BlogPost-module--post-body--hinQo table tr{background-color:var(--color-canvas-default);border-top:1px solid var(--color-border-muted)}.BlogPost-module--post-body--hinQo table tr:nth-child(2n){background-color:var(--color-canvas-subtle)}.BlogPost-module--post-body--hinQo table img{background-color:transparent}.BlogPost-module--post-body--hinQo img[align=right]{padding-left:20px}.BlogPost-module--post-body--hinQo img[align=left]{padding-right:20px}.BlogPost-module--post-body--hinQo .BlogPost-module--emoji--XzYz0{background-color:transparent;max-width:none;vertical-align:text-top}.BlogPost-module--post-body--hinQo span.BlogPost-module--frame--Idj0Y{display:block;overflow:hidden}.BlogPost-module--post-body--hinQo span.BlogPost-module--frame--Idj0Y>span{border:1px solid var(--color-border-default);display:block;float:left;margin:13px 0 0;overflow:hidden;padding:7px;width:auto}.BlogPost-module--post-body--hinQo span.BlogPost-module--frame--Idj0Y span img{display:block;float:left}.BlogPost-module--post-body--hinQo span.BlogPost-module--frame--Idj0Y span span{clear:both;color:var(--color-fg-default);display:block;padding:5px 0 0}.BlogPost-module--post-body--hinQo span.BlogPost-module--align-center--t405A{clear:both;display:block;overflow:hidden}.BlogPost-module--post-body--hinQo span.BlogPost-module--align-center--t405A>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.BlogPost-module--post-body--hinQo span.BlogPost-module--align-center--t405A span img{margin:0 auto;text-align:center}.BlogPost-module--post-body--hinQo span.BlogPost-module--align-right--73QHm{clear:both;display:block;overflow:hidden}.BlogPost-module--post-body--hinQo span.BlogPost-module--align-right--73QHm>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.BlogPost-module--post-body--hinQo span.BlogPost-module--align-right--73QHm span img{margin:0;text-align:right}.BlogPost-module--post-body--hinQo span.BlogPost-module--float-left--YVxC6{display:block;float:left;margin-right:13px;overflow:hidden}.BlogPost-module--post-body--hinQo span.BlogPost-module--float-left--YVxC6 span{margin:13px 0 0}.BlogPost-module--post-body--hinQo span.BlogPost-module--float-right--uu0YC{display:block;float:right;margin-left:13px;overflow:hidden}.BlogPost-module--post-body--hinQo span.BlogPost-module--float-right--uu0YC>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.BlogPost-module--post-body--hinQo .BlogPost-module--highlight--IO8Fw{margin-bottom:16px}.BlogPost-module--post-body--hinQo .BlogPost-module--csv-data--i41TJ td,.BlogPost-module--post-body--hinQo .BlogPost-module--csv-data--i41TJ th{font-size:12px;line-height:1;overflow:hidden;padding:5px;text-align:left;white-space:nowrap}.BlogPost-module--post-body--hinQo .BlogPost-module--csv-data--i41TJ .BlogPost-module--blob-num--8M8qP{background:var(--color-canvas-default);border:0;padding:10px 8px 9px;text-align:right}.BlogPost-module--post-body--hinQo .BlogPost-module--csv-data--i41TJ tr{border-top:0}.BlogPost-module--post-body--hinQo .BlogPost-module--csv-data--i41TJ th{background:var(--color-canvas-subtle);border-top:0;font-weight:600}.BlogPost-module--post-body--hinQo .BlogPost-module--footnotes--muW3U{border-top:1px solid var(--color-border-default);color:var(--color-fg-muted);font-size:12px}.BlogPost-module--post-body--hinQo .BlogPost-module--footnotes--muW3U ol{padding-left:16px}.BlogPost-module--post-body--hinQo .BlogPost-module--footnotes--muW3U li{position:relative}.BlogPost-module--post-body--hinQo .BlogPost-module--footnotes--muW3U li:target:before{border:2px solid var(--color-accent-emphasis);border-radius:6px;bottom:-8px;content:"";left:-24px;pointer-events:none;position:absolute;right:-8px;top:-8px}.BlogPost-module--post-body--hinQo .BlogPost-module--footnotes--muW3U li:target{color:var(--color-fg-default)}.BlogPost-module--post-body--hinQo .BlogPost-module--footnotes--muW3U .BlogPost-module--data-footnote-backref--mhVdk g-emoji{font-family:monospace}.BlogPost-module--post-body--hinQo .BlogPost-module--task-list-item--KkS5\+{list-style-type:none}.BlogPost-module--post-body--hinQo .BlogPost-module--task-list--2DCKY.BlogPost-module--post-body-item--UsoQa label{font-weight:400}.BlogPost-module--post-body--hinQo .BlogPost-module--task-list-item--KkS5\+.BlogPost-module--enabled--4dTT9 label{cursor:pointer}.BlogPost-module--post-body--hinQo .BlogPost-module--task-list-item--KkS5\++.BlogPost-module--task-list-item--KkS5\+{margin-top:3px}.BlogPost-module--post-body--hinQo .BlogPost-module--task-list-item--KkS5\+ .BlogPost-module--handle--qvHOr{display:none}.BlogPost-module--post-body--hinQo .BlogPost-module--task-list-item-checkbox--ypvCU{margin:0 .2em .25em -1.6em;vertical-align:middle}.BlogPost-module--post-body--hinQo .BlogPost-module--contains-task-list--SFrt4:dir(rtl) .BlogPost-module--task-list-item-checkbox--ypvCU{margin:0 -1.6em .25em .2em}.BlogPost-module--post-body--hinQo ::-webkit-calendar-picker-indicator{-webkit-filter:invert(50%);filter:invert(50%)}.mark-nav{background-color:#fff;border-left:1px solid #eee;height:60vh;overflow-y:auto}.mark-nav a.head-nav-item{display:block;padding-bottom:2px;padding-top:2px;text-decoration:inherit;transition:all .2s}.mark-nav a.head-nav-item.active{border-left:2px solid #007fff;color:#007fff}.mark-nav a.head-nav-item.active,.mark-nav a.head-nav-item:hover{background-color:#f8f8f8}.mark-nav a.nav-item-1,.mark-nav a.nav-item-2{color:#000;font-size:1.2em;font-weight:400;padding-left:1em}.mark-nav a.nav-item-3,.mark-nav a.nav-item-4,.mark-nav a.nav-item-5,.mark-nav a.nav-item-6{color:#333;font-size:1em;font-weight:400;padding-left:2em}.Main-module--main-root--8jy\+l{margin:auto;max-width:720px;padding:60px 5px 5px}.TagsCard-module--tag-container--oc5Xg{margin-bottom:8px;position:relative}.TagsCard-module--tag-container--oc5Xg>.TagsCard-module--tag--aOamL{background-color:#1565c0;border-radius:4px;color:#fff;cursor:pointer;display:inline-block;list-style:none;white-space:nowrap}.TagsCard-module--tag-container--oc5Xg>.TagsCard-module--tag--aOamL:hover{background:#237bd9}.TagsCard-module--tag-container--oc5Xg>.TagsCard-module--tag--aOamL a{color:#fff;padding:0 7px;text-decoration:none}.TagsCard-module--tag-container--oc5Xg>.TagsCard-module--tag--aOamL.TagsCard-module--large--cGzFC{font-size:20px;height:28px;line-height:26px;margin-bottom:8px;margin-right:16px}.TagsCard-module--tag-container--oc5Xg>.TagsCard-module--tag--aOamL.TagsCard-module--small--X5xL5{font-size:12px;height:22px;line-height:20px;margin-bottom:4px;margin-right:8px}.TagsCard-module--tag-container--oc5Xg>.TagsCard-module--original---pxiP{background-color:rgba(242,174,67,.25);border-radius:11px;color:#f2ae43;font-size:14px;line-height:26px;margin-left:-33px;margin-right:10px;padding:0 6px;position:absolute}.blog-module--indexContent--wYIPh{overflow:hidden;padding-top:80px;position:relative}.blog-module--indexContent--wYIPh:before{background:#eaeaea;content:"";display:block;height:100%;left:50%;position:absolute;top:-5px;width:1px}.pagination{background:#fff;padding-top:10px;position:relative;text-align:center}.pagination a{background-color:#fff;border:1px solid #d9d9d9;border-radius:4px;color:#000;display:inline-block;font-family:Arial;height:32px;line-height:30px;list-style:none;margin:0 4px;min-width:32px;outline:0;text-align:center;text-decoration:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.pagination span{margin:0 4px}.pagination a.active{border-color:#237bd9;color:#237bd9}.pagination a:hover{border-color:#1565c0;color:#1565c0;transition:all .3s}.StarCanvas-module--starbg--z7M7b{background:#000;overflow-x:hidden;width:100%}.ityped-cursor{-webkit-animation:blink .5s infinite;animation:blink .5s infinite;-webkit-animation-direction:alternate;animation-direction:alternate;opacity:1}@keyframes blink{to{opacity:0}}@-webkit-keyframes blink{to{opacity:0}}.person-header{color:#fff;left:50%;position:absolute;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.person-header .author-inner{align-items:center;display:flex;justify-content:center;width:auto}.person-header .author-inner .avatar{border-radius:50%;height:80px;width:80px}.person-header .inner-bio{text-align:center}
archlinux nvidia 独显配置 - zido的个人博客 archlinux nvidia 独显配置 现状
我现在的情况是安装了独显
sudo pacman -S nvidia nvidia-utils
从 gdm 进入 gnome 选择的是【gnome】而不是【gnome-xorg】。但是我进系统之后发现不对劲,明显不是很流畅,输出一下echo $XDG_SESSION_TYPE
发现是 X11。阿这。。。。赶紧看一下 wayland 装了吗?
$ pacman -Qs wayland
local/deepin-wayland 1.0 .0-1 ( deepin)
DDE wayland support libraries
local/egl-wayland 1.1 .7-1
EGLStream-based Wayland external platform
local/kwayland 5.85 .0-1 ( kf5)
Qt-style Client and Server library wrapper for the Wayland libraries
local/lib32-wayland 1.19 .0-1
A computer display server protocol
local/libva 2.12 .0-1
Video Acceleration ( VA) API for Linux
local/qt5-wayland 5.15 .2+kde+r29-1 ( qt qt5)
Provides APIs for Wayland
local/wayland 1.19 .0-1
A computer display server protocol
local/wayland-protocols 1.21 -1
Specifications of extended Wayland protocols
local/xorg-xwayland 21.1 .2-1 ( xorg)
run X clients under wayland
没毛病啊,而且我明显默认进入桌面的,怎么会是 xorg 呢?强制使用 wayland 运行应用试试:
GDK_BACKEND = wayland gedit
发现运行报错。可能这就是原因?
解决
翻了翻文档,尝试让内核优先加载独显驱动。
首先通过 grub 来添加内核启动参数 nvidia-drm.modeset=1
。这会开启DRM 内核级显示模式。修改 /etc/default/grub
文件。添加 nvidia-drm.modeset=1
到 GRUB_CMDLINE_LINUX_DEFAULT
行中。我这里大概是这样
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet nvidia-drm.modeset=1"
但是 nvidia 内核在 GDM 之后才加载,于是需要在启动过程中添加四个内核模块:nvidia
、 nvidia_modeset
、 nvidia_uvm
以及 nvidia_drm
。
修改文件 /etc/mkinitcpio.conf
:
MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
加入这四个模块后,就需要每次更新 nvidia 驱动之后运行一次 mkinitcpio。这可以使用 pacman 钩子来自动化:
添加 /etc/pacman.d/hooks/nvidia.hook
文件:
[Trigger]
Operation=Install
Operation=Upgrade
Operation=Remove
Type=Package
Target=nvidia
Target=linux
# Change the linux part above and in the Exec line if a different kernel is used
[Action]
Description=Update Nvidia module in initcpio
Depends=mkinitcpio
When=PostTransaction
NeedsTargets
Exec=/bin/sh -c 'while read -r trg; do case $trg in linux) exit 0; esac; done; /usr/bin/mkinitcpio -P'
务必保证 Target 项所设置的软件包与你在前面的安装过程中所使用的相符(例如nvidia 或 nvidia-dkms 或 nvidia-lts 或 nvidia-ck-something)。
注意: Exec 那一行看起来非常复杂,是为了避免在 nvidia 和 linux 软件包都发生更新的时候重复运行 mkinitcpio。如果你觉得无所谓,可以删掉 Target=linux 以及 NeedsTargets,然后 Exec 就可以简化为 Exec=/usr/bin/mkinitcpio -P。
最后
在独显下运行 wayland 发现问题还挺多的,首先是硬件加速,不论是 va
、vdp
貌似都不行。导致只要涉及到硬件编解码的都会有点问题:
obs-studio 录制显示屏黑屏(日志有警告,EGL Driver message (Critical) eglMakeCurrent: Failed to make the GLX context current)
obs-studio 录制窗口直接死机(日志是 core dump。libDeckLinkAPI.so: cannot open shared object file: No such file or directory
,这个貌似是驱动设置有问题?非常奇怪)
mpv 看视频黑屏 (日志有警告,貌似 wayland 关于休眠的一个 api 未实现)
gnome 40 的 activity
界面偶尔闪烁
上一条的基础上,如果开了 wine。闪到你怀疑人生,而且预览图会突然变成 wine 程序,比如 QQ 。
fcitx5 输入在某些应用下闪烁(比如 gedit)
fcitx5 偶尔定位漂移
Chrome 开启硬件加速 看视频居!然!没!有!问!题???稳如老狗,yyds
wayland 问题那么多基本上都影响到我正常使用了,特别是闪烁的问题,大晚上的,闪瞎眼。考虑到这个问题,最终还是选择了 xorg,稳👍🏻。